You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by pa...@apache.org on 2019/09/26 00:26:19 UTC

[groovy] branch master updated (7f3675e -> 7f4fbef)

This is an automated email from the ASF dual-hosted git repository.

paulk pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git.


    from 7f3675e  GROOVY-9251: Bump picocli to 4.0.4
     new 5073dc0  add some tests and clean up some tests
     new a8c2c33  fix javadoc
     new c652220  GROOVY-9251: Bump picocli to 4.0.4
     new ecfeaec  master is now 4.0.x
     new b860491  maven coords moved to apache for 4.0.x
     new ae12a91  don't use deprecated version of class
     new 0b84570  don't use deprecated version of class
     new eb5683a  don't use deprecated version of class
     new 378628a  don't use deprecated version of class
     new 2f93516  don't use deprecated version of resources
     new ac12764  move to later spock version
     new 241b303  back down version number until we have a spock version that supports 4.0+
     new 88034ff  GROOVY-9254: Split package renaming second stage (remove violating packages)
     new 2e99223  don't use deprecated version of class
     new 1b68852  don't use deprecated version of class
     new 0dfbdf9  GROOVY-9254: Split package renaming second stage (remove violating packages)
     new d7abc6f  don't use deprecated version of class
     new 49c6df7  don't use deprecated version of class
     new facdf03  GROOVY-9254: Split package renaming second stage (remove violating packages)
     new 2d84eed  Fix link to NSIS installer
     new 9005e2a  Improve code style (closes #995)
     new 8df8307  Improve code style (closes #995)
     new 7f4fbef  Merge branch 'master' of https://gitbox.apache.org/repos/asf/groovy

The 23 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 build.gradle                                       |    2 +-
 config/codenarc/codenarc.groovy                    |    2 +-
 gradle.properties                                  |    4 +-
 gradle/docs.gradle                                 |    6 +-
 gradle/pomconfigurer.gradle                        |    4 +-
 .../java/groovy/transform/AnnotationCollector.java |    1 +
 src/main/java/groovy/xml/QName.java                |  288 ---
 .../apache/groovy/ast/tools/ClassNodeUtils.java    |    2 +-
 .../java/org/codehaus/groovy/antlr/LineColumn.java |    4 +-
 .../java/org/codehaus/groovy/ast/GenericsType.java |    2 +-
 .../groovy/control/CompilerConfiguration.java      |    8 +-
 .../codehaus/groovy/control/ResolveVisitor.java    |    5 +-
 .../groovy/control/StaticImportVisitor.java        |    2 +-
 .../groovy/runtime/DefaultGroovyMethods.java       |    4 +-
 .../org/codehaus/groovy/runtime/InvokerHelper.java |    8 +-
 .../codehaus/groovy/runtime/MetaClassHelper.java   |   17 +-
 .../org/codehaus/groovy/runtime/NullObject.java    |    2 +-
 .../runtime/m12n/ExtensionModuleRegistry.java      |    6 +-
 .../typehandling/DefaultTypeTransformation.java    |    3 +-
 .../groovy/tools/javac/JavaStubGenerator.java      |    5 +-
 src/spec/doc/core-getting-started.adoc             |    2 +-
 src/spec/doc/core-metaprogramming.adoc             |    2 +-
 src/spec/test/BaseScriptSpecTest.groovy            |    1 +
 src/spec/test/ClassDesignASTTransformsTest.groovy  |    2 +
 src/spec/test/ClassTest.groovy                     |    2 +
 src/spec/test/CloningASTTransformsTest.groovy      |    2 +
 src/spec/test/ClosuresSpecTest.groovy              |    2 +
 .../test/CodeGenerationASTTransformsTest.groovy    |    2 +
 src/spec/test/CoercionTest.groovy                  |    2 +
 src/spec/test/CommandChainsTest.groovy             |    2 +
 .../CompilerDirectivesASTTransformsTest.groovy     |    2 +
 src/spec/test/CustomizersTest.groovy               |    2 +
 .../DeclarativeConcurrencyASTTransformsTest.groovy |    2 +
 src/spec/test/DelegatesToSpecTest.groovy           |    2 +
 src/spec/test/DesignPatternsTest.groovy            |    2 +-
 src/spec/test/DifferencesFromJavaTest.groovy       |    2 +
 src/spec/test/ExtensionModuleSpecTest.groovy       |    2 +
 src/spec/test/IntegrationTest.groovy               |    2 +
 .../test/LogImprovementsASTTransformsTest.groovy   |    2 +
 src/spec/test/PackageTest.groovy                   |    2 +
 src/spec/test/PrimitiveTest.groovy                 |    2 +
 .../test/SaferScriptingASTTransformsTest.groovy    |    2 +
 src/spec/test/ScriptsAndClassesSpecTest.groovy     |    2 +
 src/spec/test/SwingASTTransformsTest.groovy        |    2 +
 src/spec/test/TestingASTTransformsTest.groovy      |    5 +-
 src/spec/test/TraitsSpecificationTest.groovy       |    3 +
 src/spec/test/builder/FileTreeBuilderTest.groovy   |   10 +-
 src/spec/test/builder/NodeBuilderTest.groovy       |    2 +
 .../test/builder/ObjectGraphBuilderTest.groovy     |    1 +
 src/spec/test/cli/CliBuilderTestCase.groovy        |    2 +
 src/spec/test/gdk/ConfigSlurperTest.groovy         |    2 +
 src/spec/test/gdk/ExpandoTest.groovy               |    2 +
 src/spec/test/gdk/ObservableTest.groovy            |    2 +
 .../test/gdk/WorkingWithCollectionsTest.groovy     |    2 +
 src/spec/test/gdk/WorkingWithIOSpecTest.groovy     |    3 +-
 .../metaprogramming/ASTMatcherFilteringTest.groovy |    1 +
 .../metaprogramming/ASTMatcherTestingTest.groovy   |    1 +
 .../test/metaprogramming/ASTXFormSpecTest.groovy   |    1 +
 src/spec/test/metaprogramming/CategoryTest.groovy  |    1 +
 .../metaprogramming/ExpandoMetaClassTest.groovy    |    2 +
 .../test/metaprogramming/GroovyObjectTest.groovy   |    2 +
 .../test/metaprogramming/InterceptableTest.groovy  |    2 +
 .../InterceptionThroughMetaClassTest.groovy        |    1 +
 .../test/metaprogramming/MacroClassTest.groovy     |    1 +
 .../metaprogramming/MacroExpressionTest.groovy     |    1 +
 .../test/metaprogramming/MacroStatementTest.groovy |    1 +
 .../MacroVariableSubstitutionTest.groovy           |    1 +
 .../MethodPropertyMissingTest.groovy               |    2 +
 ...taticPropertyMissingAndMethodMissingTest.groovy |    2 +
 src/spec/test/objectorientation/MethodsTest.groovy |    2 +
 src/spec/test/semantics/GPathTest.groovy           |    3 +-
 src/spec/test/semantics/LabelsTest.groovy          |    2 +
 src/spec/test/semantics/PowerAssertTest.groovy     |    1 +
 src/spec/test/semantics/TheGroovyTruthTest.groovy  |    2 +
 src/spec/test/testingguide/GDKMethodTests.groovy   |    2 +
 .../testingguide/GroovyTestCaseExampleTests.groovy |    3 +-
 .../test/testingguide/MockingExampleTests.groovy   |    1 +
 src/spec/test/typing/OptionalTypingTest.groovy     |    2 +
 .../test/typing/StaticCompilationIntroTest.groovy  |    2 +
 .../typing/TypeCheckingExtensionSpecTest.groovy    |    1 +
 src/tck/test/gls/ch03/s01/Unicode1.groovy          |    4 +-
 src/tck/test/gls/ch03/s01/Unicode2.groovy          |    4 +-
 .../test/gls/ch03/s02/LexicalTranslation1.groovy   |    2 +
 src/tck/test/gls/ch03/s02/Longest1.groovy          |    2 +
 src/tck/test/gls/ch03/s03/UnicodeEscapes1.groovy   |    2 +
 src/tck/test/gls/ch03/s03/UnicodeEscapes2.groovy   |    2 +
 src/test/DefaultPackageClassSupport.java           |    2 +-
 src/test/gls/CompilableTestSupport.groovy          |    1 +
 src/test/gls/annotations/AnnotationsTestBase.java  |    2 +-
 .../AnnotationClosureExhaustiveTestSupport.groovy  |    2 +
 .../closures/AnnotationClosureTest.groovy          |    2 +-
 .../AnnotationClosureWithNonLocalVariable.groovy   |    2 +
 src/test/gls/ch06/s05/GName1Test.groovy            |    1 +
 src/test/gls/closures/ResolveStrategyTest.groovy   |    1 +
 src/test/gls/generics/GenericsTestBase.java        |    2 +-
 src/test/gls/innerClass/InnerClassTest.groovy      |    2 +-
 src/test/gls/innerClass/InnerInterfaceTest.groovy  |    2 +
 .../gls/invocation/ClassDuplicationTest.groovy     |    2 +
 src/test/gls/invocation/DefaultParamTest.groovy    |    1 +
 src/test/gls/scope/VariablePrecedenceTest.groovy   |    2 +
 src/test/gls/syntax/Gep3OrderDslTest.groovy        |    1 +
 src/test/gls/syntax/Gep3Test.groovy                |    2 +
 src/test/groovy/ActorTest.groovy                   |    2 +
 src/test/groovy/AmbiguousInvocationTest.groovy     |    2 +
 src/test/groovy/ArrayAutoboxingTest.groovy         |    2 +
 src/test/groovy/ArrayCoerceTest.groovy             |    2 +
 src/test/groovy/ArrayParamMethodTest.groovy        |    2 +
 src/test/groovy/ArrayTest.groovy                   |    2 +
 src/test/groovy/ArrayTypeTest.groovy               |    2 +
 src/test/groovy/AsTest.groovy                      |    3 +
 src/test/groovy/AssertNumberTest.groovy            |    2 +
 src/test/groovy/AssertTest.groovy                  |    2 +
 src/test/groovy/Base64Test.groovy                  |    2 +
 src/test/groovy/BinaryStreamsTest.groovy           |    2 +
 src/test/groovy/BindingTest.groovy                 |    2 +
 src/test/groovy/BitSetTest.groovy                  |    2 +
 src/test/groovy/CallInnerClassCtorTest.groovy      |    2 +
 src/test/groovy/CastTest.groovy                    |    2 +
 src/test/groovy/CategoryTest.groovy                |    2 +
 src/test/groovy/ChainedAssignmentTest.groovy       |    2 +
 src/test/groovy/ClassExpressionTest.groovy         |    2 +
 src/test/groovy/ClassLoaderBug.groovy              |    2 +
 src/test/groovy/ClassTest.groovy                   |    2 +
 src/test/groovy/ClosureAsParamTest.groovy          |    2 +
 src/test/groovy/ClosureCloneTest.groovy            |    2 +
 src/test/groovy/ClosureComparatorTest.groovy       |    2 +
 src/test/groovy/ClosureComposeTest.groovy          |    1 +
 src/test/groovy/ClosureCurryTest.groovy            |    1 +
 src/test/groovy/ClosureDefaultParameterTest.groovy |    2 +
 src/test/groovy/ClosureInClosureTest.groovy        |    2 +
 src/test/groovy/ClosureInStaticMethodTest.groovy   |    2 +
 src/test/groovy/ClosureMethodCallTest.groovy       |    2 +
 src/test/groovy/ClosureMethodTest.groovy           |    1 +
 src/test/groovy/ClosureMethodsOnFileTest.groovy    |    2 +
 src/test/groovy/ClosureMissingMethodTest.groovy    |    2 +
 src/test/groovy/ClosureReturnTest.groovy           |    2 +
 .../ClosureReturnWithoutReturnStatementTest.groovy |    2 +
 src/test/groovy/ClosureSugarTest.groovy            |    2 +
 src/test/groovy/ClosureTest.groovy                 |    1 +
 .../groovy/ClosureUsingOuterVariablesTest.groovy   |    2 +
 src/test/groovy/ClosureWithDefaultParamTest.groovy |    2 +
 .../groovy/ClosureWithEmptyParametersTest.groovy   |    2 +
 src/test/groovy/CollateTest.groovy                 |    2 +
 src/test/groovy/CompareEqualsTest.groovy           |    2 +
 src/test/groovy/CompareToTest.groovy               |    2 +
 src/test/groovy/CompareTypesTest.groovy            |    4 +-
 src/test/groovy/CompileOrderTest.groovy            |    2 +
 src/test/groovy/CompilerErrorTest.groovy           |    2 +
 src/test/groovy/Constructor2Test.groovy            |    2 +
 src/test/groovy/ConstructorTest.groovy             |    2 +
 src/test/groovy/CurlyBracketLayoutTest.groovy      |    2 +
 src/test/groovy/DefaultParamClosureTest.groovy     |    2 +
 src/test/groovy/DoWhileLoopTest.groovy             |    2 +
 src/test/groovy/DollarEscapingTest.groovy          |    2 +
 src/test/groovy/DownUpStepTest.groovy              |    2 +
 src/test/groovy/DynamicMemberTest.groovy           |    2 +
 src/test/groovy/EqualsTest.groovy                  |    2 +
 src/test/groovy/EscapedUnicodeTest.groovy          |    2 +
 src/test/groovy/ExceptionInClosureTest.groovy      |    2 +
 src/test/groovy/ExpandoPropertyTest.groovy         |    2 +
 src/test/groovy/FileTest.groovy                    |    2 +
 src/test/groovy/FilterLineTest.groovy              |    2 +
 src/test/groovy/FinallyTest.groovy                 |    2 +
 .../groovy/ForLoopWithLocalVariablesTest.groovy    |    2 +
 src/test/groovy/GStringTest.groovy                 |    2 +
 src/test/groovy/GeneratorTest.groovy               |    2 +
 src/test/groovy/GlobalPrintlnTest.groovy           |    2 +
 .../groovy/GroovyCharSequenceMethodsTest.groovy    |    2 +
 src/test/groovy/GroovyClosureMethodsTest.groovy    |    2 +
 src/test/groovy/GroovyInterceptableTest.groovy     |    1 +
 src/test/groovy/GroovyMethodsTest.groovy           |    2 +
 src/test/groovy/GroovyTruthTest.groovy             |    2 +
 src/test/groovy/HeredocsTest.groovy                |    2 +
 src/test/groovy/HexTest.groovy                     |    2 +
 src/test/groovy/HomepageTest.groovy                |    2 +
 src/test/groovy/IdentityClosureTest.groovy         |    2 +
 src/test/groovy/IfElseCompactTest.groovy           |    2 +
 src/test/groovy/IfElseTest.groovy                  |    2 +
 src/test/groovy/IfPropertyTest.groovy              |    2 +
 src/test/groovy/IfTest.groovy                      |    2 +
 src/test/groovy/IfWithMethodCallTest.groovy        |    2 +
 src/test/groovy/IllegalAccessScenariosTest.groovy  |    2 +
 src/test/groovy/ImportTest.groovy                  |    2 +
 src/test/groovy/InstanceofTest.groovy              |    2 +
 .../groovy/InvokeNormalMethodsFirstTest.groovy     |    2 +
 src/test/groovy/KeywordsInPropertyNamesTest.groovy |    2 +
 src/test/groovy/LeftShiftTest.groovy               |    2 +
 src/test/groovy/ListIteratingTest.groovy           |    2 +
 src/test/groovy/ListTest.groovy                    |    1 +
 src/test/groovy/LiteralTypesTest.groovy            |    2 +
 src/test/groovy/LittleClosureTest.groovy           |    2 +
 src/test/groovy/LocalFieldTest.groovy              |    2 +
 src/test/groovy/LocalPropertyTest.groovy           |    2 +
 src/test/groovy/LocalVariableTest.groovy           |    2 +
 src/test/groovy/LogicTest.groovy                   |    2 +
 src/test/groovy/LoopBreakTest.groovy               |    2 +
 src/test/groovy/MapConstructionTest.groovy         |    2 +
 src/test/groovy/MapPropertyTest.groovy             |    2 +
 src/test/groovy/MapTest.groovy                     |    2 +
 src/test/groovy/MethodCallTest.groovy              |    2 +
 .../groovy/MethodCallWithoutParenthesisTest.groovy |    2 +
 .../MethodParameterAccessWithinClosureTest.groovy  |    2 +
 src/test/groovy/MinMaxTest.groovy                  |    2 +
 src/test/groovy/MinusEqualsTest.groovy             |    2 +
 src/test/groovy/ModuloTest.groovy                  |    2 +
 src/test/groovy/MultiCatchTest.groovy              |    1 +
 src/test/groovy/MultiDimArraysTest.groovy          |    2 +
 .../groovy/MultilineChainExpressionTest.groovy     |    2 +
 src/test/groovy/MultilineStringTest.groovy         |    2 +
 src/test/groovy/MultiplyDivideEqualsTest.groovy    |    2 +
 src/test/groovy/NamedParameterTest.groovy          |    1 +
 src/test/groovy/NestedClassTest.groovy             |    2 +
 src/test/groovy/NullPropertyTest.groovy            |    2 +
 src/test/groovy/OptionalReturnTest.groovy          |    2 +
 src/test/groovy/OverloadInvokeMethodTest.groovy    |    2 +
 src/test/groovy/OverridePropertyGetterTest.groovy  |    2 +
 src/test/groovy/OverrideTest.groovy                |    2 +
 src/test/groovy/PlusEqualsTest.groovy              |    2 +
 src/test/groovy/PostfixTest.groovy                 |    2 +
 src/test/groovy/PrefixTest.groovy                  |    2 +
 src/test/groovy/PrimitiveArraysTest.groovy         |    2 +
 src/test/groovy/PrimitiveDefaultValueTest.groovy   |    2 +
 src/test/groovy/PrimitiveTypeFieldTest.groovy      |    2 +
 src/test/groovy/PrimitiveTypesTest.groovy          |    2 +
 src/test/groovy/PrintTest.groovy                   |    1 +
 ...ateVariableAccessFromAnotherInstanceTest.groovy |    2 +
 src/test/groovy/ProcessTest.groovy                 |    2 +
 src/test/groovy/Property2Test.groovy               |    2 +
 src/test/groovy/PropertyTest.groovy                |    2 +
 src/test/groovy/PropertyWithoutDotTest.groovy      |    2 +
 src/test/groovy/RangeTest.groovy                   |    2 +
 src/test/groovy/ReadLineTest.groovy                |    2 +
 src/test/groovy/RegularExpressionsTest.groovy      |    2 +
 src/test/groovy/ReturnTest.groovy                  |    2 +
 src/test/groovy/SafeNavigationTest.groovy          |    2 +
 src/test/groovy/SerializeTest.groovy               |    2 +
 src/test/groovy/SetTest.groovy                     |    2 +
 src/test/groovy/ShellTest.groovy                   |    2 +
 src/test/groovy/SimplePostfixTest.groovy           |    2 +
 src/test/groovy/SingletonBugTest.groovy            |    3 +
 src/test/groovy/SliceTest.groovy                   |    2 +
 src/test/groovy/SocketTest.groovy                  |    2 +
 src/test/groovy/SortTest.groovy                    |    2 +
 src/test/groovy/SpreadDotTest.groovy               |    2 +
 src/test/groovy/SqlDateTest.groovy                 |    3 +-
 src/test/groovy/StackTraceTest.groovy              |    2 +
 src/test/groovy/StaticMessageTest.groovy           |    2 +
 src/test/groovy/StringBufferTest.groovy            |    2 +
 src/test/groovy/StringTest.groovy                  |    2 +
 src/test/groovy/SubscriptTest.groovy               |    2 +
 src/test/groovy/SwitchTest.groovy                  |    2 +
 .../groovy/SwitchWithDifferentTypesTest.groovy     |    2 +
 src/test/groovy/TextPropertyTest.groovy            |    2 +
 src/test/groovy/ThisAndSuperTest.groovy            |    2 +
 src/test/groovy/ThreadMethodsTest.groovy           |    2 +
 src/test/groovy/ThrowTest.groovy                   |    2 +
 src/test/groovy/ToArrayBugTest.groovy              |    2 +
 src/test/groovy/TripleQuotedStringTest.groovy      |    2 +
 src/test/groovy/TypesafeMethodTest.groovy          |    2 +
 src/test/groovy/UniqueOnCollectionTest.groovy      |    2 +
 .../UniqueOnCollectionWithClosureTest.groovy       |    2 +
 .../UniqueOnCollectionWithComparatorTest.groovy    |    2 +
 src/test/groovy/UnsafeNavigationTest.groovy        |    2 +
 src/test/groovy/VArgsTest.groovy                   |    2 +
 src/test/groovy/ValidNameTest.groovy               |    2 +
 src/test/groovy/VarargsMethodTest.groovy           |    2 +
 src/test/groovy/VerbatimGStringTest.groovy         |    2 +
 src/test/groovy/WhileLoopTest.groovy               |    2 +
 .../PackageAndImportAnnotationTest.groovy          |   21 +-
 .../annotations/ParameterAnnotationTest.groovy     |    1 +
 src/test/groovy/beans/BindableTransformTest.groovy |    1 +
 .../groovy/beans/ListenerListTransformTest.groovy  |    2 +
 src/test/groovy/beans/VetoableTransformTest.groovy |    1 +
 .../groovy/bugs/AmbiguousListOrMethodTest.groovy   |    2 +
 src/test/groovy/bugs/AsBoolBug.groovy              |    2 +
 .../bugs/AssignmentInsideExpressionBug.groovy      |    2 +
 .../groovy/bugs/AttributeSetExpressionBug.groovy   |    2 +
 .../groovy/bugs/AutoboxingOfComparisonsBug.groovy  |    2 +
 .../bugs/BadLineNumberOnExceptionBugTest.groovy    |    6 +-
 src/test/groovy/bugs/BadScriptNameBug.groovy       |    2 +
 src/test/groovy/bugs/BenchmarkBug.groovy           |    2 +
 src/test/groovy/bugs/BlockAsClosureBug.groovy      |    2 +
 src/test/groovy/bugs/BooleanBug.groovy             |    2 +
 src/test/groovy/bugs/ByteIndexBug.groovy           |    2 +
 src/test/groovy/bugs/Bytecode2Bug.groovy           |    2 +
 src/test/groovy/bugs/Bytecode3Bug.groovy           |    2 +
 src/test/groovy/bugs/Bytecode4Bug.groovy           |    2 +
 src/test/groovy/bugs/Bytecode5Bug.groovy           |    2 +
 src/test/groovy/bugs/Bytecode6Bug.groovy           |    2 +
 src/test/groovy/bugs/Bytecode7Bug.groovy           |    2 +
 src/test/groovy/bugs/BytecodeBug.groovy            |    2 +
 .../bugs/CallingClosuresWithClosuresBug.groovy     |    2 +
 .../groovy/bugs/CastWhenUsingClosuresBug.groovy    |    2 +
 src/test/groovy/bugs/ChristofsPropertyBug.groovy   |    2 +
 .../groovy/bugs/ClassGeneratorFixesTest.groovy     |    2 +
 src/test/groovy/bugs/ClassInNamedParamsBug.groovy  |    2 +
 src/test/groovy/bugs/ClosureInClosureBug.groovy    |    2 +
 .../groovy/bugs/ClosureTypedVariableBug.groovy     |    2 +
 src/test/groovy/bugs/ClosureVariableBug.groovy     |    2 +
 .../bugs/ClosureWithBitwiseDefaultParamTest.groovy |    2 +
 src/test/groovy/bugs/ConstructorBug.groovy         |    1 +
 src/test/groovy/bugs/CustomMetaClassTest.groovy    |    2 +
 src/test/groovy/bugs/DefVariableBug.groovy         |    2 +
 .../bugs/DirectMethodCallWithVargsTest.groovy      |    1 +
 src/test/groovy/bugs/ForLoopBug.groovy             |    2 +
 src/test/groovy/bugs/FullyQualifiedClassBug.groovy |    2 +
 .../bugs/FullyQualifiedMethodReturnTypeBug.groovy  |    2 +
 .../bugs/FullyQualifiedVariableTypeBug.groovy      |    2 +
 src/test/groovy/bugs/GetterBug.groovy              |    2 +
 src/test/groovy/bugs/Groovy1018_Bug.groovy         |    4 +-
 src/test/groovy/bugs/Groovy1059_Bug.groovy         |    2 +
 src/test/groovy/bugs/Groovy1081_Bug.groovy         |    2 +
 src/test/groovy/bugs/Groovy1407_Bug.groovy         |    2 +
 src/test/groovy/bugs/Groovy1462_Bug.groovy         |    2 +
 src/test/groovy/bugs/Groovy1465Bug.groovy          |    1 +
 src/test/groovy/bugs/Groovy1593.groovy             |    2 +
 src/test/groovy/bugs/Groovy1617_Bug.groovy         |    2 +
 src/test/groovy/bugs/Groovy1706_Bug.groovy         |    2 +
 src/test/groovy/bugs/Groovy2271Bug.groovy          |    1 +
 src/test/groovy/bugs/Groovy2339Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy2348Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy2350Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy2351Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy2365Base.groovy         |    2 +
 src/test/groovy/bugs/Groovy2391Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy239_Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy2432Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy2490Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy252_Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy2549Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy2556Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy2557Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy2558Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy2666Bug.groovy          |    1 +
 src/test/groovy/bugs/Groovy2706Bug.groovy          |    2 +-
 src/test/groovy/bugs/Groovy2773Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy278_Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy2801Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy2816Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy2849Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy2949Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy3069Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy308_Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy3135Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy3139Bug.groovy          |    1 +
 src/test/groovy/bugs/Groovy3156And2621Bug.groovy   |    2 +
 src/test/groovy/bugs/Groovy3163Bug.groovy          |   32 +-
 src/test/groovy/bugs/Groovy3175_Bug.groovy         |    2 +
 src/test/groovy/bugs/Groovy3205Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy3208Bug.groovy          |    4 +-
 src/test/groovy/bugs/Groovy3235Bug.groovy          |    4 +-
 src/test/groovy/bugs/Groovy3238Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy325_Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy3304Bug.groovy          |    1 +
 src/test/groovy/bugs/Groovy3305Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy3335Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy3339Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy3383Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy3389Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy3403Bug.groovy          |    1 +
 src/test/groovy/bugs/Groovy3405Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy3410Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy3424Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy3426Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy3446Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy3462Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy3464Bug.groovy          |    1 +
 src/test/groovy/bugs/Groovy3465Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy3498Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy3509Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy3511Bug.groovy          |    1 +
 src/test/groovy/bugs/Groovy3519Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy3560Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy3574Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy3590Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy3645Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy3658Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy3679Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy3716Bug.groovy          |    1 +
 src/test/groovy/bugs/Groovy3718Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy3720Bug.groovy          |    1 +
 src/test/groovy/bugs/Groovy3723Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy3726Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy3749Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy3770Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy3776Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy3784Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy3789Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy3799Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy3801Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy3818Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy3827Bug.groovy          |    1 +
 src/test/groovy/bugs/Groovy3830Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy3831Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy3834Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy3839Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy3863Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy3868Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy3871Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy3873Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy3876Bug.groovy          |    1 +
 src/test/groovy/bugs/Groovy3894Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy389_Bug.groovy          |    3 +-
 src/test/groovy/bugs/Groovy3904Bug.groovy          |    1 +
 src/test/groovy/bugs/Groovy3948Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy3949Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy4006Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy4009Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy4018Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy4029Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy4035Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy4038Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy4046Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy4069Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy4075Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy4078Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy4080Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy4098Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy4104Bug.groovy          |    1 +
 src/test/groovy/bugs/Groovy4106Bug.groovy          |    1 +
 src/test/groovy/bugs/Groovy4107Bug.groovy          |    1 +
 src/test/groovy/bugs/Groovy4111Bug.groovy          |    1 +
 src/test/groovy/bugs/Groovy4116Bug.groovy          |    1 +
 src/test/groovy/bugs/Groovy4119Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy4120Bug.groovy          |    1 +
 src/test/groovy/bugs/Groovy4121Bug.groovy          |    1 +
 src/test/groovy/bugs/Groovy4129Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy4131Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy4133Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy4134Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy4139Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy4170Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy4188Bug.groovy          |    1 +
 src/test/groovy/bugs/Groovy4191Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy4193Bug.groovy          |    1 +
 src/test/groovy/bugs/Groovy4202Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy4206Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy4235Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy4241Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy4243Bug.groovy          |    1 +
 src/test/groovy/bugs/Groovy4246Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy4247Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy4252Bug.groovy          |    1 +
 src/test/groovy/bugs/Groovy4257Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy4264Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy4272Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy4273Bug.groovy          |    1 +
 src/test/groovy/bugs/Groovy4287Bug.groovy          |    1 +
 src/test/groovy/bugs/Groovy4293Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy4386_Bug.groovy         |    1 +
 src/test/groovy/bugs/Groovy4393Bug.groovy          |    1 +
 src/test/groovy/bugs/Groovy4410Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy4414Bug.groovy          |    1 +
 src/test/groovy/bugs/Groovy4415Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy4416Bug.groovy          |    2 +
 .../{Groovy4418Bug.groovy => Groovy4418.groovy}    |    4 +-
 src/test/groovy/bugs/Groovy4435Bug.groovy          |    1 +
 src/test/groovy/bugs/Groovy4449Bug.groovy          |    1 +
 ...Groovy4457GenericTypeDeclarationLeakTest.groovy |    2 +
 src/test/groovy/bugs/Groovy4471Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy4480Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy4497Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy4516Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy4584Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy4720Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy4857Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy4861Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy4922Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy4958Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy4966Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy4967Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy4973Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy4980Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy4986Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy4989Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy4999Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy5025Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy5030Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy5033Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy5056Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy5061.groovy             |    1 +
 src/test/groovy/bugs/Groovy5101Test.groovy         |    2 +
 src/test/groovy/bugs/Groovy5109Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy5122Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy5137Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy513_Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy5150Bug.groovy          |    1 +
 src/test/groovy/bugs/Groovy5152Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy5185Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy5193Bug.groovy          |    1 +
 src/test/groovy/bugs/Groovy5210Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy5212Bug.groovy          |    1 +
 src/test/groovy/bugs/Groovy5260Bug.groovy          |    1 +
 src/test/groovy/bugs/Groovy5272Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy5285Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy5396Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy5418Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy5425_Bug.groovy         |    2 +
 src/test/groovy/bugs/Groovy5572Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy558_616_Bug.groovy      |    2 +
 src/test/groovy/bugs/Groovy5687Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy5783Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy5802Bug.groovy          |    1 +
 src/test/groovy/bugs/Groovy5806Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy5852Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy5915Bug.groovy          |    1 +
 src/test/groovy/bugs/Groovy6042Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy6045Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy6072Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy6086Bug.groovy          |    1 +
 src/test/groovy/bugs/Groovy6271Bug.groovy          |    2 +-
 src/test/groovy/bugs/Groovy6374Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy6396Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy6508Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy6522Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy662Bug.groovy           |    2 +
 src/test/groovy/bugs/Groovy666_Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy6722Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy674_Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy6755Bug.groovy          |    1 +
 src/test/groovy/bugs/Groovy675_Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy6764Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy6786Bug.groovy          |    2 +-
 src/test/groovy/bugs/Groovy6804Bug.groovy          |    2 +-
 src/test/groovy/bugs/Groovy6808Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy6811Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy6821Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy6830Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy6841Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy6862Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy6932Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy7031Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy7081Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy7204Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy7248Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy7291Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy7520Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy7584Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy7691Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy7709Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy770_Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy7721Bug.groovy          |    1 +
 src/test/groovy/bugs/Groovy7753Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy7797Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy779_Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy7812Bug.groovy          |    1 +
 src/test/groovy/bugs/Groovy7876Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy7912Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy7916Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy7917Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy7920Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy7921Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy7924Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy7933Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy7937Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy7938Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy7951Bug.groovy          |    1 +
 src/test/groovy/bugs/Groovy7958Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy7969Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy7970Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy7985Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy7994Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy7995Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy7996Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy8026Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy8030Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy8048Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy8055Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy8059Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy8060Bug.groovy          |    2 +
 ...ructorParameterBug.groovy => Groovy8063.groovy} |   49 +-
 src/test/groovy/bugs/Groovy8065Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy8084Bug.groovy          |    2 +-
 src/test/groovy/bugs/Groovy8085Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy8110Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy8138Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy8140Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy8176Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy8212Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy8229Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy8260Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy8313Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy831_Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy8327Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy8337Bug.groovy          |    2 +-
 src/test/groovy/bugs/Groovy8339Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy8383Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy8389Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy8409Bug.groovy          |    2 +-
 src/test/groovy/bugs/Groovy8439Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy8474Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy8523Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy8600Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy8609Bug.groovy          |    1 +
 src/test/groovy/bugs/Groovy8629Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy872Bug.groovy           |    2 +
 src/test/groovy/bugs/Groovy8764Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy8816Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy8819Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy8833Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy8864Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy8868Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy8881Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy8887.groovy             |    2 +
 src/test/groovy/bugs/Groovy8962.groovy             |    1 +
 src/test/groovy/bugs/Groovy9074.groovy             |    1 +
 .../bugs/{Groovy9031.groovy => Groovy9204.groovy}  |   50 +-
 .../bugs/{Groovy9184.groovy => Groovy9213.groovy}  |   38 +-
 .../{Groovy9243Bug.groovy => Groovy9243.groovy}    |   17 +-
 src/test/groovy/bugs/Groovy965_Bug.groovy          |    2 +
 src/test/groovy/bugs/Groovy996_Bug.groovy          |    2 +
 src/test/groovy/bugs/GroovyInnerEnumBug.groovy     |    2 +
 src/test/groovy/bugs/GuillaumesBug.groovy          |    2 +
 src/test/groovy/bugs/GuillaumesMapBug.groovy       |    2 +
 .../groovy/bugs/ImportNodeLineNumberTest.groovy    |    2 +
 .../groovy/bugs/InconsistentStackHeightBug.groovy  |    2 +
 src/test/groovy/bugs/InterfaceImplBug.groovy       |    1 +
 ...vokeNormalMethodFromBuilder_Groovy657Bug.groovy |    2 +
 src/test/groovy/bugs/MarkupAndMethodBug.groovy     |    2 +
 src/test/groovy/bugs/MetaClassCachingBug.groovy    |    2 +
 ...MethodCallWithoutParensInStaticMethodBug.groovy |    2 +
 src/test/groovy/bugs/MethodClosureTest.groovy      |    1 +
 src/test/groovy/bugs/MethodDispatchBug.groovy      |    2 +
 src/test/groovy/bugs/MethodPointerBug.groovy       |    2 +
 src/test/groovy/bugs/MorgansBug.groovy             |    2 +
 src/test/groovy/bugs/NestedClosureBug.groovy       |    2 +
 .../groovy/bugs/NullAsBooleanCoercionTest.groovy   |    2 +
 src/test/groovy/bugs/NullCompareBug.groovy         |    2 +
 .../groovy/bugs/OverloadInvokeMethodBug.groovy     |    2 +
 src/test/groovy/bugs/POJOCallSiteBug.groovy        |    2 +
 src/test/groovy/bugs/PrimitivePropertyBug.groovy   |    2 +
 src/test/groovy/bugs/PrintlnWithNewBug.groovy      |    1 +
 src/test/groovy/bugs/PropertyNameBug.groovy        |    2 +
 src/test/groovy/bugs/RodsBooleanBug.groovy         |    2 +
 src/test/groovy/bugs/RodsBug.groovy                |    2 +
 .../groovy/bugs/RussellsOptionalParenTest.groovy   |    2 +
 src/test/groovy/bugs/SingleEvalTest.groovy         |    2 +
 .../groovy/bugs/StaticClosurePropertyBug.groovy    |    2 +
 src/test/groovy/bugs/StaticMethodCallBug.groovy    |    2 +
 src/test/groovy/bugs/StaticMethodImportBug.groovy  |    3 +-
 .../bugs/StaticMethodImportGroovy935Bug.groovy     |    3 +-
 src/test/groovy/bugs/StaticPropertyBug.groovy      |    2 +
 .../groovy/bugs/SubscriptAndExpressionBug.groovy   |    2 +
 src/test/groovy/bugs/SuperMethod2Bug.groovy        |    3 +-
 src/test/groovy/bugs/SuperMethodBug.groovy         |    2 +
 .../groovy/bugs/SynchronizedBytecodeBug.groovy     |    2 +
 src/test/groovy/bugs/TernaryOperatorTest.groovy    |    2 +
 src/test/groovy/bugs/TestSupport.java              |    2 +-
 src/test/groovy/bugs/ToStringBug.groovy            |    2 +
 src/test/groovy/bugs/TryCatch2Bug.groovy           |    2 +
 src/test/groovy/bugs/TryCatchBug.groovy            |    2 +
 src/test/groovy/bugs/UnknownVariableBug.groovy     |    2 +
 src/test/groovy/bugs/UseClosureInClosureBug.groovy |    2 +
 src/test/groovy/bugs/UseStaticInClosureBug.groovy  |    2 +
 src/test/groovy/bugs/VariablePrecedence.groovy     |    2 +
 src/test/groovy/bugs/VariablePrecedenceTest.groovy |    2 +
 src/test/groovy/bugs/VerifyErrorBug.groovy         |    2 +
 src/test/groovy/bugs/WriteOnlyPropertyBug.groovy   |    2 +
 src/test/groovy/bugs/ZoharsBug.groovy              |    2 +
 .../bugs/groovy5912/otherpkg/Groovy5912Bug.groovy  |    2 +
 .../groovy/bugs/groovy6938/Groovy6938Bug.groovy    |    2 +
 .../groovy/bugs/groovy8531/Groovy8531Bug.groovy    |    2 +
 src/test/groovy/bugs/groovy8757/UsageTest.groovy   |    2 +
 .../SyntheticParameterAnnotationsBug.groovy        |    2 +
 .../groovy/bugs/groovy9236/Groovy9236Bug.groovy    |    1 +
 src/test/groovy/execute/ExecuteTest.groovy         |    2 +
 .../groovy/execute/ExecuteTest_LinuxSolaris.groovy |    1 +
 src/test/groovy/execute/ExecuteTest_Windows.groovy |    1 +
 src/test/groovy/gpath/GPathTest.groovy             |    2 +
 src/test/groovy/gpath/NodeGPathTest.groovy         |    2 +
 .../groovy/grape/GrabErrorIsolationTest.groovy     |    2 +
 src/test/groovy/grape/GrabExcludeTest.groovy       |    1 +
 src/test/groovy/grape/GrabResolverTest.groovy      |    1 +
 src/test/groovy/grape/GrapeClassLoaderTest.groovy  |    3 +
 src/test/groovy/io/LineColumnReaderTest.groovy     |    2 +
 .../groovy/lang/BenchmarkInterceptorTest.groovy    |    2 +
 src/test/groovy/lang/CategoryAnnotationTest.groovy |    2 +
 src/test/groovy/lang/ClassReloadingTest.groovy     |    1 +
 src/test/groovy/lang/ClosureResolvingTest.groovy   |    2 +
 .../groovy/lang/DelegatingMetaClassTest.groovy     |    2 +
 src/test/groovy/lang/EmptyRangeTest.java           |    2 +-
 src/test/groovy/lang/ExceptionTest.groovy          |    2 +
 .../lang/ExpandoMetaClassConstructorTest.groovy    |    2 +
 .../lang/ExpandoMetaClassCreationHandleTest.groovy |    4 +-
 src/test/groovy/lang/ExpandoMetaClassTest.groovy   |    2 +
 src/test/groovy/lang/GStringTest.java              |    2 +-
 src/test/groovy/lang/GetMethodsTest.groovy         |    2 +
 src/test/groovy/lang/GroovyClassLoaderTest.groovy  |    3 +-
 src/test/groovy/lang/GroovyCodeSourceTest.groovy   |    2 +
 src/test/groovy/lang/GroovyShellTest.java          |    2 +-
 src/test/groovy/lang/GroovyShellTest2.groovy       |    2 +
 src/test/groovy/lang/GroovySystemTest.groovy       |    2 +
 .../groovy/lang/InnerClassResolvingTest.groovy     |    2 +
 src/test/groovy/lang/IntRangeTest.groovy           |    4 +-
 src/test/groovy/lang/InterceptorTest.groovy        |    1 +
 src/test/groovy/lang/MapOfClosureTest.groovy       |    2 +
 src/test/groovy/lang/MetaClassPropertyTest.groovy  |    2 +
 src/test/groovy/lang/MetaClassRegistryTest.groovy  |    2 +
 src/test/groovy/lang/MetaClassTest.java            |    2 +-
 src/test/groovy/lang/MethodMissingTest.groovy      |    2 +
 src/test/groovy/lang/MixinAnnotationTest.groovy    |    5 +-
 src/test/groovy/lang/MixinTest.groovy              |    2 +
 src/test/groovy/lang/PropertyMissingTest.groovy    |    2 +
 .../groovy/lang/ReferenceSerializationTest.groovy  |    2 +
 src/test/groovy/lang/RespondsToTest.groovy         |    2 +
 src/test/groovy/lang/ScriptCacheTest.groovy        |    2 +
 .../lang/ScriptSourcePositionInAstTest.groovy      |    1 +
 src/test/groovy/lang/SequenceTest.java             |    2 +-
 src/test/groovy/lang/SpreadMapTest.java            |    2 +-
 src/test/groovy/lang/StringConcatTest.groovy       |    2 +
 src/test/groovy/lang/StripMarginTest.groovy        |    2 +
 src/test/groovy/lang/SyntheticReturnTest.groovy    |    2 +
 src/test/groovy/lang/TapMethodTest.groovy          |    2 +
 src/test/groovy/lang/TupleTest.java                |    2 +-
 src/test/groovy/lang/WithMethodTest.groovy         |    2 +
 .../groovy/mock/example/SandwichMakerTest.groovy   |    1 +
 .../groovy/mock/interceptor/HalfMockTest.groovy    |    2 +
 .../mock/interceptor/MockCallSequenceTest.groovy   |    1 +
 .../groovy/mock/interceptor/MockForJavaTest.groovy |    2 +
 .../mock/interceptor/MockNestedCallTest.groovy     |    2 +
 .../mock/interceptor/MockSingleCallTest.groovy     |    1 +
 .../mock/interceptor/MockWithZeroRangeTest.groovy  |    1 +
 .../mock/interceptor/StubCallSequenceTest.groovy   |    1 +
 .../groovy/mock/interceptor/StubForJavaTest.groovy |    2 +
 .../mock/interceptor/StubSingleCallTest.groovy     |    2 +
 src/test/groovy/mock/interceptor/StubTest.groovy   |    2 +
 .../groovy/operator/BigDecimalOperatorsTest.groovy |    2 +
 .../operator/BigIntegerOperationsTest.groovy       |    2 +
 .../groovy/operator/BitwiseOperatorsTest.groovy    |    2 +
 .../groovy/operator/BooleanOperationsTest.groovy   |    2 +
 .../groovy/operator/DoubleOperationTest.groovy     |    2 +
 .../groovy/operator/IntegerOperatorsTest.groovy    |    2 +
 .../operator/MyColorOperatorOverloadingTest.groovy |    2 +
 src/test/groovy/operator/NegateListsTest.groovy    |    2 +
 src/test/groovy/operator/PowerOperatorsTest.groovy |    2 +
 .../groovy/operator/SpreadListOperatorTest.groovy  |    2 +
 .../groovy/operator/SpreadMapOperatorTest.groovy   |    2 +
 .../groovy/operator/StringOperatorsTest.groovy     |    2 +
 .../groovy/operator/TernaryOperatorsTest.groovy    |    2 +
 .../groovy/operator/UnaryMinusNumberTests.groovy   |    2 +
 .../groovy/operator/UnaryMinusOperatorTest.groovy  |    2 +
 .../script/StreamClassloaderInScriptTest.groovy    |    2 +
 src/test/groovy/security/SecurityTestSupport.java  |    2 +-
 src/test/groovy/time/DurationTest.groovy           |    2 +
 src/test/groovy/time/TimeCategoryTest.groovy       |    2 +
 .../transform/AnnotationCollectorLegacyTest.groovy |    1 +
 .../transform/AnnotationCollectorTest.groovy       |    1 +
 .../transform/ConditionalInterruptTest.groovy      |    2 +
 src/test/groovy/transform/LazyTest.groovy          |    2 +
 src/test/groovy/transform/ReadWriteLockTest.groovy |    2 +
 .../groovy/transform/TimedInterruptTest.groovy     |    1 +
 .../stc/ArraysAndCollectionsSTCTest.groovy         |    4 +-
 .../groovy/transform/stc/GenericsSTCTest.groovy    |    2 +-
 src/test/groovy/transform/stc/Groovy7888Bug.groovy |    2 +
 src/test/groovy/transform/stc/LambdaTest.groovy    |    2 +
 .../transform/stc/MethodReferenceTest.groovy       |    2 +
 .../stc/StaticTypeCheckingTestCase.groovy          |    1 +
 .../transform/stc/WithSTCStandaloneTest.groovy     |    2 +
 src/test/groovy/tree/ClosureClassLoaderBug.groovy  |    2 +
 src/test/groovy/tree/NavigationNodeTest.groovy     |    4 +-
 src/test/groovy/tree/NestedClosureBugTest.groovy   |    2 +
 src/test/groovy/tree/SmallTreeTest.groovy          |    2 +
 src/test/groovy/tree/TreeTest.groovy               |    2 +
 src/test/groovy/tree/VerboseTreeTest.groovy        |    2 +
 src/test/groovy/txn/TransactionTest.groovy         |    2 +
 src/test/groovy/ui/GroovyMainTest.groovy           |    2 +
 src/test/groovy/util/BufferedIteratorTest.groovy   |    1 +
 src/test/groovy/util/BuilderSupportTest.groovy     |    2 +
 src/test/groovy/util/ConfigObjectTest.groovy       |    2 +
 src/test/groovy/util/ConfigSlurperTest.groovy      |    3 +
 src/test/groovy/util/DelegatingScriptTest.groovy   |    1 +
 .../groovy/util/FactoryBuilderSupportTest.groovy   |    2 +
 src/test/groovy/util/FileTreeBuilderTest.groovy    |    2 +
 .../util/GroovyCollectionsStarImportTest.groovy    |    2 +
 src/test/groovy/util/GroovyCollectionsTest.groovy  |    2 +
 .../util/GroovyScriptEngineReloadingTest.groovy    |    2 +
 src/test/groovy/util/GroovyScriptEngineTest.groovy |    1 +
 src/test/groovy/util/IndentPrinterTest.groovy      |    2 +
 src/test/groovy/util/NodeTest.groovy               |    1 +
 src/test/groovy/util/ObjectGraphBuilderTest.groovy |    2 +
 src/test/groovy/util/ObservableListTest.groovy     |    2 +
 src/test/groovy/util/ObservableMapTest.groovy      |    2 +
 src/test/groovy/util/ObservableSetTests.groovy     |    2 +
 src/test/groovy/util/OrderByTest.groovy            |    1 +
 .../groovy/util/ProxyGeneratorAdapterTest.groovy   |    1 +
 src/test/groovy/util/ProxyGeneratorTest.groovy     |    2 +
 src/test/groovy/util/ProxyTest.groovy              |    2 +
 src/test/groovy/util/ResourceBundleTest.groovy     |    4 +-
 src/test/groovy/util/logging/CommonsTest.groovy    |    2 +
 src/test/groovy/util/logging/Log4j2Test.groovy     |    2 +
 src/test/groovy/util/logging/Log4jTest.groovy      |    2 +
 src/test/groovy/util/logging/LogTest.groovy        |    2 +
 src/test/groovy/util/logging/Slf4jTest.groovy      |    1 +
 .../groovy/plugin/GroovyRunnerRegistryTest.groovy  |    2 +
 .../ClosureAndInnerClassNodeStructureTest.groovy   |    1 +
 .../groovy/antlr/AntlrParserPluginTest.groovy      |    1 +
 .../codehaus/groovy/antlr/GStringEndTest.groovy    |    1 +
 .../codehaus/groovy/antlr/GroovySourceASTTest.java |    2 +-
 .../codehaus/groovy/antlr/SourceBufferTest.java    |    2 +-
 .../codehaus/groovy/antlr/SourceParserTest.java    |    2 +-
 .../groovy/antlr/treewalker/Java2GroovyTest.java   |    2 +-
 .../groovy/antlr/treewalker/SourcePrinterTest.java |    2 +-
 .../antlr/treewalker/UnimplementedSyntaxTest.java  |    2 +-
 .../groovy/ast/CodeVisitorSupportTest.groovy       |    1 +
 .../codehaus/groovy/ast/GenericsTestCase.groovy    |    1 +
 .../org/codehaus/groovy/ast/Groovy7826Bug.java     |    2 +-
 .../groovy/ast/LazyInitOnClassNodeTest.groovy      |    1 +
 .../ast/builder/AstBuilderFromCodeTest.groovy      |    1 +
 .../builder/AstBuilderFromSpecificationTest.groovy |    1 +
 .../ast/builder/AstBuilderFromStringTest.groovy    |    1 +
 .../AstBuilderFromCodePackageImportTest.groovy     |    1 +
 .../groovy/ast/expr/ClosureExpressionTest.groovy   |    1 +
 .../groovy/ast/expr/MapExpressionTest.groovy       |    1 +
 .../ast/expr/MethodCallExpressionTest.groovy       |    2 +
 .../groovy/ast/expr/PropertyExpressionTest.groovy  |    2 +
 .../groovy/ast/source/SourceBaseTestCase.groovy    |    1 +
 .../groovy/ast/stmt/ExpressionStatementTest.groovy |    1 +
 .../groovy/ast/stmt/ThrowStatementTest.groovy      |    1 +
 .../groovy/ast/tools/GenericsUtilsTest.groovy      |    1 +
 .../groovy/classgen/BytecodeHelperTest.groovy      |    1 +
 .../classgen/CallClosureFieldAsMethodTest.groovy   |    2 +
 .../codehaus/groovy/classgen/CallSiteTest.groovy   |    2 +
 .../codehaus/groovy/classgen/CapitalizeTest.java   |    2 +-
 .../org/codehaus/groovy/classgen/CastTest.groovy   |    2 +
 .../groovy/classgen/CastToStringTest.groovy        |    2 +
 .../classgen/FinalVariableAnalyzerTest.groovy      |    1 +
 .../groovy/classgen/GenericsGenTest.groovy         |    1 +
 .../codehaus/groovy/classgen/InterfaceTest.groovy  |    1 +
 .../codehaus/groovy/classgen/MetaClassTest.groovy  |    2 +
 .../groovy/classgen/ReflectorLoaderTest.groovy     |    2 +
 .../classgen/asm/AbstractBytecodeTestCase.groovy   |    1 +
 .../asm/InstructionSequenceHelperClassTest.groovy  |    2 +
 .../classgen/asm/sc/BugsStaticCompileTest.groovy   |    2 +-
 .../classgen/asm/sc/bugs/Groovy6670Bug.groovy      |    2 +
 .../{Groovy7276Bug.groovy => Groovy7276.groovy}    |    2 +-
 .../classgen/asm/sc/bugs/Groovy7870Bug.groovy      |   12 +-
 .../classgen/asm/sc/bugs/Groovy7883Bug.groovy      |    2 +
 .../groovy/control/CompilerConfigurationTest.java  |    2 +-
 .../ASTTransformationCustomizerTest.groovy         |    1 +
 .../customizers/ImportCustomizerTest.groovy        |    1 +
 .../customizers/SecureASTCustomizerTest.groovy     |    1 +
 .../CompilerCustomizationBuilderTest.groovy        |    1 +
 .../groovy/control/io/FileReaderTest.groovy        |    1 +
 .../groovy/control/io/NullWriterTest.groovy        |    2 +
 .../control/io/StringReaderSourceTest.groovy       |    1 +
 .../groovy/reflection/CachedMethodTest.groovy      |    2 +
 .../reflection/GroovyClassValueFactoryTest.groovy  |    2 +
 .../codehaus/groovy/reflection/SecurityTest.java   |    2 +-
 .../reflection/utils/ReflectionUtilsTest.groovy    |    1 +
 .../groovy/runtime/AppendableDgmMethodsTest.groovy |    2 +
 .../groovy/runtime/CategoryForIteratorTest.groovy  |    2 +
 .../runtime/CustomBooleanCoercionTest.groovy       |    2 +
 .../runtime/DefaultGroovyMethodsSupportTest.groovy |    2 +
 .../groovy/runtime/DefaultGroovyMethodsTest.groovy |    3 +
 .../runtime/DefaultGroovyStaticMethodsTest.groovy  |    3 +
 .../groovy/runtime/DirectoryDeleteTest.groovy      |    4 +-
 .../codehaus/groovy/runtime/EachLineTest.groovy    |    4 +-
 .../EachWithReaderAndInputStreamTest.groovy        |    2 +
 .../codehaus/groovy/runtime/FileAppendTest.groovy  |    2 +
 .../groovy/runtime/FileLeftShiftTest.groovy        |    2 +
 .../runtime/FileStaticGroovyMethodsTest.groovy     |    2 +
 .../groovy/runtime/GroovyCategoryTest.groovy       |    2 +
 .../groovy/runtime/IOGroovyMethodsTest.groovy      |    1 +
 .../groovy/runtime/InterfaceConversionTest.groovy  |    2 +
 .../groovy/runtime/InvokeConstructorTest.java      |    2 +-
 .../groovy/runtime/InvokeGroovyMethodTest.java     |    2 +-
 .../codehaus/groovy/runtime/InvokeMethodTest.java  |    2 +-
 .../runtime/InvokerHelperFormattingTest.groovy     |    2 +
 .../org/codehaus/groovy/runtime/InvokerTest.java   |    2 +-
 .../groovy/runtime/JdkDynamicProxyTest.java        |    2 +-
 .../codehaus/groovy/runtime/MethodFailureTest.java |    2 +-
 .../org/codehaus/groovy/runtime/MinusTest.groovy   |    2 +
 .../groovy/runtime/NestedCategoryTest.groovy       |    2 +
 .../codehaus/groovy/runtime/NullObjectTest.groovy  |    2 +
 .../groovy/runtime/PerInstanceMetaClassTest.groovy |    2 +
 .../org/codehaus/groovy/runtime/PropertyTest.java  |    2 +-
 .../groovy/runtime/StringAsClassTest.groovy        |    2 +
 .../groovy/runtime/StringGroovyMethodsTest.java    |    2 +-
 .../org/codehaus/groovy/runtime/TupleListTest.java |    2 +-
 .../codehaus/groovy/runtime/URLGetBytesTest.groovy |    2 +
 .../codehaus/groovy/runtime/URLGetTextTest.groovy  |    2 +
 .../runtime/WithResourceStreamClosedTest.groovy    |    4 +-
 .../groovy/runtime/WriterAppendTest.groovy         |    2 +
 .../m12n/ExtensionModuleHelperForTests.groovy      |    3 +-
 .../groovy/runtime/m12n/ExtensionModuleTest.groovy |    2 +
 .../runtime/memoize/AbstractMemoizeTestCase.groovy |    2 +
 .../CacheCleanupCollectedSoftReferencesTest.groovy |    1 +
 .../groovy/runtime/memoize/CacheCleanupTest.groovy |    2 +
 .../memoize/LRUProtectionStorageTest.groovy        |    2 +
 .../StaticMethodOverloadCompileStaticTest.groovy   |    1 +
 .../vm8/StaticMethodOverloadTest.groovy            |    2 +
 .../powerassert/AssertionRenderingTest.groovy      |    2 +
 .../AssertionsInDifferentLocationsTest.groovy      |    2 +
 .../runtime/powerassert/EvaluationTest.groovy      |    2 +
 .../ImplicitClosureCallRenderingTest.groovy        |    2 +
 .../NotTransformedAssertionsTest.groovy            |    2 +
 .../PowerAssertASTTransformationTest.groovy        |    2 +
 .../runtime/powerassert/ValueRenderingTest.groovy  |    2 +
 .../runtime/trampoline/TrampolineTest.groovy       |    2 +
 .../DefaultTypeTransformationTest.groovy           |    2 +
 .../runtime/typehandling/EqualityTest.groovy       |    2 +
 .../runtime/typehandling/NumberMathTest.groovy     |    2 +
 .../typehandling/ShortTypeHandlingTest.groovy      |    2 +
 src/test/org/codehaus/groovy/syntax/TokenTest.java |    2 +-
 .../groovy/syntax/parser/TestParserSupport.java    |    2 +-
 .../org/codehaus/groovy/tools/CompilerTest.java    |    2 +-
 .../groovy/tools/FileSystemCompilerTest.java       |    2 +-
 .../groovy/tools/LoaderConfigurationTest.groovy    |    2 +
 .../codehaus/groovy/tools/StringHelperTest.groovy  |    2 +
 .../org/codehaus/groovy/tools/UtilitiesTest.groovy |    2 +
 .../tools/ast/TransformTestHelperTest.groovy       |    1 +
 .../codehaus/groovy/tools/gse/DependencyTest.java  |    2 +-
 .../rootloadersync/SubclassingInGroovyTest.groovy  |    2 +
 .../groovy/tools/stubgenerator/StubTestCase.groovy |    1 +
 .../groovy/transform/AutoCloneTransformTest.groovy |    2 +
 .../transform/AutoImplementTransformTest.groovy    |    2 +
 .../CanonicalComponentsTransformTest.groovy        |    1 +
 .../groovy/transform/CanonicalTransformTest.groovy |    2 +
 .../EqualsAndHashCodeTransformTest.groovy          |    2 +
 .../ExternalizeMethodsTransformTest.groovy         |    2 +
 .../ExternalizeVerifierTransformTest.groovy        |    2 +
 .../transform/GeneratedAnnotationTest.groovy       |    1 +
 .../groovy/transform/GlobalTransformTest.groovy    |    2 +
 .../groovy/transform/ImmutableTransformTest.groovy |    1 +
 .../transform/IndexedPropertyTransformTest.groovy  |    2 +
 .../InheritConstructorsTransformTest.groovy        |    2 +
 .../groovy/transform/LazyTransformTest.groovy      |    2 +
 .../groovy/transform/LocalASTTransformTest.groovy  |    1 +
 .../transform/MapConstructorTransformTest.groovy   |    2 +
 .../transform/MemoizedASTTransformationTest.groovy |    1 +
 .../transform/NamedVariantTransformTest.groovy     |    2 +
 .../groovy/transform/NewifyTransformTest.groovy    |    2 +
 .../transform/ReadWriteLockTransformTest.groovy    |    2 +
 .../groovy/transform/SingletonTransformTest.groovy |    1 +
 .../transform/SynchronizedTransformTest.groovy     |    1 +
 .../groovy/transform/ToStringTransformTest.groovy  |    2 +
 .../transform/TupleConstructorTransformTest.groovy |    2 +
 .../TransformsAndCustomClassLoadersTest.groovy     |    1 +
 .../packageScope/DifferentPackageTest.groovy       |    2 +-
 .../groovy/transform/stc/SignatureCodecTest.groovy |    2 +
 .../TailRecursiveCompilationFailuresTest.groovy    |    1 +
 .../TailRecursiveTogetherWithOtherASTsTest.groovy  |    2 +
 .../tailrec/TailRecursiveTransformationTest.groovy |    2 +
 .../groovy/transform/traitx/Groovy6697Bug.groovy   |    2 +
 .../groovy/transform/traitx/Groovy6736Bug.groovy   |    2 +
 .../groovy/transform/traitx/Groovy6741Bug.groovy   |    2 +
 .../groovy/transform/traitx/Groovy7011Bug.groovy   |    2 +
 .../groovy/transform/traitx/Groovy7190Bug.groovy   |    2 +
 .../groovy/transform/traitx/Groovy7196Bug.groovy   |    2 +
 .../groovy/transform/traitx/Groovy7206Bug.groovy   |    2 +
 .../groovy/transform/traitx/Groovy7213Bug.groovy   |    2 +
 .../groovy/transform/traitx/Groovy7214Bug.groovy   |    2 +
 .../groovy/transform/traitx/Groovy7217Bug.groovy   |    2 +
 .../groovy/transform/traitx/Groovy7255Bug.groovy   |    2 +
 .../groovy/transform/traitx/Groovy7269Bug.groovy   |    2 +
 .../groovy/transform/traitx/Groovy7275Bug.groovy   |    2 +
 .../groovy/transform/traitx/Groovy7285Bug.groovy   |    2 +
 .../groovy/transform/traitx/Groovy7456Bug.groovy   |    2 +
 .../groovy/transform/traitx/Groovy7846Bug.groovy   |    1 +
 .../codehaus/groovy/util/ListHashMapTest.groovy    |    2 +
 .../util/ManagedConcurrentLinkedQueueTest.groovy   |    2 +
 .../groovy/util/ManagedConcurrentMapTest.groovy    |    2 +
 .../util/ManagedConcurrentValueMapTest.groovy      |    2 +
 .../groovy/util/ManagedLinkedlistTest.groovy       |    4 +-
 .../groovy/util/ReferenceManagerTest.groovy        |    2 +
 .../v8/InterfaceStaticMethodCallTest.groovy        |    2 +
 .../main/groovy/groovy/util/FileNameFinder.groovy  |   49 -
 .../src/main/java/groovy/util/AntBuilder.java      |  514 -----
 .../src/main/groovy/groovy/util/CliBuilder.groovy  |   82 -
 .../main/groovy/groovy/util/OptionAccessor.groovy  |   38 -
 .../spec/test/groovy/util/CliBuilderTest.groovy    |   28 -
 .../main/groovy/groovy/console/ui/Console.groovy   |    6 +-
 .../src/main/groovy/groovy/inspect/TextNode.groovy |   55 -
 .../groovy/groovy/inspect/TextTreeNodeMaker.groovy |   37 -
 .../groovy/inspect/swingui/AstBrowser.groovy       |  690 -------
 .../inspect/swingui/AstNodeToScriptAdapter.groovy  | 1185 ------------
 .../inspect/swingui/ButtonOrDefaultRenderer.groovy |   42 -
 .../inspect/swingui/ButtonOrTextEditor.groovy      |   61 -
 .../groovy/inspect/swingui/ObjectBrowser.groovy    |  168 --
 .../inspect/swingui/ScriptToTreeNodeAdapter.groovy |  823 --------
 .../groovy/groovy/inspect/swingui/package.html     |   28 -
 .../src/main/groovy/groovy/ui/Console.groovy       | 1718 -----------------
 .../main/groovy/groovy/ui/ConsoleActions.groovy    |  428 -----
 .../src/main/groovy/groovy/ui/ConsoleApplet.groovy |   42 -
 .../main/groovy/groovy/ui/ConsoleIvyPlugin.groovy  |   65 -
 .../groovy/groovy/ui/ConsolePreferences.groovy     |  168 --
 .../src/main/groovy/groovy/ui/ConsoleSupport.java  |   91 -
 .../main/groovy/groovy/ui/ConsoleTextEditor.java   |  356 ----
 .../src/main/groovy/groovy/ui/ConsoleView.groovy   |  181 --
 .../src/main/groovy/groovy/ui/HistoryRecord.groovy |   48 -
 .../main/groovy/groovy/ui/OutputTransforms.groovy  |  110 --
 .../groovy/groovy/ui/SystemOutputInterceptor.java  |  135 --
 .../src/main/groovy/groovy/ui/package.html         |   28 -
 .../groovy/groovy/ui/text/AutoIndentAction.groovy  |   55 -
 .../groovy/groovy/ui/text/FindReplaceUtility.java  |  544 ------
 .../main/groovy/groovy/ui/text/GroovyFilter.java   |  271 ---
 .../groovy/groovy/ui/text/MatchingHighlighter.java |  222 ---
 .../groovy/groovy/ui/text/SmartDocumentFilter.java |  361 ----
 .../ui/text/StructuredSyntaxDocumentFilter.java    |  574 ------
 .../groovy/ui/text/StructuredSyntaxHandler.java    |  107 --
 .../groovy/ui/text/StructuredSyntaxResources.java  |   81 -
 .../src/main/groovy/groovy/ui/text/TextEditor.java |  500 -----
 .../groovy/groovy/ui/text/TextUndoManager.java     |  201 --
 .../src/main/groovy/groovy/ui/text/package.html    |   28 -
 .../groovy/groovy/ui/view/BasicContentPane.groovy  |  158 --
 .../main/groovy/groovy/ui/view/BasicMenuBar.groovy |  102 -
 .../groovy/groovy/ui/view/BasicStatusBar.groovy    |   34 -
 .../main/groovy/groovy/ui/view/BasicToolBar.groovy |   46 -
 .../src/main/groovy/groovy/ui/view/Defaults.groovy |   88 -
 .../main/groovy/groovy/ui/view/GTKDefaults.groovy  |   58 -
 .../groovy/groovy/ui/view/MacOSXDefaults.groovy    |   88 -
 .../groovy/groovy/ui/view/MacOSXMenuBar.groovy     |  149 --
 .../groovy/groovy/ui/view/WindowsDefaults.groovy   |   35 -
 .../inspect/swingui/AstBrowserProperties.groovy    |   67 -
 .../main/resources/groovy/ui/Console.properties    |   47 -
 .../src/main/resources/groovy/ui/ConsoleIcon.png   |  Bin 3739 -> 0 bytes
 .../groovy/ui/InteractiveShell.properties          |   66 -
 .../main/resources/groovy/ui/icons/arrow_redo.png  |  Bin 625 -> 0 bytes
 .../main/resources/groovy/ui/icons/arrow_undo.png  |  Bin 631 -> 0 bytes
 .../main/resources/groovy/ui/icons/book_next.png   |  Bin 702 -> 0 bytes
 .../resources/groovy/ui/icons/book_previous.png    |  Bin 680 -> 0 bytes
 .../resources/groovy/ui/icons/bullet_green.png     |  Bin 295 -> 0 bytes
 .../src/main/resources/groovy/ui/icons/clear.png   |  Bin 524 -> 0 bytes
 .../src/main/resources/groovy/ui/icons/credits.txt |   24 -
 .../src/main/resources/groovy/ui/icons/cross.png   |  Bin 655 -> 0 bytes
 .../src/main/resources/groovy/ui/icons/cut.png     |  Bin 648 -> 0 bytes
 .../src/main/resources/groovy/ui/icons/cut_red.png |  Bin 650 -> 0 bytes
 .../src/main/resources/groovy/ui/icons/disk.png    |  Bin 620 -> 0 bytes
 .../src/main/resources/groovy/ui/icons/find.png    |  Bin 659 -> 0 bytes
 .../main/resources/groovy/ui/icons/folder_page.png |  Bin 688 -> 0 bytes
 .../src/main/resources/groovy/ui/icons/page.png    |  Bin 635 -> 0 bytes
 .../main/resources/groovy/ui/icons/page_copy.png   |  Bin 663 -> 0 bytes
 .../main/resources/groovy/ui/icons/page_paste.png  |  Bin 703 -> 0 bytes
 .../main/resources/groovy/ui/icons/script_go.png   |  Bin 839 -> 0 bytes
 .../resources/groovy/ui/icons/text_replace.png     |  Bin 691 -> 0 bytes
 .../ui/HistoryRecordGetTextToRunTests.groovy       |    1 -
 .../groovy/tools/groovydoc/GroovyDocToolTest.java  |    4 +-
 .../groovy/groovysh/commands/InspectCommand.groovy |    2 +-
 .../groovysh/util/XmlCommandRegistrar.groovy       |    2 +-
 .../groovy/tools/shell/AnsiDetector.groovy         |   34 -
 .../groovy/tools/shell/BufferManager.groovy        |  115 --
 .../org/codehaus/groovy/tools/shell/Command.groovy |   48 -
 .../groovy/tools/shell/CommandAlias.groovy         |   87 -
 .../groovy/tools/shell/CommandException.groovy     |   47 -
 .../groovy/tools/shell/CommandRegistry.groovy      |  109 --
 .../groovy/tools/shell/CommandSupport.groovy       |  227 ---
 .../tools/shell/ComplexCommandSupport.groovy       |  101 -
 .../groovy/tools/shell/ExitNotification.groovy     |   34 -
 .../codehaus/groovy/tools/shell/Groovysh.groovy    |  672 -------
 .../tools/shell/InteractiveShellRunner.groovy      |  217 ---
 .../codehaus/groovy/tools/shell/Interpreter.groovy |  112 --
 .../org/codehaus/groovy/tools/shell/Main.groovy    |  260 ---
 .../org/codehaus/groovy/tools/shell/Parser.groovy  |  285 ---
 .../org/codehaus/groovy/tools/shell/Shell.groovy   |  128 --
 .../codehaus/groovy/tools/shell/ShellRunner.groovy |  102 -
 .../tools/shell/commands/AliasCommand.groovy       |  133 --
 .../tools/shell/commands/ClearCommand.groovy       |   47 -
 .../tools/shell/commands/DisplayCommand.groovy     |   48 -
 .../groovy/tools/shell/commands/DocCommand.groovy  |  191 --
 .../groovy/tools/shell/commands/EditCommand.groovy |  104 -
 .../groovy/tools/shell/commands/ExitCommand.groovy |   54 -
 .../groovy/tools/shell/commands/GrabCommand.groovy |   69 -
 .../groovy/tools/shell/commands/HelpCommand.groovy |  131 --
 .../tools/shell/commands/HistoryCommand.groovy     |  154 --
 .../tools/shell/commands/ImportCommand.groovy      |  264 ---
 .../tools/shell/commands/InspectCommand.groovy     |  130 --
 .../groovy/tools/shell/commands/LoadCommand.groovy |   88 -
 .../tools/shell/commands/PurgeCommand.groovy       |   85 -
 .../tools/shell/commands/RecordCommand.groovy      |  139 --
 .../tools/shell/commands/RegisterCommand.groovy    |   80 -
 .../groovy/tools/shell/commands/SaveCommand.groovy |   79 -
 .../groovy/tools/shell/commands/SetCommand.groovy  |  108 --
 .../tools/shell/commands/ShadowCommand.groovy      |   57 -
 .../groovy/tools/shell/commands/ShowCommand.groovy |  105 -
 .../completion/BackslashEscapeCompleter.groovy     |   44 -
 .../shell/completion/CommandNameCompleter.groovy   |   53 -
 .../completion/CustomClassSyntaxCompletor.groovy   |   52 -
 .../shell/completion/FileNameCompleter.groovy      |  172 --
 .../shell/completion/GroovySyntaxCompletor.groovy  |  375 ----
 .../shell/completion/IdentifierCompletor.groovy    |   39 -
 .../shell/completion/ImportsSyntaxCompletor.groovy |  127 --
 .../completion/InfixKeywordSyntaxCompletor.groovy  |   49 -
 .../shell/completion/KeywordSyntaxCompletor.groovy |  127 --
 .../completion/NavigablePropertiesCompleter.groovy |   97 -
 .../ReflectionCompletionCandidate.groovy           |   79 -
 .../shell/completion/ReflectionCompletor.groovy    |  721 -------
 .../completion/StricterArgumentCompleter.groovy    |  133 --
 .../completion/VariableSyntaxCompletor.groovy      |   63 -
 .../org/codehaus/groovy/tools/shell/package.html   |   28 -
 .../tools/shell/util/CommandArgumentParser.groovy  |  123 --
 .../shell/util/CurlyCountingGroovyLexer.groovy     |   69 -
 .../shell/util/DefaultCommandsRegistrar.groovy     |   89 -
 .../tools/shell/util/NoExitSecurityManager.groovy  |   64 -
 .../groovy/tools/shell/util/PackageHelper.groovy   |   30 -
 .../tools/shell/util/PackageHelperImpl.groovy      |  487 -----
 .../tools/shell/util/ScriptVariableAnalyzer.groovy |  123 --
 .../groovy/tools/shell/util/SimpleCompletor.groovy |  141 --
 .../tools/shell/util/WrappedInputStream.groovy     |  110 --
 .../tools/shell/util/XmlCommandRegistrar.groovy    |   95 -
 .../codehaus/groovy/tools/shell/util/package.html  |   30 -
 .../src/main/java/groovy/util/GroovyMBean.java     |  394 ----
 subprojects/groovy-nio/build.gradle                |    8 +-
 .../codehaus/groovy/runtime/NioGroovyMethods.java  | 2023 --------------------
 .../org/codehaus/groovy/runtime/WritablePath.java  |  216 ---
 .../src/test/groovy/groovy/sql/SqlSTCTest.groovy   |    1 +
 .../swing/binding/AbstractButtonProperties.java    |   10 +-
 .../swing/binding/AbstractSyntheticBinding.java    |    8 +-
 .../groovy/swing/binding/JComboBoxProperties.java  |   10 +-
 .../groovy/swing/binding/JComponentProperties.java |   10 +-
 .../groovy/swing/binding/JListProperties.groovy    |   10 +-
 .../groovy/swing/binding/JScrollBarProperties.java |   10 +-
 .../groovy/swing/binding/JSliderProperties.java    |   10 +-
 .../groovy/swing/binding/JSpinnerProperties.java   |   10 +-
 .../groovy/swing/binding/JTableProperties.java     |   11 +-
 .../swing/binding/JTextComponentProperties.java    |   11 +-
 .../groovy/groovy/swing/factory/BindFactory.groovy |   22 +-
 .../groovy/swing/factory/BindGroupFactory.groovy   |    2 +-
 .../groovy/swing/factory/BindProxyFactory.groovy   |    2 +-
 .../apache/groovy/swing/binding/BindingProxy.java  |    2 +-
 .../groovy/binding/AbstractFullBinding.java        |  114 --
 .../codehaus/groovy/binding/AggregateBinding.java  |   83 -
 .../java/org/codehaus/groovy/binding/BindPath.java |  238 ---
 .../org/codehaus/groovy/binding/BindingProxy.java  |  160 --
 .../codehaus/groovy/binding/BindingUpdatable.java  |   58 -
 .../groovy/binding/ClosureSourceBinding.java       |   62 -
 .../groovy/binding/ClosureTriggerBinding.java      |  171 --
 .../groovy/binding/EventTriggerBinding.java        |   88 -
 .../org/codehaus/groovy/binding/FullBinding.java   |   48 -
 .../groovy/binding/MutualPropertyBinding.java      |  199 --
 .../codehaus/groovy/binding/PropertyBinding.java   |  368 ----
 .../binding/PropertyChangeProxyTargetBinding.java  |   42 -
 .../groovy/binding/PropertyPathFullBinding.java    |   79 -
 .../org/codehaus/groovy/binding/SourceBinding.java |   29 -
 .../groovy/binding/SwingTimerTriggerBinding.java   |  183 --
 .../org/codehaus/groovy/binding/TargetBinding.java |   28 -
 .../codehaus/groovy/binding/TriggerBinding.java    |   29 -
 .../java/org/codehaus/groovy/binding/package.html  |   28 -
 .../groovy/runtime/SwingGroovyMethods.java         | 1134 -----------
 subprojects/groovy-templates/build.gradle          |    6 +
 .../groovy/text/MarkupTemplateEngineTest.groovy    |    2 +-
 .../groovy/groovy/lang/GroovyLogTestCase.groovy    |   86 -
 .../groovy/groovy/util/GroovyShellTestCase.groovy  |   83 -
 .../groovy/util/JavadocAssertionTestBuilder.groovy |  144 --
 .../groovy/util/JavadocAssertionTestSuite.groovy   |  123 --
 .../main/groovy/groovy/util/StringTestUtil.groovy  |   33 -
 .../src/main/java/groovy/test/AllTestSuite.java    |    2 +-
 .../src/main/java/groovy/test/GroovyTestSuite.java |    2 +-
 .../java/groovy/transform/NotYetImplemented.java   |   47 -
 .../src/main/java/groovy/util/AllTestSuite.java    |  147 --
 .../src/main/java/groovy/util/GroovyAssert.java    |  146 --
 .../src/main/java/groovy/util/GroovyTestCase.java  |  281 ---
 .../src/main/java/groovy/util/GroovyTestSuite.java |   99 -
 .../codehaus/groovy/runtime/ScriptTestAdapter.java |   58 -
 .../groovy/groovy/test/AllTestSuiteTest.groovy     |    2 +-
 .../groovy/test/GroovyLogTestCaseTest.groovy       |    4 +-
 .../NotYetImplementedTransformTest.groovy          |    5 +
 .../groovy/plugin/testng/TestNgRunnerTest.groovy   |    2 +
 subprojects/groovy-xml/build.gradle                |    2 +-
 .../src/main/java/groovy/util/XmlNodePrinter.java  |  446 -----
 .../src/main/java/groovy/util/XmlParser.java       |  505 -----
 .../src/main/java/groovy/util/XmlSlurper.java      |  467 -----
 .../src/main/java/groovy/util/XmlUtil.java         |   78 -
 .../java/groovy/util/slurpersupport/Attribute.java |  143 --
 .../groovy/util/slurpersupport/Attributes.java     |  140 --
 .../util/slurpersupport/FilteredAttributes.java    |   59 -
 .../util/slurpersupport/FilteredNodeChildren.java  |   65 -
 .../groovy/util/slurpersupport/GPathResult.java    |  711 -------
 .../util/slurpersupport/NamespaceAwareHashMap.java |   79 -
 .../groovy/util/slurpersupport/NoChildren.java     |  167 --
 .../main/java/groovy/util/slurpersupport/Node.java |  339 ----
 .../java/groovy/util/slurpersupport/NodeChild.java |  160 --
 .../groovy/util/slurpersupport/NodeChildren.java   |  235 ---
 .../groovy/util/slurpersupport/NodeIterator.java   |   60 -
 .../groovy/util/slurpersupport/NodeParents.java    |   56 -
 .../util/slurpersupport/ReplacementNode.java       |   47 -
 .../java/groovy/util/slurpersupport/package.html   |   28 -
 .../src/main/java/groovy/xml/XmlParser.java        |    1 +
 .../src/main/java/groovy/xml/XmlSlurper.java       |    2 +
 .../src/main/java/groovy/xml/dom/DOMCategory.java  |    8 +-
 .../groovy/xml/slurpersupport/GPathResult.java     |    6 +-
 .../codehaus/groovy/runtime/XmlGroovyMethods.java  |   75 -
 .../org/codehaus/groovy/tools/xml/DomToGroovy.java |  405 ----
 .../spec/test/UserGuideMarkupBuilderTest.groovy    |    2 +-
 .../groovy/parser/antlr4/GroovyParserTest.groovy   |    1 +
 .../groovy/parser/antlr4/SyntaxErrorTest.groovy    |    1 +
 .../groovy/runtime/GroovyCategoryStressTest.groovy |    1 +
 .../groovy/groovy/bugs/vm8/Groovy8579Bug.groovy    |    2 +
 1187 files changed, 1978 insertions(+), 31141 deletions(-)
 delete mode 100644 src/main/java/groovy/xml/QName.java
 rename src/test/groovy/bugs/{Groovy4418Bug.groovy => Groovy4418.groovy} (98%)
 copy src/test/groovy/bugs/{ConstructorParameterBug.groovy => Groovy8063.groovy} (58%)
 copy src/test/groovy/bugs/{Groovy9031.groovy => Groovy9204.groovy} (60%)
 copy src/test/groovy/bugs/{Groovy9184.groovy => Groovy9213.groovy} (62%)
 rename src/test/groovy/bugs/{Groovy9243Bug.groovy => Groovy9243.groovy} (73%)
 rename src/test/org/codehaus/groovy/classgen/asm/sc/bugs/{Groovy7276Bug.groovy => Groovy7276.groovy} (96%)
 delete mode 100644 subprojects/groovy-ant/src/main/groovy/groovy/util/FileNameFinder.groovy
 delete mode 100644 subprojects/groovy-ant/src/main/java/groovy/util/AntBuilder.java
 delete mode 100644 subprojects/groovy-cli-commons/src/main/groovy/groovy/util/CliBuilder.groovy
 delete mode 100644 subprojects/groovy-cli-commons/src/main/groovy/groovy/util/OptionAccessor.groovy
 delete mode 100644 subprojects/groovy-cli-commons/src/spec/test/groovy/util/CliBuilderTest.groovy
 delete mode 100644 subprojects/groovy-console/src/main/groovy/groovy/inspect/TextNode.groovy
 delete mode 100644 subprojects/groovy-console/src/main/groovy/groovy/inspect/TextTreeNodeMaker.groovy
 delete mode 100644 subprojects/groovy-console/src/main/groovy/groovy/inspect/swingui/AstBrowser.groovy
 delete mode 100644 subprojects/groovy-console/src/main/groovy/groovy/inspect/swingui/AstNodeToScriptAdapter.groovy
 delete mode 100644 subprojects/groovy-console/src/main/groovy/groovy/inspect/swingui/ButtonOrDefaultRenderer.groovy
 delete mode 100644 subprojects/groovy-console/src/main/groovy/groovy/inspect/swingui/ButtonOrTextEditor.groovy
 delete mode 100644 subprojects/groovy-console/src/main/groovy/groovy/inspect/swingui/ObjectBrowser.groovy
 delete mode 100644 subprojects/groovy-console/src/main/groovy/groovy/inspect/swingui/ScriptToTreeNodeAdapter.groovy
 delete mode 100644 subprojects/groovy-console/src/main/groovy/groovy/inspect/swingui/package.html
 delete mode 100644 subprojects/groovy-console/src/main/groovy/groovy/ui/Console.groovy
 delete mode 100644 subprojects/groovy-console/src/main/groovy/groovy/ui/ConsoleActions.groovy
 delete mode 100644 subprojects/groovy-console/src/main/groovy/groovy/ui/ConsoleApplet.groovy
 delete mode 100644 subprojects/groovy-console/src/main/groovy/groovy/ui/ConsoleIvyPlugin.groovy
 delete mode 100644 subprojects/groovy-console/src/main/groovy/groovy/ui/ConsolePreferences.groovy
 delete mode 100644 subprojects/groovy-console/src/main/groovy/groovy/ui/ConsoleSupport.java
 delete mode 100644 subprojects/groovy-console/src/main/groovy/groovy/ui/ConsoleTextEditor.java
 delete mode 100644 subprojects/groovy-console/src/main/groovy/groovy/ui/ConsoleView.groovy
 delete mode 100644 subprojects/groovy-console/src/main/groovy/groovy/ui/HistoryRecord.groovy
 delete mode 100644 subprojects/groovy-console/src/main/groovy/groovy/ui/OutputTransforms.groovy
 delete mode 100644 subprojects/groovy-console/src/main/groovy/groovy/ui/SystemOutputInterceptor.java
 delete mode 100644 subprojects/groovy-console/src/main/groovy/groovy/ui/package.html
 delete mode 100644 subprojects/groovy-console/src/main/groovy/groovy/ui/text/AutoIndentAction.groovy
 delete mode 100644 subprojects/groovy-console/src/main/groovy/groovy/ui/text/FindReplaceUtility.java
 delete mode 100644 subprojects/groovy-console/src/main/groovy/groovy/ui/text/GroovyFilter.java
 delete mode 100644 subprojects/groovy-console/src/main/groovy/groovy/ui/text/MatchingHighlighter.java
 delete mode 100644 subprojects/groovy-console/src/main/groovy/groovy/ui/text/SmartDocumentFilter.java
 delete mode 100644 subprojects/groovy-console/src/main/groovy/groovy/ui/text/StructuredSyntaxDocumentFilter.java
 delete mode 100644 subprojects/groovy-console/src/main/groovy/groovy/ui/text/StructuredSyntaxHandler.java
 delete mode 100644 subprojects/groovy-console/src/main/groovy/groovy/ui/text/StructuredSyntaxResources.java
 delete mode 100644 subprojects/groovy-console/src/main/groovy/groovy/ui/text/TextEditor.java
 delete mode 100644 subprojects/groovy-console/src/main/groovy/groovy/ui/text/TextUndoManager.java
 delete mode 100644 subprojects/groovy-console/src/main/groovy/groovy/ui/text/package.html
 delete mode 100644 subprojects/groovy-console/src/main/groovy/groovy/ui/view/BasicContentPane.groovy
 delete mode 100644 subprojects/groovy-console/src/main/groovy/groovy/ui/view/BasicMenuBar.groovy
 delete mode 100644 subprojects/groovy-console/src/main/groovy/groovy/ui/view/BasicStatusBar.groovy
 delete mode 100644 subprojects/groovy-console/src/main/groovy/groovy/ui/view/BasicToolBar.groovy
 delete mode 100644 subprojects/groovy-console/src/main/groovy/groovy/ui/view/Defaults.groovy
 delete mode 100644 subprojects/groovy-console/src/main/groovy/groovy/ui/view/GTKDefaults.groovy
 delete mode 100644 subprojects/groovy-console/src/main/groovy/groovy/ui/view/MacOSXDefaults.groovy
 delete mode 100644 subprojects/groovy-console/src/main/groovy/groovy/ui/view/MacOSXMenuBar.groovy
 delete mode 100644 subprojects/groovy-console/src/main/groovy/groovy/ui/view/WindowsDefaults.groovy
 delete mode 100644 subprojects/groovy-console/src/main/resources/groovy/inspect/swingui/AstBrowserProperties.groovy
 delete mode 100644 subprojects/groovy-console/src/main/resources/groovy/ui/Console.properties
 delete mode 100644 subprojects/groovy-console/src/main/resources/groovy/ui/ConsoleIcon.png
 delete mode 100644 subprojects/groovy-console/src/main/resources/groovy/ui/InteractiveShell.properties
 delete mode 100644 subprojects/groovy-console/src/main/resources/groovy/ui/icons/arrow_redo.png
 delete mode 100644 subprojects/groovy-console/src/main/resources/groovy/ui/icons/arrow_undo.png
 delete mode 100644 subprojects/groovy-console/src/main/resources/groovy/ui/icons/book_next.png
 delete mode 100644 subprojects/groovy-console/src/main/resources/groovy/ui/icons/book_previous.png
 delete mode 100644 subprojects/groovy-console/src/main/resources/groovy/ui/icons/bullet_green.png
 delete mode 100644 subprojects/groovy-console/src/main/resources/groovy/ui/icons/clear.png
 delete mode 100644 subprojects/groovy-console/src/main/resources/groovy/ui/icons/credits.txt
 delete mode 100644 subprojects/groovy-console/src/main/resources/groovy/ui/icons/cross.png
 delete mode 100644 subprojects/groovy-console/src/main/resources/groovy/ui/icons/cut.png
 delete mode 100644 subprojects/groovy-console/src/main/resources/groovy/ui/icons/cut_red.png
 delete mode 100644 subprojects/groovy-console/src/main/resources/groovy/ui/icons/disk.png
 delete mode 100644 subprojects/groovy-console/src/main/resources/groovy/ui/icons/find.png
 delete mode 100644 subprojects/groovy-console/src/main/resources/groovy/ui/icons/folder_page.png
 delete mode 100644 subprojects/groovy-console/src/main/resources/groovy/ui/icons/page.png
 delete mode 100644 subprojects/groovy-console/src/main/resources/groovy/ui/icons/page_copy.png
 delete mode 100644 subprojects/groovy-console/src/main/resources/groovy/ui/icons/page_paste.png
 delete mode 100644 subprojects/groovy-console/src/main/resources/groovy/ui/icons/script_go.png
 delete mode 100644 subprojects/groovy-console/src/main/resources/groovy/ui/icons/text_replace.png
 delete mode 100644 subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/AnsiDetector.groovy
 delete mode 100644 subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/BufferManager.groovy
 delete mode 100644 subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/Command.groovy
 delete mode 100644 subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/CommandAlias.groovy
 delete mode 100644 subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/CommandException.groovy
 delete mode 100644 subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/CommandRegistry.groovy
 delete mode 100644 subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/CommandSupport.groovy
 delete mode 100644 subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/ComplexCommandSupport.groovy
 delete mode 100644 subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/ExitNotification.groovy
 delete mode 100644 subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/Groovysh.groovy
 delete mode 100644 subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/InteractiveShellRunner.groovy
 delete mode 100644 subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/Interpreter.groovy
 delete mode 100644 subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/Main.groovy
 delete mode 100644 subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/Parser.groovy
 delete mode 100644 subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/Shell.groovy
 delete mode 100644 subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/ShellRunner.groovy
 delete mode 100644 subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/AliasCommand.groovy
 delete mode 100644 subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/ClearCommand.groovy
 delete mode 100644 subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/DisplayCommand.groovy
 delete mode 100644 subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/DocCommand.groovy
 delete mode 100644 subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/EditCommand.groovy
 delete mode 100644 subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/ExitCommand.groovy
 delete mode 100644 subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/GrabCommand.groovy
 delete mode 100644 subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/HelpCommand.groovy
 delete mode 100644 subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/HistoryCommand.groovy
 delete mode 100644 subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/ImportCommand.groovy
 delete mode 100644 subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/InspectCommand.groovy
 delete mode 100644 subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/LoadCommand.groovy
 delete mode 100644 subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/PurgeCommand.groovy
 delete mode 100644 subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/RecordCommand.groovy
 delete mode 100644 subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/RegisterCommand.groovy
 delete mode 100644 subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/SaveCommand.groovy
 delete mode 100644 subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/SetCommand.groovy
 delete mode 100644 subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/ShadowCommand.groovy
 delete mode 100644 subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/ShowCommand.groovy
 delete mode 100644 subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/completion/BackslashEscapeCompleter.groovy
 delete mode 100644 subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/completion/CommandNameCompleter.groovy
 delete mode 100644 subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/completion/CustomClassSyntaxCompletor.groovy
 delete mode 100644 subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/completion/FileNameCompleter.groovy
 delete mode 100644 subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/completion/GroovySyntaxCompletor.groovy
 delete mode 100644 subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/completion/IdentifierCompletor.groovy
 delete mode 100644 subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/completion/ImportsSyntaxCompletor.groovy
 delete mode 100644 subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/completion/InfixKeywordSyntaxCompletor.groovy
 delete mode 100644 subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/completion/KeywordSyntaxCompletor.groovy
 delete mode 100644 subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/completion/NavigablePropertiesCompleter.groovy
 delete mode 100644 subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/completion/ReflectionCompletionCandidate.groovy
 delete mode 100644 subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/completion/ReflectionCompletor.groovy
 delete mode 100644 subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/completion/StricterArgumentCompleter.groovy
 delete mode 100644 subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/completion/VariableSyntaxCompletor.groovy
 delete mode 100644 subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/package.html
 delete mode 100644 subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/util/CommandArgumentParser.groovy
 delete mode 100644 subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/util/CurlyCountingGroovyLexer.groovy
 delete mode 100644 subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/util/DefaultCommandsRegistrar.groovy
 delete mode 100644 subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/util/NoExitSecurityManager.groovy
 delete mode 100644 subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/util/PackageHelper.groovy
 delete mode 100644 subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/util/PackageHelperImpl.groovy
 delete mode 100644 subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/util/ScriptVariableAnalyzer.groovy
 delete mode 100644 subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/util/SimpleCompletor.groovy
 delete mode 100644 subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/util/WrappedInputStream.groovy
 delete mode 100644 subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/util/XmlCommandRegistrar.groovy
 delete mode 100644 subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/util/package.html
 delete mode 100644 subprojects/groovy-jmx/src/main/java/groovy/util/GroovyMBean.java
 delete mode 100644 subprojects/groovy-nio/src/main/java/org/codehaus/groovy/runtime/NioGroovyMethods.java
 delete mode 100644 subprojects/groovy-nio/src/main/java/org/codehaus/groovy/runtime/WritablePath.java
 delete mode 100644 subprojects/groovy-swing/src/main/java/org/codehaus/groovy/binding/AbstractFullBinding.java
 delete mode 100644 subprojects/groovy-swing/src/main/java/org/codehaus/groovy/binding/AggregateBinding.java
 delete mode 100644 subprojects/groovy-swing/src/main/java/org/codehaus/groovy/binding/BindPath.java
 delete mode 100644 subprojects/groovy-swing/src/main/java/org/codehaus/groovy/binding/BindingProxy.java
 delete mode 100644 subprojects/groovy-swing/src/main/java/org/codehaus/groovy/binding/BindingUpdatable.java
 delete mode 100644 subprojects/groovy-swing/src/main/java/org/codehaus/groovy/binding/ClosureSourceBinding.java
 delete mode 100644 subprojects/groovy-swing/src/main/java/org/codehaus/groovy/binding/ClosureTriggerBinding.java
 delete mode 100644 subprojects/groovy-swing/src/main/java/org/codehaus/groovy/binding/EventTriggerBinding.java
 delete mode 100644 subprojects/groovy-swing/src/main/java/org/codehaus/groovy/binding/FullBinding.java
 delete mode 100644 subprojects/groovy-swing/src/main/java/org/codehaus/groovy/binding/MutualPropertyBinding.java
 delete mode 100644 subprojects/groovy-swing/src/main/java/org/codehaus/groovy/binding/PropertyBinding.java
 delete mode 100644 subprojects/groovy-swing/src/main/java/org/codehaus/groovy/binding/PropertyChangeProxyTargetBinding.java
 delete mode 100644 subprojects/groovy-swing/src/main/java/org/codehaus/groovy/binding/PropertyPathFullBinding.java
 delete mode 100644 subprojects/groovy-swing/src/main/java/org/codehaus/groovy/binding/SourceBinding.java
 delete mode 100644 subprojects/groovy-swing/src/main/java/org/codehaus/groovy/binding/SwingTimerTriggerBinding.java
 delete mode 100644 subprojects/groovy-swing/src/main/java/org/codehaus/groovy/binding/TargetBinding.java
 delete mode 100644 subprojects/groovy-swing/src/main/java/org/codehaus/groovy/binding/TriggerBinding.java
 delete mode 100644 subprojects/groovy-swing/src/main/java/org/codehaus/groovy/binding/package.html
 delete mode 100644 subprojects/groovy-swing/src/main/java/org/codehaus/groovy/runtime/SwingGroovyMethods.java
 delete mode 100644 subprojects/groovy-test/src/main/groovy/groovy/lang/GroovyLogTestCase.groovy
 delete mode 100644 subprojects/groovy-test/src/main/groovy/groovy/util/GroovyShellTestCase.groovy
 delete mode 100644 subprojects/groovy-test/src/main/groovy/groovy/util/JavadocAssertionTestBuilder.groovy
 delete mode 100644 subprojects/groovy-test/src/main/groovy/groovy/util/JavadocAssertionTestSuite.groovy
 delete mode 100644 subprojects/groovy-test/src/main/groovy/groovy/util/StringTestUtil.groovy
 delete mode 100644 subprojects/groovy-test/src/main/java/groovy/transform/NotYetImplemented.java
 delete mode 100644 subprojects/groovy-test/src/main/java/groovy/util/AllTestSuite.java
 delete mode 100644 subprojects/groovy-test/src/main/java/groovy/util/GroovyAssert.java
 delete mode 100644 subprojects/groovy-test/src/main/java/groovy/util/GroovyTestCase.java
 delete mode 100644 subprojects/groovy-test/src/main/java/groovy/util/GroovyTestSuite.java
 delete mode 100644 subprojects/groovy-test/src/main/java/org/codehaus/groovy/runtime/ScriptTestAdapter.java
 delete mode 100644 subprojects/groovy-xml/src/main/java/groovy/util/XmlNodePrinter.java
 delete mode 100644 subprojects/groovy-xml/src/main/java/groovy/util/XmlParser.java
 delete mode 100644 subprojects/groovy-xml/src/main/java/groovy/util/XmlSlurper.java
 delete mode 100644 subprojects/groovy-xml/src/main/java/groovy/util/XmlUtil.java
 delete mode 100644 subprojects/groovy-xml/src/main/java/groovy/util/slurpersupport/Attribute.java
 delete mode 100644 subprojects/groovy-xml/src/main/java/groovy/util/slurpersupport/Attributes.java
 delete mode 100644 subprojects/groovy-xml/src/main/java/groovy/util/slurpersupport/FilteredAttributes.java
 delete mode 100644 subprojects/groovy-xml/src/main/java/groovy/util/slurpersupport/FilteredNodeChildren.java
 delete mode 100644 subprojects/groovy-xml/src/main/java/groovy/util/slurpersupport/GPathResult.java
 delete mode 100644 subprojects/groovy-xml/src/main/java/groovy/util/slurpersupport/NamespaceAwareHashMap.java
 delete mode 100644 subprojects/groovy-xml/src/main/java/groovy/util/slurpersupport/NoChildren.java
 delete mode 100644 subprojects/groovy-xml/src/main/java/groovy/util/slurpersupport/Node.java
 delete mode 100644 subprojects/groovy-xml/src/main/java/groovy/util/slurpersupport/NodeChild.java
 delete mode 100644 subprojects/groovy-xml/src/main/java/groovy/util/slurpersupport/NodeChildren.java
 delete mode 100644 subprojects/groovy-xml/src/main/java/groovy/util/slurpersupport/NodeIterator.java
 delete mode 100644 subprojects/groovy-xml/src/main/java/groovy/util/slurpersupport/NodeParents.java
 delete mode 100644 subprojects/groovy-xml/src/main/java/groovy/util/slurpersupport/ReplacementNode.java
 delete mode 100644 subprojects/groovy-xml/src/main/java/groovy/util/slurpersupport/package.html
 delete mode 100644 subprojects/groovy-xml/src/main/java/org/codehaus/groovy/runtime/XmlGroovyMethods.java
 delete mode 100644 subprojects/groovy-xml/src/main/java/org/codehaus/groovy/tools/xml/DomToGroovy.java


[groovy] 22/23: Improve code style (closes #995)

Posted by pa...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

paulk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git

commit 8df830782e96c4fa97648aa965f5a85255aff995
Author: Bo Zhang <zh...@gmail.com>
AuthorDate: Fri Aug 16 14:10:11 2019 +0800

    Improve code style (closes #995)


[groovy] 11/23: move to later spock version

Posted by pa...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

paulk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git

commit ac1276434d423b1252cce0a6514d3a3ee22f6a0b
Author: Paul King <pa...@asert.com.au>
AuthorDate: Wed Sep 18 19:48:45 2019 +1000

    move to later spock version
---
 build.gradle                                       |    2 +-
 .../groovy/tools/shell/AnsiDetector.groovy         |   34 -
 .../groovy/tools/shell/BufferManager.groovy        |  115 --
 .../org/codehaus/groovy/tools/shell/Command.groovy |   48 -
 .../groovy/tools/shell/CommandAlias.groovy         |   87 --
 .../groovy/tools/shell/CommandException.groovy     |   47 -
 .../groovy/tools/shell/CommandRegistry.groovy      |  109 --
 .../groovy/tools/shell/CommandSupport.groovy       |  227 ----
 .../tools/shell/ComplexCommandSupport.groovy       |  101 --
 .../groovy/tools/shell/ExitNotification.groovy     |   34 -
 .../codehaus/groovy/tools/shell/Groovysh.groovy    |  672 ------------
 .../tools/shell/InteractiveShellRunner.groovy      |  217 ----
 .../codehaus/groovy/tools/shell/Interpreter.groovy |  112 --
 .../org/codehaus/groovy/tools/shell/Main.groovy    |  260 -----
 .../org/codehaus/groovy/tools/shell/Parser.groovy  |  285 -----
 .../org/codehaus/groovy/tools/shell/Shell.groovy   |  128 ---
 .../codehaus/groovy/tools/shell/ShellRunner.groovy |  102 --
 .../tools/shell/commands/AliasCommand.groovy       |  133 ---
 .../tools/shell/commands/ClearCommand.groovy       |   47 -
 .../tools/shell/commands/DisplayCommand.groovy     |   48 -
 .../groovy/tools/shell/commands/DocCommand.groovy  |  191 ----
 .../groovy/tools/shell/commands/EditCommand.groovy |  104 --
 .../groovy/tools/shell/commands/ExitCommand.groovy |   54 -
 .../groovy/tools/shell/commands/GrabCommand.groovy |   69 --
 .../groovy/tools/shell/commands/HelpCommand.groovy |  131 ---
 .../tools/shell/commands/HistoryCommand.groovy     |  154 ---
 .../tools/shell/commands/ImportCommand.groovy      |  264 -----
 .../tools/shell/commands/InspectCommand.groovy     |  130 ---
 .../groovy/tools/shell/commands/LoadCommand.groovy |   88 --
 .../tools/shell/commands/PurgeCommand.groovy       |   85 --
 .../tools/shell/commands/RecordCommand.groovy      |  139 ---
 .../tools/shell/commands/RegisterCommand.groovy    |   80 --
 .../groovy/tools/shell/commands/SaveCommand.groovy |   79 --
 .../groovy/tools/shell/commands/SetCommand.groovy  |  108 --
 .../tools/shell/commands/ShadowCommand.groovy      |   57 -
 .../groovy/tools/shell/commands/ShowCommand.groovy |  105 --
 .../completion/BackslashEscapeCompleter.groovy     |   44 -
 .../shell/completion/CommandNameCompleter.groovy   |   53 -
 .../completion/CustomClassSyntaxCompletor.groovy   |   52 -
 .../shell/completion/FileNameCompleter.groovy      |  172 ---
 .../shell/completion/GroovySyntaxCompletor.groovy  |  375 -------
 .../shell/completion/IdentifierCompletor.groovy    |   39 -
 .../shell/completion/ImportsSyntaxCompletor.groovy |  127 ---
 .../completion/InfixKeywordSyntaxCompletor.groovy  |   49 -
 .../shell/completion/KeywordSyntaxCompletor.groovy |  127 ---
 .../completion/NavigablePropertiesCompleter.groovy |   97 --
 .../ReflectionCompletionCandidate.groovy           |   79 --
 .../shell/completion/ReflectionCompletor.groovy    |  721 -------------
 .../completion/StricterArgumentCompleter.groovy    |  133 ---
 .../completion/VariableSyntaxCompletor.groovy      |   63 --
 .../org/codehaus/groovy/tools/shell/package.html   |   28 -
 .../tools/shell/util/CommandArgumentParser.groovy  |  123 ---
 .../shell/util/CurlyCountingGroovyLexer.groovy     |   69 --
 .../shell/util/DefaultCommandsRegistrar.groovy     |   89 --
 .../tools/shell/util/NoExitSecurityManager.groovy  |   64 --
 .../groovy/tools/shell/util/PackageHelper.groovy   |   30 -
 .../tools/shell/util/PackageHelperImpl.groovy      |  487 ---------
 .../tools/shell/util/ScriptVariableAnalyzer.groovy |  123 ---
 .../groovy/tools/shell/util/SimpleCompletor.groovy |  141 ---
 .../tools/shell/util/WrappedInputStream.groovy     |  110 --
 .../tools/shell/util/XmlCommandRegistrar.groovy    |   95 --
 .../codehaus/groovy/tools/shell/util/package.html  |   30 -
 subprojects/groovy-nio/build.gradle                |    8 +-
 .../groovy/binding/AbstractFullBinding.java        |  114 --
 .../codehaus/groovy/binding/AggregateBinding.java  |   83 --
 .../java/org/codehaus/groovy/binding/BindPath.java |  238 ----
 .../org/codehaus/groovy/binding/BindingProxy.java  |  160 ---
 .../codehaus/groovy/binding/BindingUpdatable.java  |   58 -
 .../groovy/binding/ClosureSourceBinding.java       |   62 --
 .../groovy/binding/ClosureTriggerBinding.java      |  171 ---
 .../groovy/binding/EventTriggerBinding.java        |   88 --
 .../org/codehaus/groovy/binding/FullBinding.java   |   48 -
 .../groovy/binding/MutualPropertyBinding.java      |  199 ----
 .../codehaus/groovy/binding/PropertyBinding.java   |  368 -------
 .../binding/PropertyChangeProxyTargetBinding.java  |   42 -
 .../groovy/binding/PropertyPathFullBinding.java    |   79 --
 .../org/codehaus/groovy/binding/SourceBinding.java |   29 -
 .../groovy/binding/SwingTimerTriggerBinding.java   |  183 ----
 .../org/codehaus/groovy/binding/TargetBinding.java |   28 -
 .../codehaus/groovy/binding/TriggerBinding.java    |   29 -
 .../java/org/codehaus/groovy/binding/package.html  |   28 -
 .../groovy/runtime/SwingGroovyMethods.java         | 1134 --------------------
 subprojects/groovy-templates/build.gradle          |    6 +
 83 files changed, 14 insertions(+), 11307 deletions(-)

diff --git a/build.gradle b/build.gradle
index 54efb16..6cf78e3 100644
--- a/build.gradle
+++ b/build.gradle
@@ -162,7 +162,7 @@ ext {
     slf4jVersion = '1.7.25'
     xmlunitVersion = '1.6'
     xstreamVersion = '1.4.11.1'
-    spockVersion = '1.2-groovy-2.4-SNAPSHOT' // supports 3.0
+    spockVersion = '1.3-groovy-2.5-SNAPSHOT' // supports up to 3.9.99
     antlr4Version = '4.7.3'
     spotbugsannotationsVersion = '3.1.11'
 }
diff --git a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/AnsiDetector.groovy b/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/AnsiDetector.groovy
deleted file mode 100644
index 8101591..0000000
--- a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/AnsiDetector.groovy
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.tools.shell
-
-import groovy.transform.CompileStatic
-import jline.TerminalFactory
-
-import java.util.concurrent.Callable
-
-@CompileStatic
-@Deprecated
-class AnsiDetector implements Callable<Boolean>
-{
-    @Override
-    Boolean call() throws Exception {
-        return TerminalFactory.create().isAnsiSupported()
-    }
-}
diff --git a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/BufferManager.groovy b/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/BufferManager.groovy
deleted file mode 100644
index 0fa9f79..0000000
--- a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/BufferManager.groovy
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.tools.shell
-
-import org.codehaus.groovy.tools.shell.util.Logger
-
-/**
- * Manages the shells buffers.
- */
-@Deprecated
-class BufferManager
-{
-    protected final Logger log = Logger.create(this.class)
-    
-    final List<List<String>> buffers = []
-
-    int selected
-
-    BufferManager() {
-        reset()
-    }
-    
-    void reset() {
-        buffers.clear()
-        
-        create(true)
-        
-        log.debug('Buffers reset')
-    }
-    
-    List<String> current() {
-        assert !buffers.isEmpty()
-        
-        return buffers[selected]
-    }
-    
-    void select(final int index) {
-        assert index >= 0 && index < buffers.size()
-        
-        selected = index
-    }
-
-    int create(final boolean select) {
-        buffers << []
-
-        def i = buffers.size() - 1
-
-        if (select) {
-            this.select(i)
-        }
-        
-        if (log.debugEnabled) {
-            log.debug("Created new buffer with index: $i")
-        }
-        
-        return i
-    }
-
-    void delete(final int index) {
-        assert index >= 0 && index < buffers.size()
-
-        buffers.remove(index)
-        
-        if (log.debugEnabled) {
-            log.debug("Deleted buffer with index: $index")
-        }
-    }
-
-    int size() {
-        return buffers.size()
-    }
-
-    //
-    // Selected operators
-    //
-    
-    void deleteSelected() {
-        delete(selected)
-
-        def i = selected - 1
-
-        if (i < 0) {
-            select(0)
-        }
-        else {
-            select(i)
-        }
-    }
-
-    void clearSelected() {
-        current().clear()
-    }
-
-    void updateSelected(final List buffer) {
-        assert buffer != null
-        
-        buffers[selected] = buffer
-    }
-}
\ No newline at end of file
diff --git a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/Command.groovy b/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/Command.groovy
deleted file mode 100644
index c10f03c..0000000
--- a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/Command.groovy
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.tools.shell
-
-import groovy.transform.CompileStatic
-import jline.console.completer.Completer
-
-/**
- * Provides the interface required for command extensions.
- */
-@CompileStatic
-@Deprecated
-interface Command
-{
-    String getName()
-
-    String getShortcut()
-
-    Completer getCompleter()
-
-    String getDescription()
-
-    String getUsage()
-
-    String getHelp()
-
-    List/*<CommandAlias>*/ getAliases()
-
-    Object execute(final List<String> args)
-
-    boolean getHidden()
-}
diff --git a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/CommandAlias.groovy b/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/CommandAlias.groovy
deleted file mode 100644
index a664bab..0000000
--- a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/CommandAlias.groovy
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.tools.shell
-
-import jline.console.completer.Completer
-
-
-/**
- * Provides simple command aliasing.
- */
-@Deprecated
-class CommandAlias
-    extends CommandSupport
-{
-    final String targetName
-
-    CommandAlias(final Groovysh shell, final String name, final String shortcut, final String target) {
-        super(shell, name, shortcut)
-
-        assert target
-
-        this.targetName = target
-    }
-
-    Command getTarget() {
-        Command command = registry.find(targetName)
-
-        assert command != null
-
-        return command
-    }
-
-    @Override
-    protected List<Completer> createCompleters() {
-        try {
-            // TODO: Use interface with createCompleters()
-            if (target instanceof CommandSupport) {
-                CommandSupport support = (CommandSupport) target
-                return support.createCompleters()
-            }
-
-        } catch (MissingMethodException) {
-            log.warn('Aliased Command without createCompleters Method')
-        }
-    }
-
-    @Override
-    String getDescription() {
-        return messages.format('info.alias_to', targetName)
-    }
-
-    @Override
-    String getUsage() {
-        return target.usage
-    }
-
-    @Override
-    String getHelp() {
-        return target.help
-    }
-
-    @Override
-    boolean getHidden() {
-        return target.hidden
-    }
-
-    @Override
-    Object execute(final List<String> args) {
-        target.execute(args)
-    }
-}
diff --git a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/CommandException.groovy b/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/CommandException.groovy
deleted file mode 100644
index e8b6a1f..0000000
--- a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/CommandException.groovy
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.tools.shell
-
-import groovy.transform.CompileStatic
-
-/**
- * Thrown to indicate a problem with command execution.
- */
-@CompileStatic
-@Deprecated
-class CommandException
-    extends Exception
-{
-
-    private final Command command
-
-    CommandException(final Command command, final String msg) {
-        super(msg)
-        this.command = command
-    }
-
-    CommandException(final Command command, final String msg, final Throwable cause) {
-        super(msg, cause)
-        this.command = command
-    }
-
-    Command getCommand() {
-        return command
-    }
-}
diff --git a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/CommandRegistry.groovy b/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/CommandRegistry.groovy
deleted file mode 100644
index c627bd9..0000000
--- a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/CommandRegistry.groovy
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.tools.shell
-
-import org.codehaus.groovy.tools.shell.util.Logger
-
-/**
- * A registry of shell {@link Command} instances which may be executed.
- */
-@Deprecated
-class CommandRegistry
-{
-    protected final Logger log = Logger.create(CommandRegistry)
-
-    //
-    // TODO: Hook up support so one can for (command in registry) { }
-    //
-
-    /** A list of all of the registered commands. */
-    final List<Command> commandList = []
-
-    /** A set of all of the command names and shortcuts to ensure they are unique. */
-    private final Set<String> names = new TreeSet<String>()
-
-    Command register(final Command command) {
-        assert command
-
-        // Make sure that the command name and shortcut are unique
-        assert !names.contains(command.name) : "Duplicate command name: $command.name"
-        names << command.name
-
-        assert !names.contains(command.shortcut) : "Duplicate command shortcut: $command.shortcut"
-        names << command.shortcut
-
-        // Hold on to the command in order
-        commandList << command
-
-        // Hookup context for alias commands
-        if (command instanceof CommandSupport) {
-            ((CommandSupport) command).registry = this
-        }
-
-        // Add any standard aliases for the command if any
-        command.aliases?.each {Command it -> this.register(it) }
-
-        if (log.debugEnabled) {
-            log.debug("Registered command: $command.name")
-        }
-
-        return command
-    }
-
-    Command find(final String name) {
-        assert name
-
-        for (c in commandList) {
-            if (name in [ c.name, c.shortcut ]) {
-                return c
-            }
-            // also allow :import
-            if (!c.name.startsWith(':') && name.equals(':' + c.name)) {
-                return c
-            }
-        }
-
-        return null
-    }
-
-    void remove(final Command command) {
-        assert command
-
-        commandList.remove(command)
-
-        names.remove(command.name)
-        names.remove(command.shortcut)
-
-        if (log.debugEnabled) {
-            log.debug("Removed command: $command.name")
-        }
-    }
-
-    List<Command> commands() {
-        return commandList
-    }
-
-    Command getProperty(final String name) {
-        return find(name)
-    }
-
-    Iterator iterator() {
-        return commands().iterator()
-    }
-}
diff --git a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/CommandSupport.groovy b/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/CommandSupport.groovy
deleted file mode 100644
index e4f66ee..0000000
--- a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/CommandSupport.groovy
+++ /dev/null
@@ -1,227 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.tools.shell
-
-import jline.console.completer.Completer
-import jline.console.completer.NullCompleter
-import jline.console.completer.StringsCompleter
-import jline.console.history.FileHistory
-import org.codehaus.groovy.tools.shell.completion.StricterArgumentCompleter
-import org.codehaus.groovy.tools.shell.util.Logger
-import org.codehaus.groovy.tools.shell.util.MessageSource
-
-/**
- * Support for {@link Command} instances.
- */
-@Deprecated
-abstract class CommandSupport
-    implements Command
-{
-    protected static final String NEWLINE = System.properties['line.separator']
-
-    /** Instance logger for the command, initialized late to include the command name. */
-    protected final Logger log
-
-    /** i18n message source for the command. */
-    protected final MessageSource messages = new MessageSource(this.class, CommandSupport)
-
-    /** The name of the command. */
-    final String name
-
-    /** The shortcut switch */
-    final String shortcut
-
-    /** The owning shell. */
-    protected final Groovysh shell
-
-    /** The I/O container for the command to spit stuff out. */
-    protected final IO io
-
-    /** Provides the command instance with the registry, for aliasing support. */
-    protected CommandRegistry registry
-
-    /** Standard aliases for the command. */
-    final List/*<CommandAlias>*/ aliases = []
-
-    /** Flag to indicate if the command should be hidden or not. */
-    boolean hidden = false
-
-    protected CommandSupport(final Groovysh shell, final String name, final String shortcut) {
-        assert shell != null
-        assert name
-        assert shortcut
-
-        this.log = Logger.create(this.class, name)
-        this.shell = shell
-        this.io = shell.io
-        this.name = name
-        this.shortcut = shortcut
-
-        //
-        // NOTE: Registry will be added once registered.
-        //
-    }
-
-    @Override
-    String getDescription() {
-        try {
-            return messages.getMessage('command.description')
-        } catch (MissingResourceException) {
-            return 'No description'
-        }
-    }
-
-    @Override
-    String getUsage() {
-        try {
-            return messages.getMessage('command.usage')
-        } catch (MissingResourceException) {
-            return 'No usage description'
-        }
-    }
-
-    @Override
-    String getHelp() {
-        try {
-            return messages.getMessage('command.help')
-        } catch (MissingResourceException) {
-            return 'No help'
-        }
-    }
-
-    @Override
-    boolean getHidden() {
-        return hidden
-    }
-
-    @Override
-    List getAliases() {
-        return aliases
-    }
-
-    @Override
-    String getShortcut() {
-        return shortcut
-    }
-
-    @Override
-    String getName() {
-        return name
-    }
-/**
-     * Override to provide custom completion semantics for the command.
-     */
-    protected List<Completer> createCompleters() {
-        return []
-    }
-
-    /**
-     * Setup the Completer for the command.
-     */
-    @Override
-    Completer getCompleter() {
-        if (hidden) {
-            return null
-        }
-
-        List<Completer> list = new ArrayList<Completer>()
-        List<Completer> completers = createCompleters()
-
-        StringsCompleter stringCompleter
-        if (completers) {
-            stringCompleter = new StringsCompleter(name + ' ', shortcut + ' ')
-        } else {
-            stringCompleter = new StringsCompleter(name, shortcut)
-        }
-
-        list << stringCompleter
-
-        if (completers) {
-            // replace null/empty with NullCompleter
-            completers.each {Completer it ->
-                if (it) {
-                    list << it
-                } else {
-                    list << new NullCompleter()
-                }
-            }
-        } else {
-            list << new NullCompleter()
-        }
-
-
-        return new StricterArgumentCompleter(list)
-    }
-
-    //
-    // Helpers
-    //
-
-    protected void alias(final String name, final String shortcut) {
-        aliases << new CommandAlias(shell, name, shortcut, this.name)
-    }
-
-    protected void fail(final String msg) {
-        throw new CommandException(this, msg)
-    }
-
-    protected void fail(final String msg, final Throwable cause) {
-        throw new CommandException(this, msg, cause)
-    }
-
-    protected void assertNoArguments(final List<String> args) {
-        assert args != null
-
-        if (args.size() > 0) {
-            fail(messages.format('error.unexpected_args', args.join(' ')))
-        }
-    }
-
-    //
-    // Shell access helpers
-    //
-
-    protected BufferManager getBuffers() {
-        return shell.buffers
-    }
-
-    protected List<String> getBuffer() {
-        return shell.buffers.current()
-    }
-
-    protected List<String> getImports() {
-        return shell.imports
-    }
-
-    protected Binding getBinding() {
-        return shell.interp.context
-    }
-
-    protected Map getVariables() {
-        return binding.variables
-    }
-
-    protected FileHistory getHistory() {
-        return shell.history
-    }
-
-    protected GroovyClassLoader getClassLoader() {
-        return shell.interp.classLoader
-    }
-}
diff --git a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/ComplexCommandSupport.groovy b/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/ComplexCommandSupport.groovy
deleted file mode 100644
index 84cdaed..0000000
--- a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/ComplexCommandSupport.groovy
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.tools.shell
-
-import jline.console.completer.Completer
-import org.codehaus.groovy.tools.shell.util.SimpleCompletor
-
-/**
- * Support for more complex commands.
- */
-@Deprecated
-abstract class ComplexCommandSupport
-    extends CommandSupport
-{
-
-    protected final List<String> functions
-
-    protected final String defaultFunction
-
-    protected ComplexCommandSupport(final Groovysh shell, final String name, final String shortcut, final List<String> comFunctions) {
-        this(shell, name, shortcut, comFunctions, null)
-    }
-
-    protected ComplexCommandSupport(final Groovysh shell, final String name, final String shortcut,
-                                    final List<String> comFunctions, final String defaultFunction) {
-        super(shell, name, shortcut)
-        this.functions = comFunctions
-        this.defaultFunction = defaultFunction
-        assert(defaultFunction  == null || defaultFunction in functions)
-    }
-
-    @Override
-    protected List<Completer> createCompleters() {
-        def c = new SimpleCompletor()
-        c.setWithBlank(false)
-        functions.each { String it -> c.add(it) }
-
-        return [ c, null ]
-    }
-
-    @Override
-    Object execute(List<String> args) {
-        assert args != null
-
-        if (args.size() == 0) {
-            if (defaultFunction) {
-                args = [ defaultFunction ]
-            } else {
-                fail("Command '$name' requires at least one argument of ${functions}")
-            }
-        }
-
-        return executeFunction(args[0], args.tail())
-    }
-
-    protected executeFunction(final String fname, final List<String> args) {
-        assert args != null
-
-        List<String> myFunctions = functions
-
-        if (fname in myFunctions) {
-            Closure func = loadFunction(fname)
-
-            log.debug("Invoking function '$fname' w/args: $args")
-
-            return func.call(args)
-        }
-        fail("Unknown function name: '$fname'. Valid arguments: $myFunctions")
-    }
-
-    protected Closure loadFunction(final String name) {
-        assert name
-
-        try {
-            return this."do_${name}"
-        } catch (MissingPropertyException e) {
-            fail("Failed to load delegate function: $e")
-        }
-    }
-
-    def do_all = {
-        functions.findAll {it != 'all'}.collect {executeFunction(it, [])}
-    }
-}
-
diff --git a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/ExitNotification.groovy b/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/ExitNotification.groovy
deleted file mode 100644
index 70b2cc9..0000000
--- a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/ExitNotification.groovy
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.tools.shell
-
-/**
- * Notification to signal the shell to exit.
- */
-@Deprecated
-class ExitNotification
-    extends Error
-{
-    /** The exit code. */
-    final int code
-
-    ExitNotification(final int code) {
-        this.code = code
-    }
-}
\ No newline at end of file
diff --git a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/Groovysh.groovy b/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/Groovysh.groovy
deleted file mode 100644
index 72d0765..0000000
--- a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/Groovysh.groovy
+++ /dev/null
@@ -1,672 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.tools.shell
-
-import antlr.TokenStreamException
-import groovy.transform.CompileStatic
-import jline.Terminal
-import jline.WindowsTerminal
-import jline.console.history.FileHistory
-import org.codehaus.groovy.control.CompilationFailedException
-import org.codehaus.groovy.control.CompilerConfiguration
-import org.codehaus.groovy.control.ErrorCollector
-import org.codehaus.groovy.control.MultipleCompilationErrorsException
-import org.codehaus.groovy.control.messages.Message
-import org.codehaus.groovy.runtime.InvokerHelper
-import org.codehaus.groovy.runtime.StackTraceUtils
-import org.codehaus.groovy.tools.shell.commands.LoadCommand
-import org.codehaus.groovy.tools.shell.commands.RecordCommand
-import org.codehaus.groovy.tools.shell.util.CurlyCountingGroovyLexer
-import org.codehaus.groovy.tools.shell.util.DefaultCommandsRegistrar
-import org.codehaus.groovy.tools.shell.util.MessageSource
-import org.codehaus.groovy.tools.shell.util.PackageHelper
-import org.codehaus.groovy.tools.shell.util.PackageHelperImpl
-import org.codehaus.groovy.tools.shell.util.Preferences
-import org.codehaus.groovy.tools.shell.util.ScriptVariableAnalyzer
-import org.codehaus.groovy.tools.shell.util.XmlCommandRegistrar
-import org.fusesource.jansi.AnsiRenderer
-
-import java.util.regex.Pattern
-
-/**
- * An interactive shell for evaluating Groovy code from the command-line (aka. groovysh).
- *
- * The set of available commands can be modified by placing a file in the classpath named
- * <code>org/codehaus/groovy/tools/shell/commands.xml</code>
- *
- * See {@link XmlCommandRegistrar}
- */
-@Deprecated
-class Groovysh extends Shell {
-
-
-    private static final MessageSource messages = new MessageSource(Groovysh)
-
-    private static final Pattern TYPEDEF_PATTERN = ~'^\\s*((?:public|protected|private|static|abstract|final)\\s+)*(?:class|enum|interface).*'
-    private static final Pattern METHODDEF_PATTERN = ~'^\\s*((?:public|protected|private|static|abstract|final|synchronized)\\s+)*[a-zA-Z_.]+[a-zA-Z_.<>]+\\s+[a-zA-Z_]+\\(.*'
-
-    public static final String COLLECTED_BOUND_VARS_MAP_VARNAME = 'groovysh_collected_boundvars'
-
-    public static final String INTERPRETER_MODE_PREFERENCE_KEY = 'interpreterMode'
-    public static final String AUTOINDENT_PREFERENCE_KEY = 'autoindent'
-    public static final String COLORS_PREFERENCE_KEY = 'colors'
-    public static final String SANITIZE_PREFERENCE_KEY = 'sanitizeStackTrace'
-    public static final String SHOW_LAST_RESULT_PREFERENCE_KEY = 'showLastResult'
-
-    // after how many prefix characters we start displaying all metaclass methods
-    public static final String METACLASS_COMPLETION_PREFIX_LENGTH_PREFERENCE_KEY = 'meta-completion-prefix-length'
-
-
-    final BufferManager buffers = new BufferManager()
-
-    final Parser parser
-
-    final Interpreter interp
-
-    // individual imports are stored without leading 'import ' or trailing ';'
-    final List<String> imports = []
-
-    int indentSize = 2
-
-    InteractiveShellRunner runner
-
-    FileHistory history
-
-    boolean historyFull  // used as a workaround for GROOVY-2177
-
-    String evictedLine  // remembers the command which will get evicted if history is full
-
-    PackageHelper packageHelper
-
-    Groovysh(final ClassLoader classLoader, final Binding binding, final IO io, final Closure registrar) {
-        this(classLoader, binding, io, registrar, null)
-    }
-
-    Groovysh(final ClassLoader classLoader, final Binding binding, final IO io, final Closure registrar, CompilerConfiguration configuration) {
-       this(classLoader, binding, io, registrar, configuration,  new Interpreter(classLoader, binding, configuration))
-    }
-    
-    Groovysh(final ClassLoader classLoader, final Binding binding, final IO io, final Closure registrar, CompilerConfiguration configuration, Interpreter interpreter) {
-        super(io)
-        assert classLoader
-        assert binding
-        def actualRegistrar = registrar ?: createDefaultRegistrar(classLoader)
-        parser = new Parser()
-        interp = interpreter
-        actualRegistrar.call(this)
-        this.packageHelper = new PackageHelperImpl(classLoader)
-    }
-
-    private static Closure createDefaultRegistrar(final ClassLoader classLoader) {
-        return {Groovysh shell ->
-            URL xmlCommandResource = getClass().getResource('commands.xml')
-            if (xmlCommandResource != null) {
-                def r = new XmlCommandRegistrar(shell, classLoader)
-                r.register(xmlCommandResource)
-            } else {
-                new DefaultCommandsRegistrar(shell).register()
-            }
-        }
-    }
-
-    Groovysh(final ClassLoader classLoader, final Binding binding, final IO io) {
-        this(classLoader, binding, io, null)
-    }
-
-    Groovysh(final Binding binding, final IO io) {
-        this(Thread.currentThread().contextClassLoader, binding, io)
-    }
-
-    Groovysh(final IO io) {
-        this(new Binding(), io)
-    }
-
-    Groovysh(final IO io, CompilerConfiguration configuration) {
-        this(Thread.currentThread().contextClassLoader, new Binding(), io, null, configuration)
-    }
-
-    Groovysh() {
-        this(new IO())
-    }
-
-    //
-    // Execution
-    //
-
-    /**
-     * Execute a single line, where the line may be a command or Groovy code (complete or incomplete).
-     */
-    @Override
-    Object execute(final String line) {
-        assert line != null
-
-        // Ignore empty lines
-        if (line.trim().size() == 0) {
-            return null
-        }
-
-        maybeRecordInput(line)
-
-        Object result
-
-        // First try normal command execution
-        if (isExecutable(line)) {
-            result = executeCommand(line)
-
-            // For commands, only set the last result when its non-null
-            if (result != null) {
-                setLastResult(result)
-            }
-
-            return result
-        }
-
-        // Otherwise treat the line as Groovy
-        List<String> current = new ArrayList<String>(buffers.current())
-
-        // Append the line to the current buffer
-        current << line
-
-        String importsSpec = this.getImportStatements()
-
-        // Attempt to parse the current buffer
-        def status = parser.parse([importsSpec] + current)
-
-        switch (status.code) {
-            case ParseCode.COMPLETE:
-                log.debug('Evaluating buffer...')
-
-                if (io.verbose) {
-                    displayBuffer(current)
-                }
-
-                if (!Boolean.valueOf(getPreference(INTERPRETER_MODE_PREFERENCE_KEY, 'false')) || isTypeOrMethodDeclaration(current)) {
-                    // Evaluate the current buffer w/imports and dummy statement
-                    List buff = [importsSpec] + [ 'true' ] + current
-                    setLastResult(result = interp.evaluate(buff))
-                } else {
-                    // Evaluate Buffer wrapped with code storing bounded vars
-                    result = evaluateWithStoredBoundVars(importsSpec, current)
-                }
-
-                buffers.clearSelected()
-                break
-
-            case ParseCode.INCOMPLETE:
-                // Save the current buffer so user can build up complex multi-line code blocks
-                buffers.updateSelected(current)
-                break
-
-            case ParseCode.ERROR:
-                throw status.cause
-
-            default:
-                // Should never happen
-                throw new Error("Invalid parse status: $status.code")
-        }
-
-        return result
-    }
-
-    /**
-     * return true if the buffer can be recognized as a type declaration statement
-     * @param strings
-     * @return
-     */
-    @CompileStatic
-    static boolean isTypeOrMethodDeclaration(final List<String> buffer) {
-        final String joined = buffer.join('')
-        return joined.matches(TYPEDEF_PATTERN) || joined.matches(METHODDEF_PATTERN)
-    }
-/*
-     * to simulate an interpreter mode, this method wraps the statements into a try/finally block that
-     * stores bound variables like unbound variables
-     */
-    private Object evaluateWithStoredBoundVars(String importsSpec, final List<String> current) {
-        Object result
-        String variableBlocks = null
-        // To make groovysh behave more like an interpreter, we need to retrieve all bound
-        // vars at the end of script execution, and then update them into the groovysh Binding context.
-        Set<String> boundVars = ScriptVariableAnalyzer.getBoundVars(importsSpec + Parser.NEWLINE + current.join(Parser.NEWLINE), interp.classLoader)
-        if (boundVars) {
-            variableBlocks = "$COLLECTED_BOUND_VARS_MAP_VARNAME = new HashMap();"
-            boundVars.each({ String varname ->
-                // bound vars can be in global or some local scope.
-                // We discard locally scoped vars by ignoring MissingPropertyException
-                variableBlocks += """
-try {$COLLECTED_BOUND_VARS_MAP_VARNAME[\"$varname\"] = $varname;
-} catch (MissingPropertyException e){}"""
-            })
-        }
-        // Evaluate the current buffer w/imports and dummy statement
-        List<String> buff;
-        if (variableBlocks) {
-            buff = [importsSpec] + ['try {', 'true'] + current + ['} finally {' + variableBlocks + '}']
-        } else {
-            buff = [importsSpec] + ['true'] + current
-        }
-        setLastResult(result = interp.evaluate(buff))
-
-        if (variableBlocks) {
-            Map<String, Object> boundVarValues = interp.context.getVariable(COLLECTED_BOUND_VARS_MAP_VARNAME)
-            boundVarValues.each({ String name, Object value -> interp.context.setVariable(name, value) })
-        }
-
-        return result
-    }
-
-
-
-    protected Object executeCommand(final String line) {
-        return super.execute(line)
-    }
-
-    /**
-     * Display the given buffer.
-     */
-    void displayBuffer(final List buffer) {
-        assert buffer
-
-        buffer.eachWithIndex { line, index ->
-            def lineNum = formatLineNumber(index)
-
-            io.out.println(" ${lineNum}@|bold >|@ $line")
-        }
-    }
-
-    String getImportStatements() {
-        return this.imports.collect({String it -> "import $it;"}).join('')
-    }
-
-    //
-    // Prompt
-    //
-
-    private final AnsiRenderer prompt = new AnsiRenderer()
-
-    /*
-        Builds the command prompt name in 1 of 3 ways:
-           1.  Checks the groovysh.prompt property passed into groovysh script.   -Dgroovysh.prompt="hello"
-           2.  Checks an environment variable called GROOVYSH_PROMPT.             export GROOVYSH_PROMPT
-           3.  If no value is defined returns the default groovy shell prompt.
-
-        The code will always assume you want the line number in the prompt.  To implement differently overhead the render
-        prompt variable.
-     */
-    private String buildPrompt() {
-        def lineNum = formatLineNumber(buffers.current().size())
-
-        def groovyshellProperty = System.getProperty('groovysh.prompt')
-        if (groovyshellProperty) {
-            return "@|bold ${groovyshellProperty}:|@${lineNum}@|bold >|@ "
-        }
-        def groovyshellEnv = System.getenv('GROOVYSH_PROMPT')
-        if (groovyshellEnv) {
-            return  "@|bold ${groovyshellEnv}:|@${lineNum}@|bold >|@ "
-        }
-        return "@|bold groovy:|@${lineNum}@|bold >|@ "
-
-    }
-
-    /**
-     * Calculate probably desired indentation based on parenthesis balance and last char,
-     * as well as what the user used last as indentation.
-     * @return a string to indent the next line in the buffer
-     */
-    String getIndentPrefix() {
-        List<String> buffer = this.buffers.current()
-        if (buffer.size() < 1) {
-            return ''
-        }
-        StringBuilder src = new StringBuilder()
-        for (String line: buffer) {
-            src.append(line).append('\n')
-        }
-
-        // not sure whether the same Lexer instance could be reused.
-        def lexer = CurlyCountingGroovyLexer.createGroovyLexer(src.toString())
-
-        // read all tokens
-        try {
-            while (lexer.nextToken().getType() != CurlyCountingGroovyLexer.EOF) {}
-        } catch (TokenStreamException e) {
-            // pass
-        }
-        int parenIndent = (lexer.getParenLevel()) * indentSize
-
-        // dedent after closing brackets
-        return ' ' * Math.max(parenIndent, 0)
-    }
-
-    public String renderPrompt() {
-        return prompt.render( buildPrompt() )
-    }
-
-    /**
-     * Format the given number suitable for rendering as a line number column.
-     */
-    protected String formatLineNumber(final int num) {
-        assert num >= 0
-
-        // Make a %03d-like string for the line number
-        return num.toString().padLeft(3, '0')
-    }
-
-    //
-    // User Profile Scripts
-    //
-
-    File getUserStateDirectory() {
-        def userHome = new File(System.getProperty('user.home'))
-        def dir = new File(userHome, '.groovy')
-        return dir.canonicalFile
-    }
-
-    /**
-     * Loads file from within user groovy state directory
-     * @param filename
-     */
-    protected void loadUserScript(final String filename) {
-        assert filename
-
-        File file = new File(getUserStateDirectory(), filename)
-
-        if (file.exists()) {
-            Command command = registry[LoadCommand.COMMAND_NAME] as Command
-
-            if (command) {
-                log.debug("Loading user-script: $file")
-
-                // Disable the result hook for profile scripts
-                def previousHook = resultHook
-                resultHook = { result -> /* nothing */}
-
-                try {
-                    command.load(file.toURI().toURL())
-                }
-                finally {
-                    // Restore the result hook
-                    resultHook = previousHook
-                }
-            } else {
-                log.error("Unable to load user-script, missing '$LoadCommand.COMMAND_NAME' command")
-            }
-        }
-    }
-
-    //
-    // Recording
-    //
-
-    protected void maybeRecordInput(final String line) {
-        RecordCommand record = registry[RecordCommand.COMMAND_NAME]
-
-        if (record != null) {
-            record.recordInput(line)
-        }
-    }
-
-    protected void maybeRecordResult(final Object result) {
-        RecordCommand record = registry[RecordCommand.COMMAND_NAME]
-
-        if (record != null) {
-            record.recordResult(result)
-        }
-    }
-
-    protected void maybeRecordError(Throwable cause) {
-        RecordCommand record = registry[RecordCommand.COMMAND_NAME]
-
-        if (record != null) {
-            if (getPreference(SANITIZE_PREFERENCE_KEY, 'false')) {
-                cause = StackTraceUtils.deepSanitize(cause)
-            }
-            record.recordError(cause)
-        }
-    }
-
-    //
-    // Hooks
-    //
-
-    final Closure defaultResultHook = {Object result ->
-        boolean showLastResult = !io.quiet && (io.verbose || getPreference(SHOW_LAST_RESULT_PREFERENCE_KEY, 'false'))
-        if (showLastResult) {
-            // avoid String.valueOf here because it bypasses pretty-printing of Collections,
-            // e.g. String.valueOf( ['a': 42] ) != ['a': 42].toString()
-            io.out.println("@|bold ===>|@ ${InvokerHelper.toString(result)}")
-        }
-    }
-
-    Closure resultHook = defaultResultHook
-
-    private void setLastResult(final Object result) {
-        if (resultHook == null) {
-            throw new IllegalStateException('Result hook is not set')
-        }
-
-        resultHook.call((Object)result)
-
-        interp.context['_'] = result
-
-        maybeRecordResult(result)
-    }
-
-    final Closure defaultErrorHook = { Throwable cause ->
-        assert cause != null
-
-        if (log.debug || ! (cause instanceof CompilationFailedException)) {
-            // For CompilationErrors, the Exception Class is usually not useful to the user
-            io.err.println("@|bold,red ERROR|@ ${cause.getClass().name}:")
-        }
-
-        if (cause instanceof MultipleCompilationErrorsException) {
-            Writer data = new org.apache.groovy.io.StringBuilderWriter();
-            PrintWriter writer = new PrintWriter(data);
-            ErrorCollector collector = ((MultipleCompilationErrorsException) cause).getErrorCollector()
-            Iterator<Message> msgIterator = collector.getErrors().iterator()
-            while (msgIterator.hasNext()) {
-                Message errorMsg = msgIterator.next()
-                errorMsg.write(writer)
-                if (msgIterator.hasNext()) {
-                    writer.println()
-                }
-            }
-            io.err.println("@|bold,red ${data.toString()}|@")
-        } else {
-            io.err.println("@|bold,red ${cause.message}|@")
-
-
-            maybeRecordError(cause)
-
-            if (log.debug) {
-                // If we have debug enabled then skip the fancy bits below
-                log.debug(cause)
-            }
-            else {
-                boolean sanitize = getPreference(SANITIZE_PREFERENCE_KEY, 'false')
-
-                // Sanitize the stack trace unless we are in verbose mode, or the user has request otherwise
-                if (!io.verbose && sanitize) {
-                    cause = StackTraceUtils.deepSanitize(cause)
-                }
-
-                def trace = cause.stackTrace
-
-                def buff = new StringBuilder()
-
-                boolean doBreak = false
-
-                for (e in trace) {
-                    // Stop the trace once we find the root of the evaluated script
-                    if (e.className == Interpreter.SCRIPT_FILENAME && e.methodName == 'run') {
-                        if (io.verbosity != IO.Verbosity.DEBUG && io.verbosity != IO.Verbosity.VERBOSE) {
-                            break
-                        }
-                        doBreak = true
-                    }
-
-                    buff << "        @|bold at|@ ${e.className}.${e.methodName} (@|bold "
-
-                    buff << (e.nativeMethod ? 'Native Method' :
-                            (e.fileName != null && e.lineNumber != -1 ? "${e.fileName}:${e.lineNumber}" :
-                                    (e.fileName != null ? e.fileName : 'Unknown Source')))
-
-                    buff << '|@)'
-
-                    io.err.println(buff)
-
-                    buff.setLength(0) // Reset the buffer
-                    if (doBreak) {
-                        io.err.println('        @|bold ...|@')
-                        break
-                    }
-                }
-            }
-        }
-    }
-
-    // protected for mocking in tests
-    protected String getPreference(final String key, final String theDefault) {
-        return Preferences.get(key, theDefault)
-    }
-
-    Closure errorHook = defaultErrorHook
-
-    private void displayError(final Throwable cause) {
-        if (errorHook == null) {
-            throw new IllegalStateException('Error hook is not set')
-        }
-        if (cause instanceof MissingPropertyException) {
-            if (cause.type && cause.type.canonicalName == Interpreter.SCRIPT_FILENAME) {
-                io.err.println("@|bold,red Unknown property|@: " + cause.property)
-                return
-            }
-        }
-
-        errorHook.call(cause)
-    }
-
-    /**
-    * Run Interactive Shell with optional initial script and files to load
-    */
-    int run(final String evalString, final List<String> filenames) {
-        List<String> startCommands = []
-
-        if (evalString != null && evalString.trim().size() > 0) {
-            startCommands.add(evalString)
-        }
-        if (filenames != null && filenames.size() > 0) {
-            startCommands.addAll(filenames.collect({String it -> "${LoadCommand.COMMAND_NAME} $it"}))
-        }
-        return run(startCommands.join('\n'))
-    }
-
-    /**
-     * Run Interactive Shell with initial command
-     */
-    int run(final String commandLine) {
-        def code
-
-        try {
-            loadUserScript('groovysh.profile')
-            loadUserScript('groovysh.rc')
-
-            // Setup the interactive runner
-            runner = new InteractiveShellRunner(
-                    this,
-                    this.&renderPrompt as Closure)
-
-            // if args were passed in, just execute as a command
-            // (but cygwin gives an empty string, so ignore that)
-            if (commandLine != null && commandLine.trim().size() > 0) {
-                runner.wrappedInputStream.insert(commandLine + '\n')
-            }
-
-            // Setup the history
-            File histFile = new File(userStateDirectory, 'groovysh.history')
-            history = new FileHistory(histFile)
-            runner.setHistory(history)
-
-            // Setup the error handler
-            runner.errorHandler = this.&displayError
-
-            displayWelcomeBanner(runner)
-
-            // And let 'er rip... :-)
-            runner.run()
-
-
-            code = 0
-        } catch (ExitNotification n) {
-            log.debug("Exiting w/code: ${n.code}")
-
-            code = n.code
-        }
-        catch (Throwable t) {
-            io.err.println(messages.format('info.fatal', t))
-            t.printStackTrace(io.err)
-
-            code = 1
-        }
-
-        assert code != null // This should never happen
-
-        return code
-    }
-
-
-    /**
-     * maybe displays log information and a welcome message
-     * @param term
-     */
-    public void displayWelcomeBanner(InteractiveShellRunner runner) {
-        if (!log.debug && io.quiet) {
-            // nothing to do here
-            return
-        }
-        Terminal term = runner.reader.terminal
-        if (log.debug) {
-            log.debug("Terminal ($term)")
-            log.debug("    Supported:  $term.supported")
-            log.debug("    ECHO:       (enabled: $term.echoEnabled)")
-            log.debug("    H x W:      ${term.getHeight()} x ${term.getWidth()}")
-            log.debug("    ANSI:       ${term.isAnsiSupported()}")
-
-            if (term instanceof WindowsTerminal) {
-                WindowsTerminal winterm = (WindowsTerminal) term
-                log.debug("    Direct:     ${winterm.directConsole}")
-            }
-        }
-
-        // Display the welcome banner
-        if (!io.quiet) {
-            int width = term.getWidth()
-
-            // If we can't tell, or have something bogus then use a reasonable default
-            if (width < 1) {
-                width = 80
-            }
-
-            io.out.println(messages.format('startup_banner.0', GroovySystem.version, System.properties['java.version']))
-            io.out.println(messages['startup_banner.1'])
-            io.out.println('-' * (width - 1))
-        }
-    }
-}
diff --git a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/InteractiveShellRunner.groovy b/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/InteractiveShellRunner.groovy
deleted file mode 100644
index de73fde..0000000
--- a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/InteractiveShellRunner.groovy
+++ /dev/null
@@ -1,217 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.tools.shell
-
-import jline.console.ConsoleReader
-import jline.console.completer.AggregateCompleter
-import jline.console.completer.CandidateListCompletionHandler
-import jline.console.completer.CompletionHandler
-import jline.console.history.FileHistory
-import org.codehaus.groovy.tools.shell.completion.CustomClassSyntaxCompletor
-import org.codehaus.groovy.tools.shell.completion.FileNameCompleter
-import org.codehaus.groovy.tools.shell.completion.GroovySyntaxCompletor
-import org.codehaus.groovy.tools.shell.completion.ImportsSyntaxCompletor
-import org.codehaus.groovy.tools.shell.completion.KeywordSyntaxCompletor
-import org.codehaus.groovy.tools.shell.completion.ReflectionCompletor
-import org.codehaus.groovy.tools.shell.completion.VariableSyntaxCompletor
-import org.codehaus.groovy.tools.shell.IO
-import org.codehaus.groovy.tools.shell.util.Logger
-import org.codehaus.groovy.tools.shell.util.Preferences
-import org.codehaus.groovy.tools.shell.util.WrappedInputStream
-
-/**
- * Support for running a {@link Shell} interactively using the JLine library.
- */
-@Deprecated
-class InteractiveShellRunner
-    extends ShellRunner
-    implements Runnable
-{
-    ConsoleReader reader
-
-    final Closure prompt
-
-    final CommandsMultiCompleter completer
-    WrappedInputStream wrappedInputStream
-
-    InteractiveShellRunner(final Groovysh shell, final Closure prompt) {
-        super(shell)
-
-        this.prompt = prompt
-        this.wrappedInputStream = new WrappedInputStream(shell.io.inputStream)
-        this.reader = new ConsoleReader(wrappedInputStream, shell.io.outputStream)
-
-        CompletionHandler currentCompletionHandler = this.reader.getCompletionHandler()
-        if (currentCompletionHandler instanceof CandidateListCompletionHandler) {
-            // have to downcast because methods not part of the interface
-            ((CandidateListCompletionHandler) currentCompletionHandler).setStripAnsi(true)
-            ((CandidateListCompletionHandler) currentCompletionHandler).setPrintSpaceAfterFullCompletion(false)
-        }
-
-
-        // expand events ia an advanced feature of JLine that clashes with Groovy syntax (e.g. invoke "2!=3")
-        this.reader.expandEvents = false
-
-
-        // complete groovysh commands, display, import, ... as first word in line
-        this.completer = new CommandsMultiCompleter()
-        reader.addCompleter(this.completer)
-
-        CustomClassSyntaxCompletor classnameCompletor = new CustomClassSyntaxCompletor(shell)
-
-        reader.addCompleter(new GroovySyntaxCompletor(shell,
-                new ReflectionCompletor(shell),
-                classnameCompletor,
-                [new KeywordSyntaxCompletor(),
-                        new VariableSyntaxCompletor(shell),
-                        classnameCompletor,
-                        new ImportsSyntaxCompletor(shell)],
-                new FileNameCompleter(false)))
-    }
-
-    @Override
-    void run() {
-        for (Command command in shell.registry.commands()) {
-            completer.add(command)
-        }
-
-        // Force things to become clean
-        completer.refresh()
-
-        // And then actually run
-        adjustHistory()
-        super.run()
-    }
-
-    void setHistory(final FileHistory history) {
-        reader.history = history
-        def dir = history.file.parentFile
-
-        if (!dir.exists()) {
-            dir.mkdirs()
-
-            log.debug("Created base directory for history file: $dir")
-        }
-
-        log.debug("Using history file: $history.file")
-    }
-
-    @Override
-    protected String readLine() {
-        try {
-            if (Boolean.valueOf(Preferences.get(Groovysh.AUTOINDENT_PREFERENCE_KEY))) {
-                // prevent auto-indent when pasting code blocks
-                if (shell.io.inputStream.available() == 0) {
-                    wrappedInputStream.insert(((Groovysh) shell).indentPrefix)
-                }
-            }
-            return reader.readLine(prompt.call() as String)
-        } catch (StringIndexOutOfBoundsException e) {
-            log.debug('HACK: Try and work around GROOVY-2152 for now', e)
-            reader.println()
-            return ''
-        } catch (Throwable t) {
-            if (shell.io.verbosity == IO.Verbosity.DEBUG) {
-                throw t
-            }
-            reader.println()
-            return ''
-        }
-    }
-
-    @Override
-    protected boolean work() {
-        boolean result= super.work()
-        adjustHistory()
-
-        result
-    }
-
-    private void adjustHistory() {
-        // we save the evicted line in casesomeone wants to use it with history recall
-        if (shell instanceof Groovysh) {
-            def history = shell.history
-            shell.historyFull = (history != null) && (history.size() >= history.maxSize)
-            if (shell.historyFull) {
-                def first = history.first()
-                if (first) {
-                    shell.evictedLine = first.value()
-                }
-            }
-        }
-    }
-
-}
-
-/**
- * Completer for interactive shells.
- */
-@Deprecated
-class CommandsMultiCompleter
-    extends AggregateCompleter
-{
-    protected final Logger log = Logger.create(this.class)
-
-    List/*<Completer>*/ list = []
-
-    private boolean dirty = false
-
-    def add(final Command command) {
-        assert command
-
-        //
-        // FIXME: Need to handle completer removal when things like aliases are rebound
-        //
-
-        def c = command.completer
-
-        if (c) {
-            list << c
-
-            log.debug("Added completer[${list.size()}] for command: $command.name")
-
-            dirty = true
-        }
-    }
-
-    void refresh() {
-        log.debug('Refreshing the completer list')
-
-        completers.clear()
-        completers.addAll(list)
-        dirty = false
-    }
-
-    @Override
-    int complete(final String buffer, final int pos, final List cand) {
-        assert buffer != null
-
-        //
-        // FIXME: This is a bit of a hack, I'm too lazy to rewrite a more efficient
-        //        completer impl that is more dynamic than the jline.MultiCompleter version
-        //        so just re-use it and reset the list as needed
-        //
-
-        if (dirty) {
-            refresh()
-        }
-
-        return super.complete(buffer, pos, cand)
-    }
-}
diff --git a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/Interpreter.groovy b/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/Interpreter.groovy
deleted file mode 100644
index 5af886a..0000000
--- a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/Interpreter.groovy
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.tools.shell
-
-import org.codehaus.groovy.control.CompilerConfiguration
-import org.codehaus.groovy.runtime.InvokerHelper
-import org.codehaus.groovy.runtime.MethodClosure
-import org.codehaus.groovy.tools.shell.util.Logger
-
-import java.lang.reflect.Method
-
-/**
- * Helper to interpret a source buffer.
- */
-@Deprecated
-class Interpreter implements Evaluator
-{
-    static final String SCRIPT_FILENAME = 'groovysh_evaluate'
-
-    private final Logger log = Logger.create(this.class)
-
-    private final GroovyShell shell
-
-    Interpreter(final ClassLoader classLoader, final Binding binding) {
-        this(classLoader, binding, null)
-    }
-
-    Interpreter(final ClassLoader classLoader, final Binding binding, CompilerConfiguration configuration) {
-        assert classLoader
-        assert binding
-        if (configuration != null) {
-            shell = new GroovyShell(classLoader, binding, configuration)
-        } else {
-            shell = new GroovyShell(classLoader, binding)
-        }
-    }
-
-    Binding getContext() {
-        return shell.context
-    }
-
-    GroovyClassLoader getClassLoader() {
-        return shell.classLoader
-    }
-
-    GroovyShell getShell() {
-        return shell
-    }
-
-    @Override
-    def evaluate(final Collection<String> buffer) {
-        assert buffer
-
-        def source = buffer.join(Parser.NEWLINE)
-
-        def result
-
-        Class type
-        try {
-            Script script = shell.parse(source, SCRIPT_FILENAME)
-            type = script.getClass()
-
-            log.debug("Compiled script: $script")
-
-            if (type.declaredMethods.any {Method it -> it.name == 'main' }) {
-                result = script.run()
-            }
-
-            // Need to use String.valueOf() here to avoid icky exceptions causes by GString coercion
-            log.debug("Evaluation result: ${InvokerHelper.toString(result)} (${result?.getClass()})")
-
-            // Keep only the methods that have been defined in the script
-            type.declaredMethods.each { Method m ->
-                if (!(m.name in [ 'main', 'run' ] || m.name.startsWith('super$') || m.name.startsWith('class$') || m.name.startsWith('$'))) {
-                    log.debug("Saving method definition: $m.name")
-
-                    context["${m.name}"] = new MethodClosure(type.newInstance(), m.name)
-                }
-            }
-        }
-        finally {
-            // Remove the script class generated
-            classLoader.removeClassCacheEntry(type?.name)
-
-            // Remove the inline closures from the cache as well
-            classLoader.removeClassCacheEntry('$_run_closure')
-        }
-
-        return result
-    }
-}
-
-@Deprecated
-interface Evaluator {
-    def evaluate(final Collection<String> buffer)
-}
diff --git a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/Main.groovy b/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/Main.groovy
deleted file mode 100644
index 6d8bd81..0000000
--- a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/Main.groovy
+++ /dev/null
@@ -1,260 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.tools.shell
-
-import groovy.cli.internal.CliBuilderInternal
-import groovy.cli.internal.OptionAccessor
-import jline.TerminalFactory
-import jline.UnixTerminal
-import jline.UnsupportedTerminal
-import jline.WindowsTerminal
-import org.codehaus.groovy.control.CompilerConfiguration
-import org.codehaus.groovy.tools.shell.util.Logger
-import org.codehaus.groovy.tools.shell.util.MessageSource
-import org.codehaus.groovy.tools.shell.util.NoExitSecurityManager
-import org.fusesource.jansi.Ansi
-import org.fusesource.jansi.AnsiConsole
-
-import static org.apache.groovy.util.SystemUtil.setSystemPropertyFrom
-
-/**
- * A Main instance has a Groovysh member representing the shell,
- * and a startGroovysh() method to run an interactive shell.
- * Subclasses should preferably extend createIO() or configure the shell
- * via getShell prior to invoking startGroovysh.
- * Clients may use configureAndStartGroovysh to provide the same CLI params
- * but a different Groovysh implementation (implementing getIO() and run()).
- *
- * The class also has static utility methods to manipulate the
- * static ansi state using the jAnsi library.
- *
- * Main CLI entry-point for <tt>groovysh</tt>.
- */
-@Deprecated
-class Main {
-    final Groovysh groovysh
-
-    /**
-     * @param io: may just be new IO(), which is the default
-     */
-    Main(IO io) {
-        Logger.io = io
-        groovysh = new Groovysh(io)
-    }
-
-    /**
-     * @param io: may just be new IO(), which is the default
-     */
-    Main(IO io, CompilerConfiguration configuration) {
-        Logger.io = io
-        groovysh = new Groovysh(io, configuration)
-    }
-
-    /**
-     * create a Main instance, configures it according to CLI arguments, and starts the shell.
-     * @param main must have a Groovysh member that has an IO member.
-     */
-    static void main(final String[] args) {
-        MessageSource messages = new MessageSource(Main)
-        def cli = new CliBuilderInternal(usage: 'groovysh [options] [...]', stopAtNonOption: false,
-                header: messages['cli.option.header'])
-        cli.with {
-            _(names: ['-cp', '-classpath', '--classpath'], messages['cli.option.classpath.description'])
-            h(longOpt: 'help', messages['cli.option.help.description'])
-            V(longOpt: 'version', messages['cli.option.version.description'])
-            v(longOpt: 'verbose', messages['cli.option.verbose.description'])
-            q(longOpt: 'quiet', messages['cli.option.quiet.description'])
-            d(longOpt: 'debug', messages['cli.option.debug.description'])
-            e(longOpt: 'evaluate', args: 1, argName: 'CODE', optionalArg: false, messages['cli.option.evaluate.description'])
-            C(longOpt: 'color', args: 1, argName: 'FLAG', optionalArg: true, messages['cli.option.color.description'])
-            D(longOpt: 'define', type: Map, argName: 'name=value', messages['cli.option.define.description'])
-            T(longOpt: 'terminal', args: 1, argName: 'TYPE', messages['cli.option.terminal.description'])
-            pa(longOpt: 'parameters', messages['cli.option.parameters.description'])
-        }
-        OptionAccessor options = cli.parse(args)
-
-        if (options == null) {
-            // CliBuilder prints error, but does not exit
-            System.exit(22) // Invalid Args
-        }
-
-        if (options.h) {
-            cli.usage()
-            System.exit(0)
-        }
-
-        if (options.V) {
-            System.out.println(messages.format('cli.info.version', GroovySystem.version))
-            System.exit(0)
-        }
-
-        boolean suppressColor = false
-        if (options.hasOption('C')) {
-            def value = options.getOptionValue('C')
-            if (value != null) {
-                suppressColor = !Boolean.valueOf(value).booleanValue() // For JDK 1.4 compat
-            }
-        }
-
-        String type = TerminalFactory.AUTO
-        if (options.hasOption('T')) {
-            type = options.getOptionValue('T')
-        }
-        try {
-            setTerminalType(type, suppressColor)
-        } catch (IllegalArgumentException e) {
-            System.err.println(e.getMessage())
-            cli.usage()
-            System.exit(22) // Invalid Args
-        }
-
-        // IO must be constructed AFTER calling setTerminalType()/AnsiConsole.systemInstall(),
-        // else wrapped System.out does not work on Windows.
-        IO io = new IO()
-
-        if (options.hasOption('D')) {
-            options.Ds.each { k, v -> System.setProperty(k, v) }
-        }
-
-        if (options.v) {
-            io.verbosity = IO.Verbosity.VERBOSE
-        }
-
-        if (options.d) {
-            io.verbosity = IO.Verbosity.DEBUG
-        }
-
-        if (options.q) {
-            io.verbosity = IO.Verbosity.QUIET
-        }
-
-        String evalString = null
-        if (options.e) {
-            evalString = options.getOptionValue('e')
-        }
-        def configuration = new CompilerConfiguration(System.getProperties())
-        configuration.setParameters((boolean) options.hasOption("pa"))
-
-        List<String> filenames = options.arguments()
-        Main main = new Main(io, configuration)
-        main.startGroovysh(evalString, filenames)
-    }
-
-    /**
-     * @param evalString commands that will be executed at startup after loading files given with filenames param
-     * @param filenames files that will be loaded at startup
-     */
-    protected void startGroovysh(String evalString, List<String> filenames) {
-        int code
-        Groovysh shell = getGroovysh()
-
-        // Add a hook to display some status when shutting down...
-        addShutdownHook {
-            //
-            // FIXME: We need to configure JLine to catch CTRL-C for us... Use gshell-io's InputPipe
-            //
-
-            if (code == null) {
-                // Give the user a warning when the JVM shutdown abnormally, normal shutdown
-                // will set an exit code through the proper channels
-
-                println('WARNING: Abnormal JVM shutdown detected')
-            }
-
-            if (shell.history) {
-                shell.history.flush()
-            }
-        }
-
-
-        SecurityManager psm = System.getSecurityManager()
-        System.setSecurityManager(new NoExitSecurityManager())
-
-        try {
-            code = shell.run(evalString, filenames)
-        }
-        finally {
-            System.setSecurityManager(psm)
-        }
-
-        // Force the JVM to exit at this point, since shell could have created threads or
-        // popped up Swing components that will cause the JVM to linger after we have been
-        // asked to shutdown
-
-        System.exit(code)
-    }
-
-    /**
-     * @param type: one of 'auto', 'unix', ('win', 'windows'), ('false', 'off', 'none')
-     * @param suppressColor only has effect when ansi is enabled
-     */
-    static void setTerminalType(String type, boolean suppressColor) {
-        assert type != null
-
-        type = type.toLowerCase()
-        boolean enableAnsi = true
-        switch (type) {
-            case TerminalFactory.AUTO:
-                type = null
-                break
-            case TerminalFactory.UNIX:
-                type = UnixTerminal.canonicalName
-                break
-            case TerminalFactory.WIN:
-            case TerminalFactory.WINDOWS:
-                type = WindowsTerminal.canonicalName
-                break
-            case TerminalFactory.FALSE:
-            case TerminalFactory.OFF:
-            case TerminalFactory.NONE:
-                type = UnsupportedTerminal.canonicalName
-                // Disable ANSI, for some reason UnsupportedTerminal reports ANSI as enabled, when it shouldn't
-                enableAnsi = false
-                break
-            default:
-                // Should never happen
-                throw new IllegalArgumentException("Invalid Terminal type: $type")
-        }
-        if (enableAnsi) {
-            installAnsi() // must be called before IO(), since it modifies System.in
-            Ansi.enabled = !suppressColor
-        } else {
-            Ansi.enabled = false
-        }
-
-        if (type != null) {
-            System.setProperty(TerminalFactory.JLINE_TERMINAL, type)
-        }
-    }
-
-    static void installAnsi() {
-        // Install the system adapters, replaces System.out and System.err
-        // Must be called before using IO(), because IO stores refs to System.out and System.err
-        AnsiConsole.systemInstall()
-
-        // Register jline ansi detector
-        Ansi.setDetector(new AnsiDetector())
-    }
-
-    @Deprecated
-    static void setSystemProperty(final String nameValue) {
-        setSystemPropertyFrom(nameValue)
-    }
-}
-
diff --git a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/Parser.groovy b/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/Parser.groovy
deleted file mode 100644
index 33b6add..0000000
--- a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/Parser.groovy
+++ /dev/null
@@ -1,285 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.tools.shell
-
-import antlr.RecognitionException
-import antlr.TokenStreamException
-import antlr.collections.AST
-import org.codehaus.groovy.antlr.SourceBuffer
-import org.codehaus.groovy.antlr.UnicodeEscapingReader
-import org.codehaus.groovy.antlr.parser.GroovyLexer
-import org.codehaus.groovy.antlr.parser.GroovyRecognizer
-import org.codehaus.groovy.control.CompilationFailedException
-import org.codehaus.groovy.control.ParserPluginFactory
-import org.codehaus.groovy.control.SourceUnit
-import org.codehaus.groovy.tools.shell.util.Logger
-import org.codehaus.groovy.tools.shell.util.Preferences
-
-import java.util.regex.Pattern
-
-@Deprecated
-interface Parsing {
-    ParseStatus parse(final Collection<String> buffer)
-}
-
-/**
- * Provides a facade over the parser to recognize valid Groovy syntax.
- */
-@Deprecated
-class Parser
-{
-    static final String NEWLINE = System.getProperty('line.separator')
-
-    private static final Logger log = Logger.create(Parser)
-
-    private final Parsing delegate
-
-    Parser() {
-        String flavor = Preferences.getParserFlavor()
-
-        log.debug("Using parser flavor: $flavor")
-
-        switch (flavor) {
-            case Preferences.PARSER_RELAXED:
-                delegate = new RelaxedParser()
-                break
-
-            case Preferences.PARSER_RIGID:
-                delegate = new RigidParser()
-                break
-
-            default:
-                log.error("Invalid parser flavor: $flavor; using default: $Preferences.PARSER_RIGID")
-                delegate = new RigidParser()
-                break
-        }
-    }
-
-    ParseStatus parse(final Collection<String> buffer) {
-        return delegate.parse(buffer)
-    }
-}
-
-/**
- * A relaxed parser, which tends to allow more, but won't really catch valid syntax errors.
- */
-@Deprecated
-final class RelaxedParser implements Parsing {
-    private final Logger log = Logger.create(this.class)
-
-    private SourceBuffer sourceBuffer
-
-    private String[] tokenNames
-
-    @Override
-    ParseStatus parse(final Collection<String> buffer) {
-        assert buffer
-
-        sourceBuffer = new SourceBuffer()
-
-        def source = buffer.join(Parser.NEWLINE)
-
-        log.debug("Parsing: $source")
-
-        try {
-            doParse(new UnicodeEscapingReader(new StringReader(source), sourceBuffer))
-
-            log.debug('Parse complete')
-
-            return new ParseStatus(ParseCode.COMPLETE)
-        }
-        catch (e) {
-            switch (e.getClass()) {
-                case TokenStreamException:
-                case RecognitionException:
-                    log.debug("Parse incomplete: $e (${e.getClass().name})")
-
-                    return new ParseStatus(ParseCode.INCOMPLETE)
-
-                default:
-                    log.debug("Parse error: $e (${e.getClass().name})")
-
-                    return new ParseStatus(e)
-            }
-        }
-    }
-
-    protected AST doParse(final UnicodeEscapingReader reader) throws Exception {
-        GroovyLexer lexer = new GroovyLexer(reader)
-        reader.setLexer(lexer)
-
-        def parser = GroovyRecognizer.make(lexer)
-        parser.setSourceBuffer(sourceBuffer)
-        tokenNames = parser.tokenNames
-
-        parser.compilationUnit()
-        return parser.AST
-    }
-}
-
-/**
- * A more rigid parser which catches more syntax errors, but also tends to barf on stuff that is really valid from time to time.
- */
-@Deprecated
-final class RigidParser implements Parsing {
-    private static final Pattern ANNOTATION_PATTERN = Pattern.compile('^@[a-zA-Z_][a-zA-Z_0-9]*(.*)$')
-    static final String SCRIPT_FILENAME = 'groovysh_parse'
-
-    private final Logger log = Logger.create(this.class)
-
-    @Override
-    ParseStatus parse(final Collection<String> buffer) {
-        assert buffer
-
-        String source = buffer.join(Parser.NEWLINE)
-
-        log.debug("Parsing: $source")
-
-        SourceUnit parser
-        Throwable error
-
-        try {
-            parser = SourceUnit.create(SCRIPT_FILENAME, source, /*tolerance*/ 1)
-            parser.getConfiguration().setPluginFactory(ParserPluginFactory.antlr2()) // We have to stick to the old parser before GROOVY-8279 is fixed
-            parser.parse()
-
-            log.debug('Parse complete')
-
-            return new ParseStatus(ParseCode.COMPLETE)
-        }
-        catch (CompilationFailedException e) {
-            // During a shell session often a user will hit enter without having completed a class definition
-            // for the parser this means it will raise some kind of compilation exception.
-            // The following code has to attempt to hide away all such exceptions that are due to the code being
-            // incomplete, but show all exceptions due to the code being incorrect.
-            // Unexpected EOF is most common for incomplete code, however there are several other situations
-            // where the code is incomplete, but the Exception is raised without failedWithUnexpectedEOF().
-
-            // FIXME: Seems like failedWithUnexpectedEOF() is not always set as expected, as in:
-            //
-            // class a {               <--- is true here
-            //    def b() {            <--- is false here :-(
-            //
-
-            if (parser.errorCollector.errorCount > 1 || !parser.failedWithUnexpectedEOF()) {
-
-                // HACK: Super insane hack... we detect a syntax error, but might still ignore
-                // it depending on the line ending
-                if (ignoreSyntaxErrorForLineEnding(buffer[-1].trim()) ||
-                        isAnnotationExpression(e, buffer[-1].trim()) ||
-                        hasUnmatchedOpenBracketOrParen(source)) {
-                    log.debug("Ignoring parse failure; might be valid: $e")
-                } else {
-                    error = e
-                }
-            }
-        }
-        catch (Throwable e) {
-            error = e
-        }
-
-        if (error) {
-            log.debug("Parse error: $error")
-
-            return new ParseStatus(error)
-        }
-        log.debug('Parse incomplete')
-        return new ParseStatus(ParseCode.INCOMPLETE)
-    }
-
-    static boolean ignoreSyntaxErrorForLineEnding(String line) {
-        def final lineEndings = ['{', '[', '(', ',', '.', '-', '+', '/', '*', '%', '&', '|', '?', '<', '>', '=', ':', "'''", '"""', '\\']
-        for (String lineEnding in lineEndings) {
-            if (line.endsWith(lineEnding)) {
-                return true
-            }
-        }
-        return false
-    }
-
-    static boolean hasUnmatchedOpenBracketOrParen(String source) {
-        if (!source) {
-            return false
-        }
-        int parens = 0
-        int brackets = 0
-        for (ch in source) {
-            switch(ch) {
-                case '[': ++brackets; break;
-                case ']': --brackets; break;
-                case '(': ++parens; break;
-                case ')': --parens; break;
-                default:
-                    break
-            }
-        }
-        return (brackets > 0 || parens > 0)
-    }
-
-    static boolean isAnnotationExpression(CompilationFailedException e, String line) {
-        return e.getMessage().contains('unexpected token: @') && ANNOTATION_PATTERN.matcher(line).find()
-    }
-}
-
-/**
- * Container for the parse code.
- */
-@Deprecated
-final class ParseCode {
-    static final ParseCode COMPLETE = new ParseCode(0)
-
-    static final ParseCode INCOMPLETE = new ParseCode(1)
-
-    static final ParseCode ERROR = new ParseCode(2)
-
-    final int code
-
-    private ParseCode(int code) {
-        this.code = code
-    }
-
-    @Override
-    String toString() {
-        return code
-    }
-}
-
-/**
- * Container for parse status details.
- */
-@Deprecated
-final class ParseStatus {
-    final ParseCode code
-
-    final Throwable cause
-
-    ParseStatus(final ParseCode code, final Throwable cause) {
-        this.code = code
-        this.cause = cause
-    }
-
-    ParseStatus(final ParseCode code) {
-        this(code, null)
-    }
-
-    ParseStatus(final Throwable cause) {
-        this(ParseCode.ERROR, cause)
-    }
-}
-
diff --git a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/Shell.groovy b/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/Shell.groovy
deleted file mode 100644
index 3cd034b..0000000
--- a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/Shell.groovy
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.tools.shell
-
-import org.codehaus.groovy.runtime.InvokerHelper
-import org.codehaus.groovy.tools.shell.util.CommandArgumentParser
-import org.codehaus.groovy.tools.shell.util.Logger
-import org.fusesource.jansi.Ansi
-
-import static org.fusesource.jansi.Ansi.ansi
-
-/**
- * A simple shell for invoking commands from a command-line.
- */
-@Deprecated
-class Shell
-{
-    protected final Logger log = Logger.create(this.class)
-
-    final CommandRegistry registry = new CommandRegistry()
-
-    final IO io
-
-    Shell(final IO io) {
-        assert(io != null)
-
-        this.io = io
-    }
-
-    Shell() {
-        this(new IO())
-    }
-
-
-
-    /**
-     * @param line the line to parse
-     * @param parsedArgs accumulate the rest of the line after the command
-     */
-    Command findCommand(final String line, List<String> parsedArgs = null) {
-        assert line
-
-        //
-        // TODO: Introduce something like 'boolean Command.accepts(String)' to ask
-        //       commands if they can take the line?
-        //
-        //       Would like to get '!66' to invoke the 'history recall' bits, but currently has
-        //       to be '! 66' for it to work with an alias like:
-        //
-        //           alias ! history recall
-        //
-        //       Or maybe allow commands to register specific syntax hacks into the registry?
-        //       then ask the registry for the command for a given line?
-        //
-
-        // command id is first word, unless empty
-        Command command = null;
-        List<String> linetokens = line.trim().tokenize()
-        assert linetokens.size() > 0
-
-        if (linetokens[0].length() > 0) {
-            command = registry.find(linetokens[0])
-            if (command != null && linetokens.size() > 1 && parsedArgs != null) {
-                List<String> args = CommandArgumentParser.parseLine(line, parsedArgs == null ? 1 : -1)
-                parsedArgs.addAll(args[1..-1])
-            }
-        }
-        return command
-    }
-
-    boolean isExecutable(final String line) {
-        return findCommand(line) != null
-    }
-
-    Object execute(final String line) {
-        assert line
-
-        List<String> args = []
-        Command command = findCommand(line, args)
-
-        def result = null
-
-        if (command) {
-
-            log.debug("Executing command($command.name): $command; w/args: $args")
-            try {
-                result = command.execute(args)
-            } catch (CommandException e) {
-                io.err.println(ansi().a(Ansi.Attribute.INTENSITY_BOLD).fg(Ansi.Color.RED).a(e.message).reset())
-            }
-            log.debug("Result: ${InvokerHelper.toString(result)}")
-        }
-
-        return result
-    }
-
-    Command register(final Command command) {
-        return registry.register(command)
-    }
-
-    /**
-     * this should probably be deprecated
-     */
-    def leftShift(final String line) {
-        return execute(line)
-    }
-
-
-    Command leftShift(final Command command) {
-        return register(command)
-    }
-}
diff --git a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/ShellRunner.groovy b/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/ShellRunner.groovy
deleted file mode 100644
index 8c49d43..0000000
--- a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/ShellRunner.groovy
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.tools.shell
-
-import org.codehaus.groovy.tools.shell.util.Logger
-
-/**
- * Support for running a {@link Shell}.
- */
-@Deprecated
-abstract class ShellRunner
-    implements Runnable
-{
-    protected final Logger log = Logger.create(this.class)
-
-    final Shell shell
-
-    boolean running = false
-
-    boolean breakOnNull = true
-
-    Closure errorHandler = { e ->
-        log.debug(e)
-
-        running = false
-    }
-
-    protected ShellRunner(final Shell shell) {
-        assert(shell != null)
-
-        this.shell = shell
-    }
-
-    @Override
-    void run() {
-        log.debug('Running')
-
-        running = true
-
-        while (running) {
-            try {
-                running = work()
-            }
-            catch (ExitNotification n) {
-                throw n
-            }
-            catch (Throwable t) {
-                log.debug("Work failed: $t", t)
-
-                if (errorHandler) {
-                    try {
-                        errorHandler.call(t)
-                    } catch (Throwable t2) {
-                        errorHandler(new IllegalArgumentException("Error when handling error: $t.message"))
-                        errorHandler.call(t2)
-                    }
-                }
-            }
-        }
-
-        log.debug('Finished')
-    }
-
-    protected boolean work() {
-        def line = readLine()
-
-        if (log.debugEnabled) {
-            log.debug("Read line: $line")
-        }
-
-        // Stop on null (maybe)
-        if (line == null && breakOnNull) {
-            return false // stop the loop
-        }
-
-        // Ignore empty lines
-        if (line.trim().size() > 0) {
-            shell << line
-        }
-
-        return true
-    }
-
-    protected abstract String readLine()
-}
-
diff --git a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/AliasCommand.groovy b/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/AliasCommand.groovy
deleted file mode 100644
index 427b82f..0000000
--- a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/AliasCommand.groovy
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.tools.shell.commands
-
-import jline.console.completer.Completer
-import org.codehaus.groovy.tools.shell.Command
-import org.codehaus.groovy.tools.shell.CommandSupport
-import org.codehaus.groovy.tools.shell.Groovysh
-import org.codehaus.groovy.tools.shell.completion.CommandNameCompleter
-
-/**
- * The 'alias' command.
- */
-@Deprecated
-class AliasCommand
-    extends CommandSupport
-{
-    public static final String COMMAND_NAME = ':alias'
-
-    AliasCommand(final Groovysh shell) {
-        super(shell, COMMAND_NAME, ':a', )
-    }
-
-    @Override
-    protected List<Completer> createCompleters() {
-        return [
-                new CommandNameCompleter(registry, true),
-                null
-        ]
-    }
-
-    @Override
-    Object execute(final List<String> args) {
-        assert args != null
-
-        if (args.size() < 2) {
-            fail("Command 'alias' requires at least 2 arguments") // TODO: i18n
-        }
-
-        String name = args[0]
-        List target = args[1..-1]
-
-        Command command = registry.find(name)
-
-        if (command == null) {
-            command = registry.find(name)
-        }
-        if (command != null) {
-            if (command instanceof AliasTargetProxyCommand) {
-                log.debug("Rebinding alias: $name")
-
-                registry.remove(command)
-            }
-            else {
-                fail("Can not rebind non-user aliased command: ${command.name}") // TODO: i18n
-            }
-        }
-
-        log.debug("Creating alias '$name' to: $target")
-
-        // Register the command
-        command = shell << new AliasTargetProxyCommand(shell, name, target)
-
-        //
-        // TODO: Should this be here... or should this be in the Shell's impl?
-        //
-
-        // Try to install the completor
-        if (shell.runner) {
-            shell.runner.completer.add(command)
-        }
-    }
-}
-
-class AliasTargetProxyCommand
-    extends CommandSupport implements Command
-{
-    private static int counter = 0
-
-    final List<String> args
-
-    AliasTargetProxyCommand(final Groovysh shell, final String name, final List args) {
-        super(shell, name, ':a' + counter++)
-
-        assert args
-
-        this.args = args
-    }
-
-    @Override
-    String getDescription() {
-        return "User defined alias to: @|bold ${args.join(' ')}|@"
-    }
-
-    @Override
-    String getUsage() {
-        return ''
-    }
-
-    @Override
-    String getHelp() {
-        return description
-    }
-
-    @Override
-    Object execute(final List<String> args) {
-        List<String> allArgs = this.args + args
-
-        log.debug("Executing with args: $allArgs")
-
-        //
-        // FIXME: Should go back through shell.execute() to allow aliases to groovy snips too
-        //
-
-        return shell.executeCommand(allArgs.join(' '))
-    }
-}
diff --git a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/ClearCommand.groovy b/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/ClearCommand.groovy
deleted file mode 100644
index 5728842..0000000
--- a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/ClearCommand.groovy
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.tools.shell.commands
-
-import org.codehaus.groovy.tools.shell.CommandSupport
-import org.codehaus.groovy.tools.shell.Groovysh
-
-/**
- * The 'clear' command.
- */
-@Deprecated
-class ClearCommand
-    extends CommandSupport
-{
-    public static final String COMMAND_NAME = ':clear'
-
-    ClearCommand(final Groovysh shell) {
-        super(shell, COMMAND_NAME, ':c')
-    }
-
-    @Override
-    Object execute(final List<String> args) {
-        assertNoArguments(args)
-
-        buffer.clear()
-
-        if (io.verbose) {
-            io.out.println('Buffer cleared') //  TODO: i18n
-        }
-    }
-}
diff --git a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/DisplayCommand.groovy b/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/DisplayCommand.groovy
deleted file mode 100644
index f49c381..0000000
--- a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/DisplayCommand.groovy
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.tools.shell.commands
-
-import org.codehaus.groovy.tools.shell.CommandSupport
-import org.codehaus.groovy.tools.shell.Groovysh
-
-/**
- * The 'display' command. Displays the current buffer (e.g. while method declaration was not finished).
- */
-@Deprecated
-class DisplayCommand
-    extends CommandSupport
-{
-    public static final String COMMAND_NAME = ':display'
-
-    DisplayCommand(final Groovysh shell) {
-        super(shell, COMMAND_NAME, ':d')
-    }
-
-    @Override
-    Object execute(final List<String> args) {
-        assertNoArguments(args)
-
-        if (buffer.isEmpty()) {
-            io.out.println('Buffer is empty') // TODO: i18n
-        }
-        else {
-            shell.displayBuffer(buffer)
-        }
-    }
-}
diff --git a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/DocCommand.groovy b/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/DocCommand.groovy
deleted file mode 100644
index 7ebe503..0000000
--- a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/DocCommand.groovy
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.tools.shell.commands
-
-import jline.console.completer.Completer
-import org.codehaus.groovy.tools.shell.CommandSupport
-import org.codehaus.groovy.tools.shell.Groovysh
-
-/**
- * The 'doc' command.
- *
- * @since 2.2.0
- */
-@Deprecated
-class DocCommand extends CommandSupport {
-
-    public static final String COMMAND_NAME = ':doc'
-
-    private static final String ENV_BROWSER = 'BROWSER'
-    private static final String ENV_BROWSER_GROOVYSH = 'GROOVYSH_BROWSER'
-
-    private static final int TIMEOUT_CONN = 5 * 1000 // ms
-    private static final int TIMEOUT_READ = 5 * 1000 // ms
-
-    // indicates support for java.awt.Desktop#browse on the current platform
-    private static boolean hasAWTDesktopPlatformSupport
-    private static desktop
-
-    /**
-     * Check for java.awt.Desktop#browse platform support
-     */
-    static {
-        try {
-            def desktopClass = Class.forName('java.awt.Desktop')
-            desktop = desktopClass.desktopSupported ? desktopClass.desktop : null
-
-            hasAWTDesktopPlatformSupport =
-                desktop != null &&
-                        desktop.isSupported(desktopClass.declaredClasses.find { it.simpleName == 'Action' }.BROWSE)
-
-        } catch (Exception e) {
-            hasAWTDesktopPlatformSupport = false
-            desktop = null
-        }
-    }
-
-    DocCommand(final Groovysh shell) {
-        super(shell, COMMAND_NAME, ':D')
-    }
-
-    @Override
-    protected List<Completer> createCompleters() {
-        return [new ImportCompleter(shell.packageHelper, shell.interp, false),
-                null]
-    }
-
-    @Override
-    Object execute(final List<String> args) {
-        if (args?.size() == 1) {
-            doc(args[0])
-            return
-        }
-        fail(messages.format('error.unexpected_args', args ? args.join(' ') : 'no arguments'))
-    }
-
-    void doc(String className) {
-        def normalizedClassName = normalizeClassName(className)
-        def urls = urlsFor(normalizedClassName)
-        if (urls.empty) {
-            fail("Documentation for \"${normalizedClassName}\" could not be found.")
-        }
-
-        // Print the URLs.
-        // It is useful especially when the browsing fails.
-        urls.each { url -> io.out.println url }
-
-        browse(urls)
-    }
-
-    protected String normalizeClassName(String className) {
-        className.replaceAll('"', '').replaceAll("'", '')
-    }
-
-    protected void browse(List urls) {
-        def browser = browserEnvironmentVariable
-
-        // fallback to java.awt.Desktop in case of missing env variable(s)
-        if (browser) {
-            browseWithNativeBrowser(browser, urls)
-        } else if (hasAWTDesktopPlatformSupport) {
-            browseWithAWT(urls)
-        } else {
-            fail 'Browser could not be opened due to missing platform support for "java.awt.Desktop". Please set ' +
-                 "a $ENV_BROWSER_GROOVYSH or $ENV_BROWSER environment variable referring to the browser binary to " +
-                 'solve this issue.'
-        }
-    }
-
-    protected String getBrowserEnvironmentVariable() {
-        System.getenv(ENV_BROWSER_GROOVYSH) ?: System.getenv(ENV_BROWSER)
-    }
-
-    protected void browseWithAWT(List urls) {
-        try {
-            urls.each { url -> desktop.browse(url.toURI()) }
-        } catch (Exception e) {
-            fail "Browser could not be opened, an unexpected error occured (${e}). You can add a " +
-                 "$ENV_BROWSER_GROOVYSH or $ENV_BROWSER environment variable to explicitly specify a browser binary."
-        }
-    }
-
-    protected void browseWithNativeBrowser(String browser, List urls) {
-        try {
-            "$browser ${urls.join(' ')}".execute()
-        } catch (Exception e) {
-            // we could be here caused by a IOException, SecurityException or NP Exception
-            fail "Browser could not be opened (${e}). Please check the $ENV_BROWSER_GROOVYSH or $ENV_BROWSER " +
-                 "environment variable."
-        }
-    }
-
-    protected List urlsFor(String className) {
-        String groovyVersion = GroovySystem.version
-        def path = className.replaceAll(/\./, '/') + '.html'
-
-        def urls = []
-        if (className.matches(/^(groovy|org\.codehaus\.groovy|)\..+/)) {
-            def url = new URL("http://docs.groovy-lang.org/$groovyVersion/html/gapi/$path")
-            if (sendHEADRequest(url)) {
-                urls << url
-            }
-        } else {
-            // Don't specify package names to not depend on a specific version of Java SE.
-            // Java SE includes non-java(x) packages such as org.w3m.*, org.omg.*. org.xml.* for now
-            // and new packages might be added in the future.
-            def url = new URL("http://docs.oracle.com/javase/${simpleVersion()}/docs/api/$path")
-            if (sendHEADRequest(url)) {
-                urls << url
-                url = new URL("http://docs.groovy-lang.org/$groovyVersion/html/groovy-jdk/$path")
-                if (sendHEADRequest(url)) {
-                    urls << url
-                }
-            }
-        }
-
-        urls
-    }
-
-    private static simpleVersion() {
-        String javaVersion = System.getProperty('java.version')
-        if (javaVersion.startsWith('1.')) {
-            javaVersion.split(/\./)[1]
-        } else {
-            // java 9 and above
-            javaVersion.replaceAll(/-.*/, '').split(/\./)[0]
-        }
-    }
-
-    protected boolean sendHEADRequest(URL url) {
-        try {
-            HttpURLConnection conn = url.openConnection() as HttpURLConnection
-            conn.requestMethod = 'HEAD'
-            conn.connectTimeout = TIMEOUT_CONN
-            conn.readTimeout = TIMEOUT_READ
-            conn.instanceFollowRedirects = true
-
-            return conn.responseCode == 200
-
-        } catch (IOException e) {
-            fail "Sending a HEAD request to $url failed (${e}). Please check your network settings."
-        }
-    }
-
-}
-
diff --git a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/EditCommand.groovy b/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/EditCommand.groovy
deleted file mode 100644
index 11ef470..0000000
--- a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/EditCommand.groovy
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.tools.shell.commands
-
-import org.codehaus.groovy.tools.shell.CommandSupport
-import org.codehaus.groovy.tools.shell.Groovysh
-import org.codehaus.groovy.tools.shell.util.Preferences
-
-/**
- * The 'edit' command. Opens Editor to write into the current Buffer.
- */
-@Deprecated
-class EditCommand
-    extends CommandSupport
-{
-    public static final String COMMAND_NAME = ':edit'
-
-    EditCommand(final Groovysh shell) {
-        super(shell, COMMAND_NAME, ':e')
-    }
-
-    ProcessBuilder getEditorProcessBuilder(final String editCommand, final String tempFilename) {
-        def pb = new ProcessBuilder(editCommand, tempFilename)
-
-        // GROOVY-6201: Editor should inherit I/O from the current process.
-        //    Fixed only for java >= 1.7 using new ProcessBuilder api
-        pb.redirectErrorStream(true)
-        def javaVer = Double.valueOf(System.getProperty('java.specification.version'))
-        if (javaVer >= 1.7) {
-            pb.redirectInput(ProcessBuilder.Redirect.INHERIT)
-            pb.redirectOutput(ProcessBuilder.Redirect.INHERIT)
-        }
-
-        return pb
-    }
-
-    private String getEditorCommand() {
-        def editor = Preferences.editor
-
-        log.debug("Using editor: $editor")
-
-        if (!editor) {
-            fail("Unable to determine which editor to use; check \$EDITOR") // TODO: i18n
-        }
-
-        return editor
-    }
-
-    @Override
-    Object execute(final List<String> args) {
-        assertNoArguments(args)
-
-        File file = File.createTempFile('groovysh-buffer', '.groovy')
-        file.deleteOnExit()
-
-        try {
-            // Write the current buffer to a tmp file
-            file.write(buffer.join(NEWLINE))
-
-            //Try to launch the editor.
-            log.debug("Executing: $editorCommand $file")
-            def pb = getEditorProcessBuilder("$editorCommand", "$file")
-            def p = pb.start()
-
-            // Wait for it to finish
-            log.debug("Waiting for process: $p")
-            p.waitFor()
-
-            log.debug("Editor contents: ${file.text}")
-
-            replaceCurrentBuffer(file.readLines())
-        }
-        finally {
-            file.delete()
-        }
-    }
-
-    void replaceCurrentBuffer(List<String> contents) {
-        // clear current buffer contents
-        shell.buffers.clearSelected()
-
-        // load editor contents into current buffer
-        for (String line : contents) {
-            shell.execute(line)
-        }
-    }
-
-}
diff --git a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/ExitCommand.groovy b/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/ExitCommand.groovy
deleted file mode 100644
index 5d75c90..0000000
--- a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/ExitCommand.groovy
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.tools.shell.commands
-
-import org.codehaus.groovy.tools.shell.CommandSupport
-import org.codehaus.groovy.tools.shell.ExitNotification
-import org.codehaus.groovy.tools.shell.Groovysh
-
-/**
- * The 'exit' command.
- */
-@Deprecated
-class ExitCommand
-    extends CommandSupport
-{
-    public static final String COMMAND_NAME = ':exit'
-
-    ExitCommand(final Groovysh shell) {
-        super(shell, COMMAND_NAME, ':x')
-
-        alias(':quit', ':q')
-    }
-
-    @Override
-    Object execute(final List<String> args) {
-        assertNoArguments(args)
-
-        //
-        // TODO: Maybe support a single arg for the code?
-        //
-
-        if (io.verbose) {
-            io.out.println(messages['info.bye'])
-        }
-
-        throw new ExitNotification(0)
-    }
-}
diff --git a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/GrabCommand.groovy b/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/GrabCommand.groovy
deleted file mode 100644
index 15c107a..0000000
--- a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/GrabCommand.groovy
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.tools.shell.commands
-
-import groovy.grape.Grape
-import jline.console.completer.Completer
-import org.codehaus.groovy.tools.GrapeUtil
-import org.codehaus.groovy.tools.shell.CommandSupport
-import org.codehaus.groovy.tools.shell.Groovysh
-
-/**
- * The 'grab' command.
- */
-@Deprecated
-class GrabCommand extends CommandSupport {
-
-    public static final String COMMAND_NAME = ':grab'
-
-    public GrabCommand(Groovysh shell) {
-        super(shell, COMMAND_NAME, ':g')
-    }
-
-    @Override protected List<Completer> createCompleters() { [ null ] }
-
-    @Override Object execute(List<String> args) {
-        validate(args)
-        grab(dependency(args))
-        shell.packageHelper.reset()
-    }
-
-    private void validate(List<String> args) {
-        if ( args?.size() != 1 || 
-             !( args[0] ==~ /^(\w|\.|-)+:(\w|\.|-)+(\w|\.|-)(:+(\w|\.|-|\*)+){0,2}$/ ) ) {
-            fail("usage: @|bold ${COMMAND_NAME}|@ ${usage}")
-        }
-    }
-
-    private String dependency(List<String> args) {
-        validate(args)
-        args[0]
-    }
-
-    private Map<String, Object> dependencyMap(String dependency) {
-        GrapeUtil.getIvyParts(dependency)
-    }
-
-    private void grab(String dependency) {
-        Grape.grab([classLoader: shell.interp.classLoader.parent,
-                    refObject: shell.interp],
-                   dependencyMap(dependency))
-    }
-
-}
diff --git a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/HelpCommand.groovy b/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/HelpCommand.groovy
deleted file mode 100644
index 50100ff..0000000
--- a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/HelpCommand.groovy
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.tools.shell.commands
-
-import jline.console.completer.Completer
-import org.codehaus.groovy.tools.shell.Command
-import org.codehaus.groovy.tools.shell.CommandSupport
-import org.codehaus.groovy.tools.shell.Groovysh
-import org.codehaus.groovy.tools.shell.completion.CommandNameCompleter
-
-/**
- * The 'help' command.
- */
-@Deprecated
-class HelpCommand
-    extends CommandSupport
-{
-
-    public static final String COMMAND_NAME = ':help'
-
-    HelpCommand(final Groovysh shell) {
-        super(shell, COMMAND_NAME, ':h')
-
-        alias('?', ':?')
-    }
-
-    protected List<Completer> createCompleters() {
-        return [
-            new CommandNameCompleter(registry, false),
-            null
-        ]
-    }
-
-    @Override
-    Object execute(final List<String> args) {
-        assert args != null
-
-        if (args.size() > 1) {
-            fail(messages.format('error.unexpected_args', args.join(' ')))
-        }
-
-        if (args.size() == 1) {
-            help(args[0])
-        }
-        else {
-            list()
-        }
-    }
-
-    private void help(final String name) {
-        assert name
-
-        Command command = registry.find(name)
-        if (!command) {
-            fail("No such command: $name") // TODO: i18n
-        }
-
-        io.out.println()
-        io.out.println("usage: @|bold ${command.name}|@ $command.usage") // TODO: i18n
-        io.out.println()
-        io.out.println(command.help)
-        io.out.println()
-    }
-
-    private void list() {
-        // Figure out the max command name and shortcut length dynamically
-        int maxName = 0
-        int maxShortcut
-
-        for (Command command in registry.commands()) {
-            if (command.hidden) {
-                continue
-            }
-
-            if (command.name.size() > maxName) {
-                maxName = command.name.size()
-            }
-
-            if (command.shortcut.size() > maxShortcut) {
-                maxShortcut = command.shortcut.size()
-            }
-        }
-
-        io.out.println()
-        io.out.println('For information about @|green Groovy|@, visit:') // TODO: i18n
-        io.out.println('    @|cyan http://groovy-lang.org|@ ') // FIXME: parsing freaks out if end tok is at the last char...
-        io.out.println()
-
-        // List the commands we know about
-        io.out.println('Available commands:') // TODO: i18n
-
-        for (Command command in registry.commands()) {
-            if (command.hidden) {
-                continue
-            }
-
-            def n = command.name.padRight(maxName, ' ')
-            def s = command.shortcut.padRight(maxShortcut, ' ')
-
-            //
-            // TODO: Wrap description if needed
-            //
-
-            def d = command.description
-
-            io.out.println("  @|bold ${n}|@  (@|bold ${s}|@) $d")
-        }
-
-        io.out.println()
-        io.out.println('For help on a specific command type:') // TODO: i18n
-        io.out.println('    :help @|bold command|@ ')
-        io.out.println()
-    }
-}
-
diff --git a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/HistoryCommand.groovy b/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/HistoryCommand.groovy
deleted file mode 100644
index 0592034..0000000
--- a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/HistoryCommand.groovy
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.tools.shell.commands
-
-import jline.console.history.History
-import org.codehaus.groovy.tools.shell.ComplexCommandSupport
-import org.codehaus.groovy.tools.shell.Groovysh
-import org.codehaus.groovy.tools.shell.util.SimpleCompletor
-
-/**
- * The 'history' command.
- */
-@Deprecated
-class HistoryCommand
-    extends ComplexCommandSupport
-{
-
-    public static final String COMMAND_NAME = ':history'
-
-    HistoryCommand(final Groovysh shell) {
-        super(shell, COMMAND_NAME, ':H', [ 'show', 'clear', 'flush', 'recall' ], 'show')
-    }
-
-    @Override
-    protected List createCompleters() {
-        def loader = {
-            def list = []
-            list.addAll(functions)
-
-            return list
-        }
-
-        SimpleCompletor subCommandsCompletor = new SimpleCompletor(loader)
-        subCommandsCompletor.setWithBlank(false)
-        return [
-            subCommandsCompletor,
-            null
-        ]
-    }
-
-    @Override
-    Object execute(List<String> args) {
-        if (!history) {
-            fail('Shell does not appear to be interactive; Can not query history')
-        }
-
-        super.execute(args)
-
-        // Don't return anything
-        return null
-    }
-
-    def do_show = {
-        Iterator<History.Entry> histIt = history.iterator()
-        while (histIt.hasNext()) {
-            History.Entry next = histIt.next()
-            if (next) {
-                io.out.println(" @|bold ${next.index().toString().padLeft(3, ' ')}|@  ${next.value()}")
-            }
-        }
-    }
-
-    def do_clear = {
-        history.clear()
-
-        if (io.verbose) {
-            io.out.println('History cleared')
-        }
-    }
-
-    def do_flush = {
-        history.flush()
-
-        if (io.verbose) {
-            io.out.println('History flushed')
-        }
-    }
-
-    /**
-     * history show shows a list of indexes and past commands. recall serves to rerun one of those by their index.
-     * There is is moving window of indexes, so the first valid index will usually be greater than zero.
-     */
-    def do_recall = {args ->
-        String line
-
-        if (!args || ((List)args).size() != 1) {
-            fail('History recall requires a single history identifer')
-        }
-
-        String ids = ((List<String>)args)[0]
-
-        //
-        // FIXME: This won't work as desired because the history shifts when we run recall and could internally shift more from alias redirection
-        //
-
-        try {
-            int id = Integer.parseInt(ids)
-            if (shell.historyFull) {
-                // if history was full before execution of the command, then the recall command itself
-                // has been added to history before it actually gets executed
-                // so we need to shift by one
-                id--
-            }
-
-            Iterator<History.Entry> listEntryIt = history.iterator()
-            if (listEntryIt.hasNext()) {
-                History.Entry next = listEntryIt.next()
-                if (id < next.index() -1) {
-                    // not using id on purpose, as might be decremented
-                    fail("Unknown index: $ids")
-                } else if (id == next.index() -1) {
-                    line = shell.evictedLine
-                } else if (next.index() == id) {
-                    line = next.value()
-                } else {
-                    while (listEntryIt.hasNext()) {
-                        next = listEntryIt.next()
-                        if (next.index() == id) {
-                            line = next.value()
-                            break
-                        }
-                    }
-                }
-            }
-
-
-        } catch (NumberFormatException e) {
-            fail("Invalid history identifier: $ids", e)
-        }
-
-        log.debug("Recalling history item #$ids: $line")
-
-        if (line) {
-            return shell.execute(line)
-        }
-    }
-
-}
diff --git a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/ImportCommand.groovy b/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/ImportCommand.groovy
deleted file mode 100644
index a9bb41e..0000000
--- a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/ImportCommand.groovy
+++ /dev/null
@@ -1,264 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.tools.shell.commands
-
-import groovy.transform.CompileStatic
-import jline.console.completer.AggregateCompleter
-import jline.console.completer.Completer
-import jline.console.completer.NullCompleter
-import jline.console.completer.StringsCompleter
-import org.codehaus.groovy.control.CompilationFailedException
-import org.codehaus.groovy.control.ResolveVisitor
-import org.codehaus.groovy.tools.shell.CommandSupport
-import org.codehaus.groovy.tools.shell.Evaluator
-import org.codehaus.groovy.tools.shell.Groovysh
-import org.codehaus.groovy.tools.shell.Interpreter
-import org.codehaus.groovy.tools.shell.completion.ReflectionCompletionCandidate
-import org.codehaus.groovy.tools.shell.completion.ReflectionCompletor
-import org.codehaus.groovy.tools.shell.completion.StricterArgumentCompleter
-import org.codehaus.groovy.tools.shell.util.Logger
-import org.codehaus.groovy.tools.shell.util.PackageHelper
-
-import java.util.regex.Pattern
-
-/**
- * The 'import' command.
- */
-@Deprecated
-class ImportCommand
-    extends CommandSupport
-{
-
-    /**
-     * pattern used to validate the arguments to the import command,
-     * which proxies the Groovy import statement
-     * chars, digits, underscore, dot, star
-     */
-    private static final Pattern IMPORTED_ITEM_PATTERN = ~'[a-zA-Z0-9_. *]+;?$'
-
-    ImportCommand(final Groovysh shell) {
-        super(shell, 'import', ':i')
-    }
-
-    @Override
-    Completer getCompleter() {
-        // need a different completer setup due to static import
-        Completer impCompleter = new StringsCompleter(name + ' ', shortcut + ' ')
-        Completer asCompleter = new StringsCompleter('as ')
-        Completer nullCompleter = new NullCompleter()
-        PackageHelper packageHelper = shell.packageHelper
-        Interpreter interp = shell.interp
-        Completer nonStaticCompleter = new StricterArgumentCompleter([
-                impCompleter,
-                new ImportCompleter(packageHelper, interp, false),
-                asCompleter,
-                nullCompleter])
-        Completer staticCompleter = new StricterArgumentCompleter([
-                impCompleter,
-                new StringsCompleter('static '),
-                new ImportCompleter(packageHelper, interp, true),
-                asCompleter,
-                nullCompleter])
-        Collection<Completer> argCompleters = [
-                nonStaticCompleter,
-                staticCompleter]
-        return new AggregateCompleter(argCompleters)
-
-    }
-
-    Object execute(final List<String> args) {
-        assert args != null
-
-        if (args.isEmpty()) {
-            fail('Command \'import\' requires one or more arguments') // TODO: i18n
-        }
-
-        def importSpec = args.join(' ')
-
-        // technically java conventions don't allow numerics at the start of package/class names so the regex below
-        // is a bit lacking.  this approach works reasonably well ->
-        // "(\\p{javaJavaIdentifierStart}\\p{javaJavaIdentifierPart}*\\.)+((\\p{javaJavaIdentifierStart}\\p{javaJavaIdentifierPart})|\\*)+;?$"
-        // but there's something preventing it from working when class names end in a "d" or "D" like
-        // "java.awt.TextField" so it is not implemented as such here.  Perhaps this could be made to be more
-        // intelligent if someone could figure out why that is happening or could write a nicer batch of regex to
-        // solve the problem
-        if (! (importSpec.matches(IMPORTED_ITEM_PATTERN))) {
-            def msg = "Invalid import definition: '${importSpec}'" // TODO: i18n
-            log.debug(msg)
-            fail(msg)
-        }
-        // remove last semicolon
-        importSpec = importSpec.replaceAll(';', '')
-
-        def buff = [ 'import ' + args.join(' ') ]
-        buff << 'def dummp = false'
-
-        def type
-        try {
-            type = classLoader.parseClass(buff.join(NEWLINE))
-
-            // No need to keep duplicates, but order may be important so remove the previous def, since
-            // the last defined import will win anyways
-
-            if (imports.remove(importSpec)) {
-                log.debug('Removed duplicate import from list')
-            }
-
-            log.debug("Adding import: $importSpec")
-
-            imports.add(importSpec)
-            return imports.join(', ')
-        }
-        catch (CompilationFailedException e) {
-            def msg = "Invalid import definition: '${importSpec}'; reason: $e.message" // TODO: i18n
-            log.debug(msg, e)
-            fail(msg)
-        }
-        finally {
-            // Remove the class generated while testing the import syntax
-            classLoader.removeClassCacheEntry(type?.name)
-        }
-    }
-}
-
-class ImportCompleter implements Completer {
-
-    protected final Logger log = Logger.create(ImportCompleter)
-
-    PackageHelper packageHelper
-    Groovysh shell
-
-    /*
-     * The following rules do not need to work for all thinkable situations,just for all reasonable situations.
-     * In particular the underscore and dollar signs in Class or method names usually indicate something internal,
-     * which we intentionally want to hide in tab completion
-     */
-    // matches fully qualified Classnames with dot at the end
-    private static final Pattern QUALIFIED_CLASS_DOT_PATTERN = ~/^[a-z_]{1}[a-z0-9_]*(\.[a-z0-9_]*)*\.[A-Z][^.]*\.$/
-    // matches empty, packagenames or fully qualified classNames
-    private static final Pattern PACK_OR_CLASSNAME_PATTERN = ~/^([a-z_]{1}[a-z0-9_]*(\.[a-z0-9_]*)*(\.[A-Z][^.]*)?)?$/
-    // matches empty, packagenames or fully qualified classNames without special symbols
-    private static final Pattern PACK_OR_SIMPLE_CLASSNAME_PATTERN = ~'^([a-z_]{1}[a-z0-9_]*(\\.[a-z0-9_]*)*(\\.[A-Z][^.\$_]*)?)?\$'
-    // matches empty, packagenames or fully qualified classNames or fully qualified method names
-    private static final Pattern PACK_OR_CLASS_OR_METHODNAME_PATTERN = ~'^([a-z_]{1}[a-z0-9.]*(\\.[a-z0-9_]*)*(\\.[A-Z][^.\$_]*(\\.[a-zA-Z0-9_]*)?)?)?\$'
-    private static final Pattern LOWERCASE_IMPORT_ITEM_PATTERN = ~/^[a-z0-9.]+$/
-
-    final boolean staticImport
-    final Evaluator interpreter
-
-
-    ImportCompleter(final PackageHelper packageHelper, final Evaluator interp, final boolean staticImport) {
-        this.packageHelper = packageHelper
-        this.staticImport = staticImport
-        this.interpreter = interp
-        this.shell = shell
-    }
-
-    @Override
-    @CompileStatic
-    int complete(final String buffer, final int cursor, final List<CharSequence> result) {
-        String currentImportExpression = buffer ? buffer.substring(0, cursor) : ''
-        if (staticImport) {
-            if (! (currentImportExpression.matches(PACK_OR_CLASS_OR_METHODNAME_PATTERN))) {
-                return -1
-            }
-        } else {
-            if (! (currentImportExpression.matches(PACK_OR_SIMPLE_CLASSNAME_PATTERN))) {
-                return -1
-            }
-        }
-        if (currentImportExpression.contains('..')) {
-            return -1
-        }
-
-        if (currentImportExpression.endsWith('.')) {
-            // no upper case?
-            if (currentImportExpression.matches(LOWERCASE_IMPORT_ITEM_PATTERN)) {
-                Set<String> classnames = packageHelper.getContents(currentImportExpression[0..-2])
-                if (classnames) {
-                    if (staticImport) {
-                        result.addAll(classnames.collect({ String it -> it + '.'}))
-                    } else {
-                        result.addAll(classnames.collect({ String it -> addDotOrBlank(it) }))
-                    }
-                }
-                if (! staticImport) {
-                    result.add('* ')
-                }
-                return currentImportExpression.length()
-            } else if (staticImport && currentImportExpression.matches(QUALIFIED_CLASS_DOT_PATTERN)) {
-                Class clazz = interpreter.evaluate([currentImportExpression[0..-2]]) as Class
-                if (clazz != null) {
-                    Collection<ReflectionCompletionCandidate> members = ReflectionCompletor.getPublicFieldsAndMethods(clazz, '')
-                    result.addAll(members.collect({ ReflectionCompletionCandidate it -> it.value.replace('(', '').replace(')', '') + ' ' }))
-                }
-                result.add('* ')
-                return currentImportExpression.length()
-            }
-            return -1
-        } // endif startswith '.', we have a prefix
-
-        String prefix
-        int lastDot = currentImportExpression.lastIndexOf('.')
-        if (lastDot == -1) {
-            prefix = currentImportExpression
-        } else {
-            prefix = currentImportExpression.substring(lastDot + 1)
-        }
-        String baseString = currentImportExpression.substring(0, Math.max(lastDot, 0))
-
-        // expression could be for Classname, or for static methodname
-        if (currentImportExpression.matches(PACK_OR_CLASSNAME_PATTERN)) {
-            Set<String> candidates = packageHelper.getContents(baseString)
-            if (candidates == null || candidates.size() == 0) {
-                // At least give standard package completion, else static keyword is highly annoying
-                Collection<String> standards = ResolveVisitor.DEFAULT_IMPORTS.findAll({ String it -> it.startsWith(currentImportExpression)})
-                if (standards) {
-                    result.addAll(standards)
-                    return 0
-                }
-                return -1
-            }
-
-            log.debug(prefix)
-            Collection<String> matches = candidates.findAll({ String it -> it.startsWith(prefix) })
-            if (matches) {
-                result.addAll(matches.collect({ String it -> addDotOrBlank(it) }))
-                return lastDot <= 0 ? 0 : lastDot + 1
-            }
-        } else if (staticImport) {
-            Class clazz = interpreter.evaluate([baseString]) as Class
-            if (clazz != null) {
-                Collection<ReflectionCompletionCandidate> members = ReflectionCompletor.getPublicFieldsAndMethods(clazz, prefix)
-                if (members) {
-                    result.addAll(members.collect({ ReflectionCompletionCandidate it -> it.value.replace('(', '').replace(')', '') + ' ' }))
-                    return lastDot <= 0 ? 0 : lastDot + 1
-                }
-            }
-        }
-        return -1
-    }
-
-    private static String addDotOrBlank(final String it) {
-        if (it[0] in 'A' .. 'Z') {
-           return it + ' '
-        }
-        return it + '.'
-    }
-}
diff --git a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/InspectCommand.groovy b/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/InspectCommand.groovy
deleted file mode 100644
index 7242308..0000000
--- a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/InspectCommand.groovy
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.tools.shell.commands
-
-import groovy.inspect.swingui.ObjectBrowser
-import jline.console.completer.Completer
-import org.codehaus.groovy.tools.shell.CommandSupport
-import org.codehaus.groovy.tools.shell.Groovysh
-import org.codehaus.groovy.tools.shell.util.SimpleCompletor
-
-import javax.swing.*
-import java.awt.*
-import java.util.List
-
-/**
- * The 'inspect' command.
- */
-@Deprecated
-class InspectCommand
-    extends CommandSupport
-{
-    public static final String COMMAND_NAME = ':inspect'
-
-    InspectCommand(final Groovysh shell) {
-        super(shell, COMMAND_NAME, ':n')
-    }
-
-    def lafInitialized = false
-    def headless
-
-    @Override
-    protected List<Completer> createCompleters() {
-        return [
-            new InspectCommandCompletor(binding),
-            null
-        ]
-    }
-
-    @Override
-    Object execute(final List<String> args) {
-        assert args != null
-
-        log.debug("Inspecting w/args: $args")
-
-        if (args.size() > 1) {
-            fail(messages.format('error.unexpected_args', args.join(' ')))
-        }
-
-        def subject
-
-        if (args.size() == 1) {
-            subject = binding.variables[args[0]]
-        } else {
-            subject = binding.variables['_']
-        }
-
-        if (!subject) {
-            io.out.println('Subject is null, false or empty; nothing to inspect') // TODO: i18n
-        } else {
-            // Only set LAF once.
-            if (!lafInitialized) {
-                lafInitialized = true
-                try {
-                    UIManager.setLookAndFeel(UIManager.systemLookAndFeelClassName)
-
-                    // The setLAF doesn't throw a HeadlessException on Mac.
-                    // So try really creating a frame.
-                    new java.awt.Frame().dispose()
-
-                    headless = false
-                } catch (HeadlessException he) {
-                    headless = true
-                }
-            }
-
-            if (headless) {
-                io.err.println("@|red ERROR:|@ Running in AWT Headless mode, 'inspect' is not available.")
-                return
-            }
-
-            if (io.verbose) {
-                io.out.println("Launching object browser to inspect: $subject") // TODO: i18n
-            }
-
-            ObjectBrowser.inspect(subject)
-        }
-    }
-}
-
-/**
- * Completor for the 'inspect' command.
- */
-class InspectCommandCompletor
-    extends SimpleCompletor
-{
-    private final Binding binding
-
-    InspectCommandCompletor(final Binding binding) {
-        assert binding
-        this.setWithBlank(false)
-        this.binding = binding
-    }
-
-    @Override
-    SortedSet<String> getCandidates() {
-        SortedSet<String> set = new TreeSet<String>()
-
-        binding.variables.keySet().each {
-            set << it
-        }
-
-        return set
-    }
-}
diff --git a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/LoadCommand.groovy b/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/LoadCommand.groovy
deleted file mode 100644
index 0eb6ceb..0000000
--- a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/LoadCommand.groovy
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.tools.shell.commands
-
-import jline.console.completer.Completer
-import jline.internal.Configuration
-import org.codehaus.groovy.tools.shell.CommandSupport
-import org.codehaus.groovy.tools.shell.Groovysh
-import org.codehaus.groovy.tools.shell.completion.FileNameCompleter
-
-/**
- * The 'load' command.
- */
-@Deprecated
-class LoadCommand extends CommandSupport {
-    public static final String COMMAND_NAME = ':load'
-    private static final boolean isWin = Configuration.isWindows()
-
-    LoadCommand(final Groovysh shell) {
-        super(shell, COMMAND_NAME, ':l')
-        alias('.', ':.')
-    }
-
-    @Override
-    protected List<Completer> createCompleters() {
-        return [new FileNameCompleter(true, true, true)]
-    }
-
-    @Override
-    Object execute(final List<String> args) {
-        assert args != null
-
-        if (args.size() == 0) {
-            fail("Command '$COMMAND_NAME' requires at least one argument") // TODO: i18n
-        }
-
-        for (source in args) {
-            URL url
-            if (isWin) {
-                source = source.replaceAll('\\\\ ', ' ')
-            }
-            log.debug("Attempting to load: \"$source\"")
-            try {
-                url = new URL("$source")
-            }
-            catch (MalformedURLException e) {
-                def file = new File("$source")
-                if (!file.exists()) {
-                    fail("File not found: \"$file\"") // TODO: i18n
-                }
-                url = file.toURI().toURL()
-            }
-
-            load(url)
-        }
-    }
-
-    void load(final URL url) {
-        assert url != null
-
-        if (io.verbose) {
-            io.out.println("Loading: $url")
-        }
-
-        url.eachLine { String it, int lineNumber ->
-            if (lineNumber == 1 && it.startsWith('#!')) {
-                return
-            }
-            shell << it as String
-        }
-    }
-}
diff --git a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/PurgeCommand.groovy b/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/PurgeCommand.groovy
deleted file mode 100644
index 7d87772..0000000
--- a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/PurgeCommand.groovy
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.tools.shell.commands
-
-import org.codehaus.groovy.tools.shell.ComplexCommandSupport
-import org.codehaus.groovy.tools.shell.Groovysh
-import org.codehaus.groovy.tools.shell.util.Preferences
-
-/**
- * The 'purge' command.
- */
-@Deprecated
-class PurgeCommand
-    extends ComplexCommandSupport
-{
-    public static final String COMMAND_NAME = ':purge'
-
-    PurgeCommand(final Groovysh shell) {
-        super(shell, COMMAND_NAME, ':p', [ 'variables', 'classes', 'imports', 'preferences', 'all' ])
-    }
-
-    def do_variables = {
-        if (variables.isEmpty()) {
-            io.out.println('No variables defined') // TODO: i18n
-        }
-        else {
-            variables.clear()
-
-            if (io.verbose) {
-                io.out.println('Custom variables purged') // TODO: i18n
-            }
-        }
-    }
-
-    def do_classes = {
-        if (classLoader.loadedClasses.size() == 0) {
-            io.out.println('No classes have been loaded') // TODO: i18n
-        }
-        else {
-            classLoader.clearCache()
-
-            if (io.verbose) {
-                io.out.println('Loaded classes purged') // TODO: i18n
-            }
-        }
-    }
-
-    def do_imports = {
-        if (imports.isEmpty()) {
-            io.out.println('No custom imports have been defined') // TODO: i18n
-        }
-        else {
-            imports.clear()
-
-            if (io.verbose) {
-                io.out.println('Custom imports purged') // TODO: i18n
-            }
-        }
-    }
-
-    def do_preferences = {
-        Preferences.clear()
-
-        if (io.verbose) {
-            io.out.println('Preferences purged') // TODO: i18n
-        }
-    }
-}
-
diff --git a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/RecordCommand.groovy b/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/RecordCommand.groovy
deleted file mode 100644
index 4da47c4..0000000
--- a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/RecordCommand.groovy
+++ /dev/null
@@ -1,139 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.tools.shell.commands
-
-import org.codehaus.groovy.runtime.InvokerHelper
-import org.codehaus.groovy.tools.shell.ComplexCommandSupport
-import org.codehaus.groovy.tools.shell.Groovysh
-
-/**
- * The 'record' command.
- */
-@Deprecated
-class RecordCommand
-    extends ComplexCommandSupport
-{
-    public static final String COMMAND_NAME = ':record'
-
-    RecordCommand(final Groovysh shell) {
-        super(shell, COMMAND_NAME, ':r', [ 'start', 'stop', 'status' ], 'status')
-
-        addShutdownHook {
-            if (isRecording()) {
-                this.do_stop()
-            }
-        }
-    }
-
-    private File file
-
-    private PrintWriter writer
-
-    boolean isRecording() {
-        return file != null
-    }
-
-    def recordInput(final String line) {
-        assert line != null
-
-        if (isRecording()) {
-            writer.println(line)
-            writer.flush()
-        }
-    }
-
-    def recordResult(final Object result) {
-        // result maybe null
-
-        if (isRecording()) {
-            writer.println("// RESULT: ${InvokerHelper.toString(result)}")
-            writer.flush()
-        }
-    }
-
-    def recordError(final Throwable cause) {
-        assert cause != null
-
-        if (isRecording()) {
-            writer.println("// ERROR: $cause")
-
-            cause.stackTrace.each {
-                writer.println("//    $it")
-            }
-
-            writer.flush()
-        }
-    }
-
-    def do_start = {List<String> args ->
-        if (isRecording()) {
-            fail("Already recording to: \"$file\"")
-        }
-
-        if (args.size() == 0) {
-            file = File.createTempFile('groovysh-', '.txt')
-        } else if (args.size() == 1) {
-            file = new File(args[0] as String)
-        } else {
-            fail('Too many arguments. Usage: record start [filename]')
-        }
-
-        if (file.parentFile) file.parentFile.mkdirs()
-
-        writer = file.newPrintWriter()
-        writer.println('// OPENED: ' + new Date())
-        writer.flush()
-
-        io.out.println("Recording session to: \"$file\"")
-
-        return file
-    }
-
-    def do_stop = {
-        if (!isRecording()) {
-            fail('Not recording')
-        }
-
-        writer.println('// CLOSED: ' + new Date())
-        writer.flush()
-
-        writer.close()
-        writer = null
-
-        io.out.println("Recording stopped; session saved as: \"$file\" (${file.length()} bytes)")
-
-        def tmp = file
-        file = null
-
-        return tmp
-    }
-
-    def do_status = {
-        if (!isRecording()) {
-            io.out.println('Not recording')
-
-            return null
-        }
-
-        io.out.println("Recording to file: \"$file\" (${file.length()} bytes)")
-
-        return file
-    }
-}
-
diff --git a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/RegisterCommand.groovy b/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/RegisterCommand.groovy
deleted file mode 100644
index fc0de96..0000000
--- a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/RegisterCommand.groovy
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.tools.shell.commands
-
-import org.codehaus.groovy.tools.shell.Command
-import org.codehaus.groovy.tools.shell.CommandSupport
-import org.codehaus.groovy.tools.shell.Groovysh
-
-/**
- * The 'register' command.
- * Registers a class as a new groovysh command.
- * Requires the command to have matching constructors (shell) or (shell, name, alias).
- */
-@Deprecated
-class RegisterCommand
-    extends CommandSupport
-{
-    static final String COMMAND_NAME = ':register'
-
-    RegisterCommand(final Groovysh shell) {
-        super(shell, COMMAND_NAME, ':rc')
-    }
-
-    @Override
-    Object execute(final List<String> args) {
-        assert args != null
-
-        if (args.size() < 1) {
-            fail("Command '$COMMAND_NAME' requires at least 1 arguments") // TODO: i18n
-        }
-
-        String classname = args.get(0)
-
-        Class type = classLoader.loadClass(classname)
-
-        Command command = null
-
-        if (args.size() == 1) {                   // use default name
-            command = type.newInstance(shell) as Command
-        }
-        else if (args.size() == 2) {              // pass name to completor
-            command = type.newInstance(shell, args.get(1), null) as Command
-        }
-        else if (args.size() == 3) {              // pass name, alias to completor
-            command = type.newInstance(shell, args.get(1), args.get(2)) as Command
-        }
-
-        def oldcommand = registry[command.name]   // let's prevent collisions
-
-        if (oldcommand) {
-            fail("Can not rebind command: ${command.name}") // TODO: i18n
-        }
-
-        if (log.debugEnabled) {
-            log.debug("Created command '${command.name}': $command")
-        }
-
-        command = shell << command
-
-        if (shell.runner) {
-            shell.runner.completer.add(command)
-        }
-    }
-}
diff --git a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/SaveCommand.groovy b/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/SaveCommand.groovy
deleted file mode 100644
index f7ed5ca..0000000
--- a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/SaveCommand.groovy
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.tools.shell.commands
-
-import jline.console.completer.Completer
-import jline.console.completer.FileNameCompleter
-import org.codehaus.groovy.tools.shell.CommandSupport
-import org.codehaus.groovy.tools.shell.Groovysh
-
-/**
- * The 'save' command.
- */
-@Deprecated
-class SaveCommand
-    extends CommandSupport
-{
-    public static final String COMMAND_NAME = ':save'
-
-    SaveCommand(final Groovysh shell) {
-        super(shell, COMMAND_NAME, ':s')
-    }
-
-    @Override
-    protected List<Completer> createCompleters() {
-        return [
-            new FileNameCompleter(),
-            null
-        ]
-    }
-
-    @Override
-    Object execute(final List<String> args) {
-        assert args != null
-
-        if (args.size() != 1) {
-            fail("Command '$COMMAND_NAME' requires a single file argument") // TODO: i18n
-        }
-
-        if (buffer.isEmpty()) {
-            io.out.println('Buffer is empty') // TODO: i18n
-            return
-        }
-
-        //
-        // TODO: Support special '-' file to simply dump text to io.out
-        //
-
-        def file = new File("${args[0]}")
-
-        if (io.verbose) {
-            io.out.println("Saving current buffer to file: \"$file\"") // TODO: i18n
-        }
-
-        def dir = file.parentFile
-        if (dir && !dir.exists()) {
-            log.debug("Creating parent directory path: \"$dir\"")
-
-            dir.mkdirs()
-        }
-
-        file.write(buffer.join(NEWLINE))
-    }
-}
diff --git a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/SetCommand.groovy b/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/SetCommand.groovy
deleted file mode 100644
index b031c3a..0000000
--- a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/SetCommand.groovy
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.tools.shell.commands
-
-import jline.console.completer.Completer
-import org.codehaus.groovy.tools.shell.CommandSupport
-import org.codehaus.groovy.tools.shell.Groovysh
-import org.codehaus.groovy.tools.shell.util.PackageHelper
-import org.codehaus.groovy.tools.shell.util.Preferences
-import org.codehaus.groovy.tools.shell.util.SimpleCompletor
-
-/**
- * The 'set' command, used to set preferences.
- */
-@Deprecated
-class SetCommand
-    extends CommandSupport
-{
-    public static final String COMMAND_NAME = ':set'
-
-    SetCommand(final Groovysh shell) {
-        super(shell, COMMAND_NAME, ':=')
-    }
-
-    @Override
-    protected List<Completer> createCompleters() {
-        def loader = {
-            Set<String> set = [] as Set<String>
-
-            String[] keys = Preferences.keys()
-
-            keys.each { String key -> set.add(key) }
-
-            set << Preferences.VERBOSITY_KEY
-            set << Preferences.EDITOR_KEY
-            set << Preferences.PARSER_FLAVOR_KEY
-            set << Preferences.SANITIZE_STACK_TRACE_KEY
-            set << Preferences.SHOW_LAST_RESULT_KEY
-            set << Groovysh.INTERPRETER_MODE_PREFERENCE_KEY
-            set << Groovysh.AUTOINDENT_PREFERENCE_KEY
-            set << Groovysh.COLORS_PREFERENCE_KEY
-            set << Groovysh.METACLASS_COMPLETION_PREFIX_LENGTH_PREFERENCE_KEY
-            set << PackageHelper.IMPORT_COMPLETION_PREFERENCE_KEY
-
-            return set.toList()
-        }
-
-        return [
-            new SimpleCompletor(loader),
-            null
-        ]
-    }
-
-    @Override
-    Object execute(final List<String> args) {
-        assert args != null
-
-        if (args.size() == 0) {
-            def keys = Preferences.keys()
-
-            if (keys.size() == 0) {
-                io.out.println('No preferences are set')
-                return
-            }
-
-            io.out.println('Preferences:')
-            keys.each { String key ->
-                def keyvalue = Preferences.get(key, null)
-                io.out.println("    $key=$keyvalue")
-            }
-            return
-        }
-
-        if (args.size() > 2) {
-            fail("Command '$name' requires arguments: <name> [<value>]")
-        }
-
-        String name = args[0]
-        def value
-
-        if (args.size() == 1) {
-            value = true
-        }
-        else {
-            value = args[1]
-        }
-
-        log.debug("Setting preference: $name=$value")
-
-        Preferences.put(name, String.valueOf(value))
-    }
-}
diff --git a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/ShadowCommand.groovy b/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/ShadowCommand.groovy
deleted file mode 100644
index ee9505b..0000000
--- a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/ShadowCommand.groovy
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.tools.shell.commands
-
-import org.codehaus.groovy.tools.shell.ComplexCommandSupport
-import org.codehaus.groovy.tools.shell.Groovysh
-import org.codehaus.groovy.tools.shell.IO
-import org.codehaus.groovy.tools.shell.util.Preferences
-
-/**
- * The 'shadow' command.
- */
-@Deprecated
-class ShadowCommand
-    extends ComplexCommandSupport
-{
-    public static final String COMMAND_NAME = ':shadow'
-
-    ShadowCommand(final Groovysh shell) {
-        super(shell, COMMAND_NAME, ':&', [ 'debug', 'verbose', 'info', 'this' ])
-        
-        this.hidden = true
-    }
-    
-    def do_debug = {
-        Preferences.verbosity = IO.Verbosity.DEBUG
-    }
-    
-    def do_verbose = {
-        Preferences.verbosity = IO.Verbosity.VERBOSE
-    }
-
-    def do_info = {
-        Preferences.verbosity = IO.Verbosity.INFO
-    }
-
-    def do_this = {
-        return this
-    }
-}
-
diff --git a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/ShowCommand.groovy b/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/ShowCommand.groovy
deleted file mode 100644
index d3362b6..0000000
--- a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/commands/ShowCommand.groovy
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.tools.shell.commands
-
-import org.codehaus.groovy.runtime.InvokerHelper
-import org.codehaus.groovy.runtime.MethodClosure
-import org.codehaus.groovy.tools.shell.ComplexCommandSupport
-import org.codehaus.groovy.tools.shell.Groovysh
-import org.codehaus.groovy.tools.shell.util.Preferences
-
-/**
- * The 'show' command.
- */
-@Deprecated
-class ShowCommand
-    extends ComplexCommandSupport
-{
-    public static final String COMMAND_NAME = ':show'
-
-    ShowCommand(final Groovysh shell) {
-        super(shell, COMMAND_NAME, ':S', [ 'variables', 'classes', 'imports', 'preferences', 'all' ])
-    }
-
-    def do_variables = {
-        if (variables.isEmpty()) {
-            io.out.println('No variables defined') // TODO: i18n
-        }
-        else {
-            io.out.println('Variables:') // TODO: i18n
-
-            variables.each { key, value ->
-                // Special handling for defined methods, just show the sig
-                if (value instanceof MethodClosure) {
-                    //
-                    // TODO: Would be nice to show the argument types it will accept...
-                    //
-                    value = "method ${value.method}()"
-                }
-
-                io.out.println("  $key = ${InvokerHelper.toString(value)}")
-            }
-        }
-    }
-
-    def do_classes = {
-        Class[] classes = classLoader.loadedClasses
-
-        if (classes.size() == 0) {
-            io.out.println('No classes have been loaded') // TODO: i18n
-        }
-        else {
-            io.out.println('Classes:') // TODO: i18n
-
-            classes.each { Class classIt ->
-                io.out.println("  $classIt")
-            }
-        }
-    }
-
-    def do_imports = {
-        if (imports.isEmpty()) {
-            io.out.println('No custom imports have been defined') // TODO: i18n
-        }
-        else {
-            io.out.println('Custom imports:') // TODO: i18n
-
-            imports.each {String importIt ->
-                io.out.println("  $importIt")
-            }
-        }
-    }
-
-    def do_preferences = {
-        String[] keys = Preferences.keys()
-
-        if (keys.size() == 0) {
-            io.out.println('No preferences are set')
-            return
-        }
-
-        io.out.println('Preferences:')
-        keys.each { String key ->
-            def value = Preferences.get(key, null)
-            io.out.println("    $key=$value")
-        }
-        return
-    }
-}
-
diff --git a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/completion/BackslashEscapeCompleter.groovy b/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/completion/BackslashEscapeCompleter.groovy
deleted file mode 100644
index 6b5a55e..0000000
--- a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/completion/BackslashEscapeCompleter.groovy
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.tools.shell.completion
-
-import jline.console.completer.Completer
-
-import static jline.internal.Preconditions.checkNotNull
-
-/**
- * A completer within compatible strings (single/double quotes, single/double triple quotes)
- * showing informational alternatives that can occur after the backslash escape character.
- * No completion occurs and the cursor remains where it is.
- *
- * @since 2.4.13
- */
-@Deprecated
-class BackslashEscapeCompleter implements Completer {
-    private static final List<String> VALID_ESCAPEES = ['r (return)', 'n (newline)', 't (tab)',
-                                                        '\\ (backslash)', "' (single quote)", '" (double quote)',
-                                                        'b (backspace)', 'f (formfeed)', 'uXXXX (unicode)']
-
-    @Override
-    int complete(String buffer, final int cursor, final List<CharSequence> candidates) {
-        checkNotNull(candidates)
-        candidates.addAll(VALID_ESCAPEES)
-        return cursor
-    }
-}
diff --git a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/completion/CommandNameCompleter.groovy b/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/completion/CommandNameCompleter.groovy
deleted file mode 100644
index 92a92cd..0000000
--- a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/completion/CommandNameCompleter.groovy
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.tools.shell.completion
-
-import org.codehaus.groovy.tools.shell.Command
-import org.codehaus.groovy.tools.shell.CommandRegistry
-import org.codehaus.groovy.tools.shell.util.SimpleCompletor
-
-/**
- * Completor for the command.names
- */
-@Deprecated
-class CommandNameCompleter extends SimpleCompletor {
-    private final CommandRegistry registry
-
-    CommandNameCompleter(final CommandRegistry registry, boolean withBlank) {
-        assert registry
-        setWithBlank(withBlank)
-        this.registry = registry
-    }
-
-    @Override
-    SortedSet<String> getCandidates() {
-        SortedSet<String> set = new TreeSet<String>()
-
-        for (Command command in registry.commands()) {
-            if (command.hidden) {
-                continue
-            }
-
-            set << command.name
-            set << command.shortcut
-        }
-
-        return set
-    }
-}
diff --git a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/completion/CustomClassSyntaxCompletor.groovy b/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/completion/CustomClassSyntaxCompletor.groovy
deleted file mode 100644
index 26c7292..0000000
--- a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/completion/CustomClassSyntaxCompletor.groovy
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.tools.shell.completion
-
-import org.codehaus.groovy.antlr.GroovySourceToken
-import org.codehaus.groovy.tools.shell.Groovysh
-
-/**
- * Completor completingclasses defined in the shell
- */
-@Deprecated
-class CustomClassSyntaxCompletor implements IdentifierCompletor {
-
-    private final Groovysh shell
-
-    CustomClassSyntaxCompletor(final Groovysh shell) {
-        this.shell = shell
-    }
-
-    @Override
-    boolean complete(final List<GroovySourceToken> tokens, final List<CharSequence> candidates) {
-        String prefix = tokens.last().text
-        boolean foundMatch = false
-        Class[] classes = shell.interp.classLoader.loadedClasses
-        if (classes.size() > 0) {
-            List<String> classnames = classes*.name
-            for (String varName in classnames) {
-                if (varName.startsWith(prefix)) {
-                    candidates << varName
-                    foundMatch = true
-                }
-            }
-        }
-        return foundMatch
-    }
-}
diff --git a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/completion/FileNameCompleter.groovy b/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/completion/FileNameCompleter.groovy
deleted file mode 100644
index 79178b4..0000000
--- a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/completion/FileNameCompleter.groovy
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.tools.shell.completion
-
-import groovy.transform.PackageScope
-import jline.internal.Configuration
-
-import static jline.internal.Preconditions.checkNotNull
-
-/**
- * A file name completer takes the buffer and issues a list of
- * potential completions.
- * <p/>
- * This completer tries to behave as similar as possible to
- * <i>bash</i>'s file name completion (using GNU readline)
- * with the following exceptions:
- * <p/>
- * <ul>
- * <li>Candidates that are directories will end with "File.separator"</li>
- * <li>Wildcard regular expressions are not evaluated or replaced</li>
- * <li>The "~" character can be used to represent the user's home directory.
- * It cannot fully complete to other users' homes in all operating systems, since java does
- * not provide any way of determining that easily, but it will attempt a simplistic approach.</li>
- * </ul>
- *
- * @since 2.3
- */
-@Deprecated
-class FileNameCompleter extends jline.console.completer.FileNameCompleter {
-    private static final boolean OS_IS_WINDOWS = Configuration.isWindows()
-    private final GroovyShell gs = new GroovyShell()
-
-    FileNameCompleter(boolean printSpaceAfterFullCompletion = true, boolean escapeBackslash = false,
-                      boolean escapeSpaces = true) {
-        this.printSpaceAfterFullCompletion = printSpaceAfterFullCompletion
-        this.escapeBackslash = escapeBackslash
-        if (OS_IS_WINDOWS) separator = escapeBackslash ? "\\\\" : "\\"
-        this.escapeSpaces = escapeSpaces
-    }
-
-    private static boolean isWindowsSubsystemForLinux() {
-        System.getProperty("os.name").contains('Linux') && System.getProperty('os.version').contains('Microsoft')
-    }
-
-    /**
-     * True for say, a command-line arg, false for instance inside a String.
-     */
-    boolean printSpaceAfterFullCompletion
-
-    /**
-     * If the filename will be placed inside a single/double quoted String we must escape backslash when on e.g. Windows.
-     */
-    boolean escapeBackslash
-
-    /**
-     * Set false if e.g. the filename will be inside a String. Should not be true if quoteFilenamesWithSpaces is true.
-     */
-    boolean escapeSpaces
-
-    private String separator
-
-    @Override
-    int complete(String buffer, final int cursor, final List<CharSequence> candidates) {
-        checkNotNull(candidates)
-
-        buffer = buffer ?: ""
-        String translated = buffer
-        int adjustment = 0
-        if (escapeBackslash) {
-            translated = gs.evaluate("'$translated'")
-            adjustment = buffer.size() - translated.size()
-        }
-
-        // Special character: ~ maps to the user's home directory in most OSs
-        if (translated.startsWith("~")) {
-            File homeDir = getUserHome()
-            if ((OS_IS_WINDOWS || isWindowsSubsystemForLinux()) && (translated.equals("~" + separator()) || translated.equals("~/"))) {
-                // for windows ~ isn't recognized at the file system level so replace
-                def adjustSize = translated.size()
-                String result
-                String temp = (homeDir.path + translated.substring(separator().size())).toString().replace('"', '\\"').replace('\'', '\\\'')
-                if (escapeBackslash) {
-                    temp = temp.replace('\\', '\\\\')
-                }
-                result = escapeSpaces ? temp.replace(' ', '\\ ') : temp
-                candidates << result
-                return cursor - adjustSize - adjustment
-            } else if (translated.startsWith("~/")) {
-                translated = homeDir.path + translated.substring(2)
-            } else {
-                translated = homeDir.parentFile.absolutePath + separator() + translated.substring(1)
-            }
-        } else if (!(new File(translated).canonicalFile.exists()) && !(new File(translated).canonicalFile.parentFile?.exists())) {
-            String cwd = getUserDir().absolutePath
-            translated = cwd + separator() + translated
-        }
-
-        File file = new File(translated)
-        final File dir
-
-        if ((OS_IS_WINDOWS && translated.endsWith(separator())) || translated.endsWith('/')) {
-            dir = file
-        } else {
-            dir = file.parentFile
-        }
-
-        File[] entries = (dir == null) ? new File[0] : dir.listFiles()
-
-        return matchFiles(buffer, translated, entries, candidates)
-    }
-
-    private static String canonicalForm(String raw) {
-        String result = raw.replace('\\', '/')
-        OS_IS_WINDOWS ? result.toLowerCase() : result
-    }
-
-    protected int matchFiles(final String buffer, final String translated, final File[] files,
-                             final List<CharSequence> candidates) {
-        if (files == null) return -1
-        for (File file : files) {
-            if (canonicalForm(file.getAbsolutePath()).startsWith(canonicalForm(translated))) {
-                CharSequence name = file.name
-                String renderedName = render(name).toString()
-                if (file.isDirectory()) {
-                    renderedName += separator
-                } else {
-                    if (printSpaceAfterFullCompletion) {
-                        renderedName += ' '
-                    }
-                }
-                candidates.add(renderedName)
-            }
-        }
-
-        int index = -1
-        int sizeAdjust = 0
-        if (separator) {
-            index = buffer.lastIndexOf(separator)
-            sizeAdjust = separator.size()
-        }
-        int slashIndex = buffer.lastIndexOf('/')
-        if (slashIndex >= 0 && slashIndex > index) {
-            index = slashIndex
-            sizeAdjust = 1
-        }
-        return index + sizeAdjust
-    }
-
-    @PackageScope CharSequence render(CharSequence name) {
-        String temp = name.toString().replace('"', '\\"').replace('\'', '\\\'')
-        if (escapeBackslash) {
-            temp = temp.replace('\\', '\\\\')
-        }
-        escapeSpaces ? temp.replace(' ', '\\ ') : temp
-    }
-}
diff --git a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/completion/GroovySyntaxCompletor.groovy b/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/completion/GroovySyntaxCompletor.groovy
deleted file mode 100644
index 5ba3104..0000000
--- a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/completion/GroovySyntaxCompletor.groovy
+++ /dev/null
@@ -1,375 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.tools.shell.completion
-
-import antlr.TokenStreamException
-import groovy.transform.TupleConstructor
-import jline.console.completer.Completer
-import jline.internal.Configuration
-import org.codehaus.groovy.antlr.GroovySourceToken
-import org.codehaus.groovy.antlr.SourceBuffer
-import org.codehaus.groovy.antlr.UnicodeEscapingReader
-import org.codehaus.groovy.antlr.parser.GroovyLexer
-import org.codehaus.groovy.tools.shell.CommandRegistry
-import org.codehaus.groovy.tools.shell.Groovysh
-import org.codehaus.groovy.tools.shell.util.Logger
-
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.DOT
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.EOF
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.IDENT
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.LITERAL_as
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.LITERAL_boolean
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.LITERAL_byte
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.LITERAL_catch
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.LITERAL_char
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.LITERAL_class
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.LITERAL_def
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.LITERAL_double
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.LITERAL_enum
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.LITERAL_false
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.LITERAL_finally
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.LITERAL_float
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.LITERAL_import
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.LITERAL_instanceof
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.LITERAL_int
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.LITERAL_interface
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.LITERAL_long
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.LITERAL_package
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.LITERAL_short
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.LITERAL_this
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.LITERAL_true
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.LITERAL_try
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.LITERAL_void
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.OPTIONAL_DOT
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.SPREAD_DOT
-
-/**
- * Implements the Completor interface to provide competions for
- * GroovyShell by tokenizing the buffer and invoking other classes depending on the tokens found.
- */
-@Deprecated
-class GroovySyntaxCompletor implements Completer {
-
-    protected final static Logger LOG = Logger.create(GroovySyntaxCompletor)
-
-    private final Groovysh shell
-    private final List<IdentifierCompletor> identifierCompletors
-    private final IdentifierCompletor classnameCompletor
-    private final ReflectionCompletor reflectionCompletor
-    private final InfixKeywordSyntaxCompletor infixCompletor
-    private final Completer defaultFilenameCompletor
-    private final Completer windowsFilenameCompletor
-    private final Completer instringFilenameCompletor
-    private final Completer backslashCompletor
-    private static final boolean isWin = Configuration.isWindows()
-    private final GroovyShell gs = new GroovyShell()
-
-    static enum CompletionCase {
-        SECOND_IDENT,
-        NO_COMPLETION,
-        DOT_LAST,
-        SPREAD_DOT_LAST,
-        PREFIX_AFTER_DOT,
-        PREFIX_AFTER_SPREAD_DOT,
-        NO_DOT_PREFIX,
-        INSTANCEOF
-    }
-
-    GroovySyntaxCompletor(final Groovysh shell,
-                          final ReflectionCompletor reflectionCompletor,
-                          IdentifierCompletor classnameCompletor,
-                          final List<IdentifierCompletor> identifierCompletors,
-                          final Completer filenameCompletor) {
-        this.shell = shell
-        this.classnameCompletor = classnameCompletor
-        this.identifierCompletors = identifierCompletors
-        infixCompletor = new InfixKeywordSyntaxCompletor()
-        backslashCompletor = new BackslashEscapeCompleter()
-        this.reflectionCompletor = reflectionCompletor
-        defaultFilenameCompletor = filenameCompletor
-        windowsFilenameCompletor = new FileNameCompleter(false, true, false)
-        instringFilenameCompletor = new FileNameCompleter(false, false, false)
-    }
-
-    @Override
-    int complete(final String bufferLine, final int cursor, final List<CharSequence> candidates) {
-        if (!bufferLine) {
-            return -1
-        }
-        if (isCommand(bufferLine, shell.registry)) {
-            return -1
-        }
-        // complete given the context of the whole buffer, not just last line
-        // Build a single string for the lexer
-        List<GroovySourceToken> tokens = []
-        try {
-            if (!tokenizeBuffer(bufferLine.substring(0, cursor), shell.buffers.current(), tokens)) {
-                return -1
-            }
-        } catch (InStringException ise) {
-            int completionStart = ise.column + ise.openDelim.size()
-            def remainder = bufferLine.substring(completionStart)
-            def completer = instringFilenameCompletor
-            if (['"', "'", '"""', "'''"].contains(ise.openDelim)) {
-                if (isWin) {
-                    completer = windowsFilenameCompletor
-                }
-                // perhaps a backslash
-                if (remainder.contains("\\")) {
-                    try {
-                        gs.evaluate("'$remainder'")
-                    } catch (Exception ex1) {
-                        try {
-                            gs.evaluate("'${remainder.substring(0, remainder.size() - 1)}'")
-                            // only get here if there is an unescaped backslash at the end of the buffer
-                            // ignore the result since it is only informational
-                            return backslashCompletor.complete(remainder, cursor, candidates)
-                        } catch (Exception ex2) {
-                        }
-                    }
-                }
-            }
-            int completionResult = completer.complete(remainder, cursor - completionStart, candidates)
-            if (completionResult >= 0) {
-                return completionStart + completionResult
-            }
-            return completionResult
-        }
-
-        CompletionCase completionCase = getCompletionCase(tokens)
-        if (completionCase == CompletionCase.NO_COMPLETION) {
-            return -1
-        }
-        if (completionCase == CompletionCase.SECOND_IDENT) {
-            if (infixCompletor.complete(tokens, candidates)) {
-                return tokens.last().column - 1
-            }
-            return -1
-        }
-        if (completionCase == CompletionCase.INSTANCEOF) {
-            if (classnameCompletor.complete(tokens, candidates)) {
-                return tokens.last().column - 1
-            }
-            return -1
-        }
-
-
-        int result
-        switch (completionCase) {
-            case CompletionCase.NO_DOT_PREFIX:
-                result = completeIdentifier(tokens, candidates)
-                break
-            case CompletionCase.DOT_LAST:
-            case CompletionCase.PREFIX_AFTER_DOT:
-            case CompletionCase.SPREAD_DOT_LAST:
-            case CompletionCase.PREFIX_AFTER_SPREAD_DOT:
-                result = reflectionCompletor.complete(tokens, candidates)
-                break
-            default:
-                // bug
-                throw new RuntimeException("Unknown Completion case: $completionCase")
-
-        }
-        return result
-    }
-
-    static CompletionCase getCompletionCase(final List<GroovySourceToken> tokens) {
-        GroovySourceToken currentToken = tokens[-1]
-
-        // now look at last 2 tokens to decide whether we are in a completion situation at all
-        if (currentToken.type == IDENT) {
-            // cursor is on identifier, use it as prefix and check whether it follows a dot
-
-            if (tokens.size() == 1) {
-                return CompletionCase.NO_DOT_PREFIX
-            }
-            GroovySourceToken previousToken = tokens[-2]
-            if (previousToken.type == DOT || previousToken.type == OPTIONAL_DOT) {
-                // we have a dot, so need to evaluate the statement up to the dot for completion
-                if (tokens.size() < 3) {
-                    return CompletionCase.NO_COMPLETION
-                }
-                return CompletionCase.PREFIX_AFTER_DOT
-            } else if (previousToken.type == SPREAD_DOT) {
-                // we have a dot, so need to evaluate the statement up to the dot for completion
-                if (tokens.size() < 3) {
-                    return CompletionCase.NO_COMPLETION
-                }
-                return CompletionCase.PREFIX_AFTER_SPREAD_DOT
-            } else {
-                // no dot, so we complete a varname, classname, or similar
-                switch (previousToken.type) {
-                // if any of these is before, no useful completion possible in this completor
-                    case LITERAL_import:
-                    case LITERAL_class:
-                    case LITERAL_interface:
-                    case LITERAL_enum:
-                    case LITERAL_def:
-                    case LITERAL_void:
-                    case LITERAL_boolean:
-                    case LITERAL_byte:
-                    case LITERAL_char:
-                    case LITERAL_short:
-                    case LITERAL_int:
-                    case LITERAL_float:
-                    case LITERAL_long:
-                    case LITERAL_double:
-                    case LITERAL_package:
-                    case LITERAL_true:
-                    case LITERAL_false:
-                    case LITERAL_as:
-                    case LITERAL_this:
-                    case LITERAL_try:
-                    case LITERAL_finally:
-                    case LITERAL_catch:
-                        return CompletionCase.NO_COMPLETION
-                    case IDENT:
-                        // identifiers following each other could mean Declaration (no completion) or closure invocation
-                        // closure invocation too complex for now to complete
-                        return CompletionCase.SECOND_IDENT
-                    default:
-                        return CompletionCase.NO_DOT_PREFIX
-                }
-            }
-
-        } else if (currentToken.type == DOT || currentToken.type == OPTIONAL_DOT) {
-            // cursor is on dot, so need to evaluate the statement up to the dot for completion
-            if (tokens.size() == 1) {
-                return CompletionCase.NO_COMPLETION
-            }
-            return CompletionCase.DOT_LAST
-        } else if (currentToken.type == SPREAD_DOT) {
-            // cursor is on spread-dot, so need to evaluate the statement up to the dot for completion
-            if (tokens.size() == 1) {
-                return CompletionCase.NO_COMPLETION
-            }
-            return CompletionCase.SPREAD_DOT_LAST
-        } else if (currentToken.type == LITERAL_instanceof) {
-            return CompletionCase.INSTANCEOF
-        } else {
-            LOG.debug('Untreated toke type: ' + currentToken.type)
-        }
-        return CompletionCase.NO_COMPLETION
-    }
-
-    int completeIdentifier(final List<GroovySourceToken> tokens, final List<CharSequence> candidates) {
-        boolean foundMatches = false
-        for (IdentifierCompletor completor : identifierCompletors) {
-            foundMatches |= completor.complete(tokens, candidates)
-        }
-        if (foundMatches) {
-            return tokens.last().column - 1
-        }
-        return -1
-    }
-
-    static boolean isCommand(final String bufferLine, final CommandRegistry registry) {
-        // for shell commands, don't complete
-        int commandEnd = bufferLine.indexOf(' ')
-        if (commandEnd != -1) {
-            String commandTokenText = bufferLine.substring(0, commandEnd)
-            for (command in registry.commands()) {
-                if (commandTokenText == command.name || commandTokenText in command.aliases) {
-                    return true
-                }
-            }
-        }
-        return false
-    }
-
-    static GroovyLexer createGroovyLexer(final String src) {
-        Reader unicodeReader = new UnicodeEscapingReader(new StringReader(src), new SourceBuffer())
-        GroovyLexer lexer = new GroovyLexer(unicodeReader)
-        unicodeReader.setLexer(lexer)
-        return lexer
-    }
-
-    @TupleConstructor
-    static class InStringException extends Exception {
-        int column
-        String openDelim
-
-        @Override
-        String toString() {
-            super.toString() + "[column=$column, openDelim=$openDelim]"
-        }
-    }
-
-    private static final STRING_STARTERS = [/"""/, /'''/, /"/, /'/, '$/', '/']
-
-    /**
-     * Adds to result the identified tokens for the bufferLines
-     * @param bufferLine
-     * @param previousLines
-     * @param result
-     * @return true if lexing was successful
-     */
-    static boolean tokenizeBuffer(final String bufferLine,
-                                  final List<String> previousLines,
-                                  final List<GroovySourceToken> result) {
-        GroovyLexer groovyLexer
-        if (previousLines.size() > 0) {
-            StringBuilder src = new StringBuilder()
-            for (String line : previousLines) {
-                src.append(line).append('\n')
-            }
-            src.append(bufferLine)
-            groovyLexer = createGroovyLexer(src.toString())
-        } else {
-            groovyLexer = createGroovyLexer(bufferLine)
-        }
-        // Build a list of tokens using a GroovyLexer
-        GroovySourceToken nextToken
-        GroovySourceToken lastToken
-        while (true) {
-            try {
-                nextToken = groovyLexer.nextToken() as GroovySourceToken
-                if (nextToken.type == EOF) {
-                    if (!result.isEmpty() && nextToken.line > result.last().line) {
-                        // no completion if EOF line has no tokens
-                        return false
-                    }
-                    break
-                }
-                result << nextToken
-                lastToken = nextToken
-            } catch (TokenStreamException e) {
-                // getting the next token failed, possibly due to unclosed quotes; investigate rest of the line to confirm
-                if (lastToken != null) {
-                    String restline = bufferLine.substring(lastToken.columnLast - 1)
-                    int leadingBlanks = restline.find('^[ ]*').length()
-                    if (restline) {
-                        String remainder = restline.substring(leadingBlanks)
-                        //System.err.println "|" + remainder + "|"
-                        // Exception with following quote either means we're in String or at end of GString.
-                        String openDelim = STRING_STARTERS.find { remainder.startsWith(it) }
-                        if (openDelim && previousLines.size() + 1 == lastToken.line) {
-                            throw new InStringException(lastToken.columnLast + leadingBlanks - 1, openDelim)
-                        }
-                    }
-                }
-                return false
-            } catch (NullPointerException e) {
-                // this can happen when e.g. a string as not closed
-                return false
-            }
-        }
-        return !result.empty
-    }
-}
diff --git a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/completion/IdentifierCompletor.groovy b/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/completion/IdentifierCompletor.groovy
deleted file mode 100644
index 9192356..0000000
--- a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/completion/IdentifierCompletor.groovy
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.tools.shell.completion
-
-import org.codehaus.groovy.antlr.GroovySourceToken
-
-/**
- * Interface for classes that complete identifier tokens within a groovy Statement
- * (Class, variable, keyword, method, ...)
- * Similar to JLine Completor, but adapted for usage in GroovySyntaxCompletor
- */
-@Deprecated
-interface IdentifierCompletor {
-
-    /**
-     *
-     * @param tokens List of tokens, non empty, last token is an identifier token, previous token is not a dot
-     * @param candidates
-     * @return
-     */
-    boolean complete(List<GroovySourceToken> tokens, List<CharSequence> candidates)
-
-}
diff --git a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/completion/ImportsSyntaxCompletor.groovy b/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/completion/ImportsSyntaxCompletor.groovy
deleted file mode 100644
index e8c35e1..0000000
--- a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/completion/ImportsSyntaxCompletor.groovy
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.tools.shell.completion
-
-import org.codehaus.groovy.antlr.GroovySourceToken
-import org.codehaus.groovy.control.ResolveVisitor
-import org.codehaus.groovy.tools.shell.Groovysh
-
-/**
- * Completor completing imported classnames
- */
-@Deprecated
-class ImportsSyntaxCompletor implements IdentifierCompletor {
-
-    final Groovysh shell
-    // cache for all preimported classes
-    List<String> preimportedClassNames
-    // cache for all manually imported classes
-    final Map<String, Collection<String>> cachedImports = new HashMap<String, Collection<String>>().withDefault {String key ->
-        Collection<String> matchingImports = new TreeSet<String>()
-        collectImportedSymbols(key, matchingImports)
-        matchingImports
-    }
-
-    ImportsSyntaxCompletor(final Groovysh shell) {
-        this.shell = shell
-    }
-
-    @Override
-    boolean complete(final List<GroovySourceToken> tokens, final List<CharSequence> candidates) {
-        String prefix = tokens.last().getText()
-        boolean foundMatch = findMatchingPreImportedClasses(prefix, candidates)
-        for (String importSpec in shell.imports) {
-            foundMatch |= findMatchingImportedClassesCached(prefix, importSpec, candidates)
-        }
-        return foundMatch
-    }
-
-    boolean findMatchingImportedClassesCached(final String prefix, final String importSpec, final List<String> candidates) {
-        candidates.addAll(cachedImports
-            .get(importSpec)
-            .findAll({String it -> it.startsWith(prefix)}))
-    }
-
-    boolean findMatchingPreImportedClasses(final String prefix, final Collection<String> matches) {
-        boolean foundMatch = false
-        if (preimportedClassNames == null) {
-            preimportedClassNames = []
-            for (packname in ResolveVisitor.DEFAULT_IMPORTS) {
-                Set<String> packnames = shell.packageHelper.getContents(packname[0..-2])
-                if (packnames) {
-                    preimportedClassNames.addAll(packnames.findAll({String it -> it[0] in 'A'..'Z'}))
-                }
-            }
-            preimportedClassNames.add('BigInteger')
-            preimportedClassNames.add('BigDecimal')
-        }
-        // preimported names
-        for (String preImpClassname in preimportedClassNames) {
-            if (preImpClassname.startsWith(prefix)) {
-                matches.add(preImpClassname)
-                foundMatch = true
-            }
-        }
-        return foundMatch
-    }
-
-    private static final String STATIC_IMPORT_PATTERN = ~/^static ([a-zA-Z_][a-zA-Z_0-9]*\.)+([a-zA-Z_][a-zA-Z_0-9]*|\*)$/
-
-    /**
-     * finds matching imported classes or static methods
-     * @param importSpec an import statement without the leading 'import ' or trailing semicolon
-     * @param matches all names matching the importSpec will be added to this Collection
-     */
-    void collectImportedSymbols(final String importSpec, final Collection<String> matches) {
-        String asKeyword = ' as '
-        int asIndex = importSpec.indexOf(asKeyword)
-        if (asIndex > -1) {
-            String alias = importSpec.substring(asIndex + asKeyword.length())
-            matches << alias
-            return
-        }
-        int lastDotIndex = importSpec.lastIndexOf('.')
-        String symbolName = importSpec.substring(lastDotIndex + 1)
-        String staticPrefix = 'static '
-        if (importSpec.startsWith(staticPrefix)) {
-            // make sure pattern is safe, though shell should have done anyway
-            if (importSpec.matches(STATIC_IMPORT_PATTERN)) {
-                String className = importSpec.substring(staticPrefix.length(), lastDotIndex)
-                Class clazz = shell.interp.evaluate([className]) as Class
-                if (clazz != null) {
-                    Set<String> clazzSymbols = ReflectionCompletor.getPublicFieldsAndMethods(clazz, '')*.value
-                    Collection<String> importedSymbols
-                    if (symbolName == '*') {
-                        importedSymbols = clazzSymbols
-                    } else {
-                        Set<String> acceptableMatches = [symbolName, symbolName + '(', symbolName + '()']
-                        importedSymbols = acceptableMatches.intersect(clazzSymbols)
-                    }
-                    matches.addAll(importedSymbols)
-                }
-            }
-        } else {
-            if (symbolName == '*') {
-                matches.addAll(shell.packageHelper.getContents(importSpec))
-            } else {
-                matches << symbolName
-            }
-        }
-    }
-}
diff --git a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/completion/InfixKeywordSyntaxCompletor.groovy b/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/completion/InfixKeywordSyntaxCompletor.groovy
deleted file mode 100644
index 266c92e..0000000
--- a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/completion/InfixKeywordSyntaxCompletor.groovy
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.tools.shell.completion
-
-import org.codehaus.groovy.antlr.GroovySourceToken
-
-/**
- * Completor completing groovy keywords that appear after identifiers
- */
-@Deprecated
-class InfixKeywordSyntaxCompletor implements IdentifierCompletor {
-
-    // INFIX keywords can only occur after identifiers
-    private static final String[] INFIX_KEYWORDS = [
-            'in',
-            'instanceof',
-            'extends',
-            'implements',
-            ]
-
-    @Override
-    boolean complete(final List<GroovySourceToken> tokens, final List<CharSequence> candidates) {
-        String prefix = tokens.last().text
-        boolean foundMatch = false
-        for (String varName in INFIX_KEYWORDS) {
-            if (varName.startsWith(prefix)) {
-                candidates << varName
-                foundMatch = true
-            }
-        }
-        return foundMatch
-    }
-}
diff --git a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/completion/KeywordSyntaxCompletor.groovy b/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/completion/KeywordSyntaxCompletor.groovy
deleted file mode 100644
index be3e179..0000000
--- a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/completion/KeywordSyntaxCompletor.groovy
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.tools.shell.completion
-
-import org.codehaus.groovy.antlr.GroovySourceToken
-
-/**
- * Completor completing Groovy keywords and special functions
- */
-@Deprecated
-class KeywordSyntaxCompletor implements IdentifierCompletor {
-
-    private static final String[] KEYWORDS = [
-            'abstract',
-            'assert', 'boolean', 'break', 'byte',
-            'case',
-            // 'catch (', // special
-            'char', 'class', 'continue',
-            'def', // short, but keep, else 'default' completes, annoyingly
-            'default',
-            'do',
-            'double',
-            'else', 'enum',
-
-            //'false',// value
-            'final',
-            //'finally {', // special
-            'float',
-            //'for (', // special
-            //'if (', // special
-            //'import', // command anyway
-
-            'int', // short, but keeping for consistency, all primitives
-            'interface',
-            'long',
-            //'native',
-            'new',
-            //'null', // value
-            'private', 'protected', 'public',
-            'return', 'short',
-            'static',
-            //'super',// value
-            //'switch (', // special
-            'synchronized',
-            //'this', // value
-            //threadsafe,
-            'throw', 'throws',
-            'transient',
-            //'true', // value
-            //'try {', //special
-            'void', 'volatile'
-            //'while (' // special
-    ]
-
-    // VALUE_KEYWORDS and SPECIAL_FUNCTIONS completed without added blank
-    private static final String[] VALUE_KEYWORDS = [
-            'true',
-            'false',
-            'this',
-            'super',
-            'null']
-
-    private static final String[] SPECIAL_FUNCTIONS = [
-            'catch (',
-            'finally {',
-            'for (',
-            'if (',
-            'switch (',
-            'try {',
-            'while (']
-
-    private static final String[] DEFAULT_METHODS = [
-            'use (',
-            'print ',
-            'println ',
-            'printf ',
-            'sprintf ',
-    ]
-
-    @Override
-    boolean complete(final List<GroovySourceToken> tokens, final List<CharSequence> candidates) {
-        String prefix = tokens.last().text
-        boolean foundMatch = false
-        for (String varName in KEYWORDS) {
-            if (varName.startsWith(prefix)) {
-                candidates << varName + ' '
-                foundMatch = true
-            }
-        }
-        for (String varName in VALUE_KEYWORDS) {
-            if (varName.startsWith(prefix)) {
-                candidates << varName
-                foundMatch = true
-            }
-        }
-        for (String varName in SPECIAL_FUNCTIONS) {
-            if (varName.startsWith(prefix)) {
-                candidates << varName
-                foundMatch = true
-            }
-        }
-        for (String varName in DEFAULT_METHODS) {
-            if (varName.startsWith(prefix)) {
-                candidates << varName
-                foundMatch = true
-            }
-        }
-
-        return foundMatch
-    }
-}
diff --git a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/completion/NavigablePropertiesCompleter.groovy b/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/completion/NavigablePropertiesCompleter.groovy
deleted file mode 100644
index 5cbee7f..0000000
--- a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/completion/NavigablePropertiesCompleter.groovy
+++ /dev/null
@@ -1,97 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.tools.shell.completion
-
-import java.util.regex.Pattern
-
-@Deprecated
-class NavigablePropertiesCompleter {
-
-    private static final Pattern NO_CONTROL_CHARS_PATTERN = ~'^[^\\p{Cntrl}]+$'
-
-    // pattern describing particle that must not occur within a string for the string to be a possible identifier
-    private static final Pattern INVALID_CHAR_FOR_IDENTIFIER_PATTERN = ~'[ @#%^&§()+\\-={}\\[\\]~`´<>,."\'/!?:;|\\\\]'
-
-    /**
-     * Adds navigable properties to the list of candidates if they match the prefix
-     */
-    void addCompletions(final Object instance, final String prefix, final Set<CharSequence> candidates) {
-        if (instance == null) {
-            return
-        }
-        this.addIndirectObjectMembers(instance, prefix, candidates)
-    }
-
-
-    void addIndirectObjectMembers(final Object instance, final String prefix, final Set<CharSequence> candidates) {
-        if (instance instanceof Map) {
-            Map map = (Map) instance
-            addMapProperties(map, prefix, candidates)
-        }
-        if (instance instanceof Node) {
-            Node node = (Node) instance
-            addNodeChildren(node, prefix, candidates)
-        }
-        if (instance instanceof NodeList) {
-            NodeList nodeList = (NodeList) instance
-            addNodeListEntries(nodeList, prefix, candidates)
-        }
-    }
-
-    static void addMapProperties(final Map instance, final String prefix, final Set<CharSequence> candidates) {
-        // key can be any Object but only Strings will be completed
-        for (String key in instance.keySet().findAll {it instanceof String}) {
-            // if key has no Control characters
-            if (key.matches(NO_CONTROL_CHARS_PATTERN) && key.startsWith(prefix)) {
-                // if key cannot be parsed used as identifier name, (contains invalid char or ends with $)
-                if (key.find(INVALID_CHAR_FOR_IDENTIFIER_PATTERN) || key.endsWith('$')) {
-                    key = key.replace('\\', '\\\\').replace('\'', '\\\'')
-                    key = '\'' + key + '\''
-                }
-                candidates.add(key)
-            }
-        }
-    }
-
-    void addNodeListEntries(final NodeList instance, final String prefix, final Set<CharSequence> candidates) {
-        for (Object member : instance) {
-            addIndirectObjectMembers(member, prefix, candidates)
-        }
-    }
-
-    void addNodeChildren(final Node instance, final String prefix, final Set<CharSequence> candidates) {
-        for (Object child in instance.children()) {
-            String member = ''
-            if (child instanceof String) {
-                member = (String) child
-            } else if (child instanceof Node) {
-                member = ((Node) child).name()
-            } else if (child instanceof NodeList) {
-                for (Object node : ((NodeList) child)) {
-                    addNodeChildren((Node) node, prefix, candidates)
-                }
-            } else {
-                continue
-            }
-            if (member.startsWith(prefix)) {
-                candidates.add(member)
-            }
-        }
-    }
-}
diff --git a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/completion/ReflectionCompletionCandidate.groovy b/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/completion/ReflectionCompletionCandidate.groovy
deleted file mode 100644
index a11d3cf..0000000
--- a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/completion/ReflectionCompletionCandidate.groovy
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.tools.shell.completion
-
-import groovy.transform.CompileStatic
-
-/**
- * A candidate as String with additional jansi formatting codes
- */
-@CompileStatic
-@Deprecated
-class ReflectionCompletionCandidate implements Comparable<ReflectionCompletionCandidate> {
-
-    private final String value
-    private final List<String> jAnsiCodes
-
-    ReflectionCompletionCandidate(final String value, final String... jAnsiCodes) {
-        this.value = value
-        this.jAnsiCodes = new ArrayList<>(Arrays.asList(jAnsiCodes))
-    }
-
-    String getValue() {
-        return value
-    }
-
-    List<String> getjAnsiCodes() {
-        return jAnsiCodes
-    }
-
-    @Override
-    int compareTo(ReflectionCompletionCandidate o) {
-        boolean hasBracket = this.value.contains('(')
-        boolean otherBracket = o.value.contains('(')
-        if (hasBracket == otherBracket) {
-            this.value.compareTo(o.value)
-        } else if (hasBracket && ! otherBracket) {
-            return -1
-        } else {
-            return 1
-        }
-
-    }
-
-    @Override
-    String toString() {
-        return value
-    }
-
-    @Override
-    int hashCode() {
-        return value.hashCode()
-    }
-
-    @Override
-    boolean equals(o) {
-        if (this.is(o)) return true
-        if (getClass() != o.class) return false
-
-        ReflectionCompletionCandidate that = (ReflectionCompletionCandidate) o
-
-        return value == that.value
-    }
-}
diff --git a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/completion/ReflectionCompletor.groovy b/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/completion/ReflectionCompletor.groovy
deleted file mode 100644
index 682bbe1..0000000
--- a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/completion/ReflectionCompletor.groovy
+++ /dev/null
@@ -1,721 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.tools.shell.completion
-
-import org.codehaus.groovy.antlr.GroovySourceToken
-import org.codehaus.groovy.control.MultipleCompilationErrorsException
-import org.codehaus.groovy.runtime.InvokerHelper
-import org.codehaus.groovy.tools.shell.Groovysh
-import org.codehaus.groovy.tools.shell.util.Preferences
-import org.fusesource.jansi.Ansi
-import org.fusesource.jansi.AnsiRenderer
-
-import java.lang.reflect.Field
-import java.lang.reflect.Method
-import java.lang.reflect.Modifier
-import java.util.regex.Pattern
-
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.ASSIGN
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.BAND
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.BAND_ASSIGN
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.BNOT
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.BOR
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.BOR_ASSIGN
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.BXOR
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.BXOR_ASSIGN
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.COLON
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.COMMA
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.COMPARE_TO
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.DIV
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.DIV_ASSIGN
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.DOT
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.EQUAL
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.GE
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.GT
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.IDENT
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.LAND
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.LBRACK
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.LCURLY
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.LE
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.LITERAL_false
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.LITERAL_in
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.LITERAL_instanceof
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.LITERAL_true
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.LNOT
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.LOR
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.LPAREN
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.LT
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.MEMBER_POINTER
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.MINUS
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.MINUS_ASSIGN
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.NOT_EQUAL
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.NUM_BIG_DECIMAL
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.NUM_BIG_INT
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.NUM_DOUBLE
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.NUM_FLOAT
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.NUM_INT
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.NUM_LONG
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.OPTIONAL_DOT
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.PLUS
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.PLUS_ASSIGN
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.RANGE_EXCLUSIVE
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.RANGE_INCLUSIVE
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.RBRACK
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.RPAREN
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.SEMI
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.SPREAD_DOT
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.STAR
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.STAR_ASSIGN
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.STRING_CTOR_START
-import static org.codehaus.groovy.antlr.parser.GroovyTokenTypes.STRING_LITERAL
-
-/**
- * Completes fields and methods of Classes or instances.
- * Does not quite respect the contract of IdentifierCompletor, as last Token may be a dot or not,
- * thus also returns as int the cursor position.
- */
-@Deprecated
-class ReflectionCompletor {
-
-    private static final NavigablePropertiesCompleter PROPERTIES_COMPLETER = new NavigablePropertiesCompleter()
-    private static final Pattern BEAN_ACCESSOR_PATTERN = ~'^(get|set|is)[A-Z].*'
-
-    final Groovysh shell
-
-    /**
-     *
-     * @param shell
-     * @param metaclass_completion_prefix_length how long the prefix must be to display candidates from metaclass
-     */
-    ReflectionCompletor(final Groovysh shell) {
-        this.shell = shell
-    }
-
-    int complete(final List<GroovySourceToken> tokens, final List<CharSequence> candidates) {
-        GroovySourceToken currentElementToken = null
-        GroovySourceToken dotToken
-        List<GroovySourceToken> previousTokens
-        if (tokens.size() < 2) {
-            throw new IllegalArgumentException('must be invoked with at least 2 tokens, one of which is dot' + tokens*.text)
-        }
-        if (tokens.last().type == DOT || tokens.last().type == OPTIONAL_DOT || tokens.last().type == SPREAD_DOT) {
-            dotToken = tokens.last()
-            previousTokens = tokens[0..-2]
-        } else {
-            if (tokens[-2].type != DOT && tokens[-2].type != OPTIONAL_DOT && tokens[-2].type != SPREAD_DOT) {
-                throw new IllegalArgumentException('must be invoked with token list with dot at last position or one position before' + tokens*.text)
-            }
-            currentElementToken = tokens.last()
-            dotToken = tokens[-2]
-            previousTokens = tokens[0..-3]
-        }
-
-        Object instanceOrClass = getInvokerClassOrInstance(previousTokens)
-        if (instanceOrClass == null) {
-            return -1
-        }
-        if (dotToken.type == SPREAD_DOT) {
-            /**
-             * for aggregate types, find an arbitrary collection-member
-             * element within the instance. This may cause invalid completion candidates when the collection is not
-             * homogeneous, but still better than no completion at all. Alternatively the union or intersection of
-             * candidate completions could be built. For non-aggregate types, we assume that whatever find()
-             * returns is useful for *. completion as well.
-             */
-            instanceOrClass = instanceOrClass.find()
-            if (instanceOrClass == null) {
-                return -1
-            }
-        }
-
-        String identifierPrefix
-        if (currentElementToken) {
-            identifierPrefix = currentElementToken.text
-        } else {
-            identifierPrefix = ''
-        }
-
-        return completeInstanceMembers(instanceOrClass, identifierPrefix, candidates, currentElementToken, dotToken)
-    }
-
-    private int completeInstanceMembers(final Object instanceOrClass,
-                                final String identifierPrefix,
-                                final List<CharSequence> candidates,
-                                final GroovySourceToken currentElementToken,
-                                final GroovySourceToken dotToken) {
-        // look for public methods/fields that match the prefix
-        Collection<ReflectionCompletionCandidate> myCandidates = getPublicFieldsAndMethods(instanceOrClass, identifierPrefix)
-
-        boolean showAllMethods = (identifierPrefix.length() >= Integer.valueOf(Preferences.get(Groovysh.METACLASS_COMPLETION_PREFIX_LENGTH_PREFERENCE_KEY, '3')))
-        // Also add metaclass methods if prefix is long enough (user would usually not care about those)
-        myCandidates.addAll(getMetaclassMethods(
-                instanceOrClass,
-                identifierPrefix,
-                showAllMethods).collect({ String it -> new ReflectionCompletionCandidate(it) }))
-
-        if (!showAllMethods) {
-            // user probably does not care to see default Object / GroovyObject Methods,
-            // they obfuscate the business logic
-            removeStandardMethods(myCandidates)
-        }
-
-        // specific DefaultGroovyMethods only suggested for suitable instances
-        myCandidates.addAll(getDefaultMethods(instanceOrClass,
-                identifierPrefix).collect({ String it -> new ReflectionCompletionCandidate(it, AnsiRenderer.Code.BLUE.name()) }))
-
-        if (myCandidates.size() > 0) {
-            myCandidates = myCandidates.sort()
-            if (Boolean.valueOf(Preferences.get(Groovysh.COLORS_PREFERENCE_KEY, 'true'))) {
-                candidates.addAll(myCandidates.collect(
-                        { ReflectionCompletionCandidate it ->
-                            AnsiRenderer.render(it.value,
-                                    it.jAnsiCodes.toArray(new String[it.jAnsiCodes.size()]))
-                        }))
-            } else {
-                candidates.addAll(myCandidates*.value)
-            }
-
-            int lastDot
-            // dot could be on previous line
-            if (currentElementToken && dotToken.line != currentElementToken.line) {
-                lastDot = currentElementToken.column - 1
-            } else {
-                // Spread-dot has length 2!
-                lastDot = dotToken.column +(dotToken.getText().length() - 1)
-            }
-            return lastDot
-        }
-
-        // no candidates
-        return -1
-    }
-
-    /**
-     * Takes the last ? tokens of the list that form a simple expression,
-     * evaluates it and returns a result. "Simple" means evaluation is known to be
-     * side-effect free.
-     */
-    Object getInvokerClassOrInstance(final List<GroovySourceToken> groovySourceTokens) {
-        if (!groovySourceTokens
-                || groovySourceTokens.last().type == DOT
-                || groovySourceTokens.last().type == OPTIONAL_DOT) {
-            // we expect the list of tokens before a dot.
-            return null
-        }
-        // first, try to detect a sequence of token before the dot that can safely be evaluated.
-        List<GroovySourceToken> invokerTokens = getInvokerTokens(groovySourceTokens)
-        if (invokerTokens) {
-            try {
-                String instanceRefExpression = tokenListToEvalString(invokerTokens)
-                instanceRefExpression = instanceRefExpression.replace('\n', '')
-                Object instance = shell.interp.evaluate([shell.getImportStatements()] + ['true'] + [instanceRefExpression])
-                return instance
-            } catch (MissingPropertyException |
-                    MissingMethodException |
-                    MissingFieldException |
-                    MultipleCompilationErrorsException e) {
-
-            }
-        }
-        return null
-    }
-
-    /**
-     * return the last tokens of a list that form an expression to be completed after the next dot, or null if
-     * expression cannot be detected. This discards Expressions that could easily have side effects or be long
-     * in evaluation. However it assumes that operators can be evaluated without side-effect or long running
-     * operation. Users who use operators for which this does not hold should not use tab completion.
-     * @param groovySourceTokens
-     * @return
-     */
-    static List<GroovySourceToken> getInvokerTokens(final List<GroovySourceToken> groovySourceTokens) {
-        int validIndex = groovySourceTokens.size()
-        if (validIndex == 0) {
-            return []
-        }
-        // implementation goes backwards on token list, adding strings
-        // to be evaluated later
-        // need to collect using Strings, to support evaluation of string literals
-        Stack<Integer> expectedOpeners = new Stack<Integer>()
-        GroovySourceToken lastToken = null
-        outerloop:
-        for (GroovySourceToken loopToken in groovySourceTokens.reverse()) {
-            switch (loopToken.type) {
-            // a combination of any of these can be evaluated without side effects
-            // this just avoids any parentheses,
-            // could maybe be extended further if harmless parentheses can be detected .
-            // This allows already a lot of powerful simple completions, like [foo: Baz.bar]['foo'].
-                case STRING_LITERAL:
-                    // must escape String for evaluation, need the original string e.g. for mapping key
-                    break
-                case LPAREN:
-                    if (expectedOpeners.empty()) {
-                        break outerloop
-                    }
-                    if (expectedOpeners.pop() != LPAREN) {
-                        return []
-                    }
-                    break
-                case LBRACK:
-                    if (expectedOpeners.empty()) {
-                        break outerloop
-                    }
-                    if (expectedOpeners.pop() != LBRACK) {
-                        return []
-                    }
-                    break
-                case RBRACK:
-                    expectedOpeners.push(LBRACK)
-                    break
-                case RPAREN:
-                    expectedOpeners.push(LPAREN)
-                    break
-                // tokens which indicate we have reached the beginning of a statement
-                // operator tokens (must not be evaluated, as they can have side effects via evil overriding
-                case COMPARE_TO:
-                case EQUAL:
-                case NOT_EQUAL:
-                case ASSIGN:
-                case GT:
-                case LT:
-                case GE:
-                case LE:
-                case PLUS:
-                case PLUS_ASSIGN:
-                case MINUS:
-                case MINUS_ASSIGN:
-                case STAR:
-                case STAR_ASSIGN:
-                case DIV:
-                case DIV_ASSIGN:
-                case BOR:
-                case BOR_ASSIGN:
-                case BAND:
-                case BAND_ASSIGN:
-                case BXOR:
-                case BXOR_ASSIGN:
-                case BNOT:
-                case LOR:
-                case LAND:
-                case LNOT:
-                case LITERAL_in:
-                case LITERAL_instanceof:
-                    if (expectedOpeners.empty()) {
-                        break outerloop
-                    }
-                    break
-                // tokens which indicate we have reached the beginning of a statement
-                case LCURLY:
-                case SEMI:
-                case STRING_CTOR_START:
-                    break outerloop
-                // tokens we accept
-                case IDENT:
-                   if (lastToken) {
-                       if (lastToken.type == LPAREN) {
-                           //Method invocation,must be avoided
-                           return []
-                       }
-                       if (lastToken.type == IDENT) {
-                           // could be attempt to invoke closure like 'foo.each bar.baz'
-                           return []
-                       }
-                   }
-                    break
-                // may begin expression when outside brackets (from back)
-                case RANGE_INCLUSIVE:
-                case RANGE_EXCLUSIVE:
-                case COLON:
-                case COMMA:
-                    if (expectedOpeners.empty()) {
-                        break outerloop
-                    }
-                // harmless literals
-                case LITERAL_true:
-                case LITERAL_false:
-                case NUM_INT:
-                case NUM_FLOAT:
-                case NUM_LONG:
-                case NUM_DOUBLE:
-                case NUM_BIG_INT:
-                case NUM_BIG_DECIMAL:
-                case MEMBER_POINTER:
-                case DOT:
-                case OPTIONAL_DOT:
-                    break
-                default:
-                    return null
-            } // end switch
-            validIndex --
-            lastToken = loopToken
-        } // end for
-        return groovySourceTokens[(validIndex)..-1]
-    }
-
-    static String tokenListToEvalString(final List<GroovySourceToken> groovySourceTokens) {
-        StringBuilder builder = new StringBuilder()
-        for (GroovySourceToken token: groovySourceTokens) {
-            if (token.type == STRING_LITERAL) {
-                builder.append('\'').append(token.text).append('\'')
-            } else {
-                builder.append(token.text)
-            }
-        }
-        return builder.toString()
-    }
-
-    static boolean acceptName(final String name, final String prefix) {
-        return (!prefix || name.startsWith(prefix)) &&
-                (!(name.contains('$')) && !(name.startsWith('_')))
-    }
-
-    static Collection<String> getMetaclassMethods(final Object instance, final String prefix, final boolean includeMetaClassImplMethods) {
-        Set<String> rv = new HashSet<String>()
-        MetaClass metaclass = InvokerHelper.getMetaClass(instance)
-        if (includeMetaClassImplMethods || !(metaclass instanceof MetaClassImpl)) {
-            metaclass.metaMethods.each { MetaMethod mmit ->
-                if (acceptName(mmit.name, prefix)) {
-                    rv << mmit.getName() + (mmit.parameterTypes.length == 0 ? '()' : '(')
-                }
-            }
-        }
-        return rv.sort()
-    }
-
-    /**
-     * Build a list of public fields and methods for an object
-     * that match a given prefix.
-     * @param instance the object
-     * @param prefix the prefix that must be matched
-     * @return the list of public methods and fields that begin with the prefix
-     */
-    static Collection<ReflectionCompletionCandidate> getPublicFieldsAndMethods(final Object instance, final String prefix) {
-        Set<ReflectionCompletionCandidate> rv = new HashSet<ReflectionCompletionCandidate>()
-        Class clazz = instance.getClass()
-        if (clazz == null) {
-            return rv
-        }
-
-        boolean isClass = (clazz == Class)
-        if (isClass) {
-            clazz = instance as Class
-        }
-
-        Class loopclazz = clazz
-        // render immediate class members bold when completing an instance
-        boolean renderBold = ! isClass
-        // hide static members for instances unless user typed a prefix
-        boolean showStatic = isClass || (prefix.length() >= Integer.valueOf(Preferences.get(Groovysh.METACLASS_COMPLETION_PREFIX_LENGTH_PREFERENCE_KEY, '3')))
-        while (loopclazz != null && loopclazz != Object && loopclazz != GroovyObject) {
-            addClassFieldsAndMethods(loopclazz, showStatic, !isClass, prefix, rv, renderBold)
-            renderBold = false
-            loopclazz = loopclazz.superclass
-        }
-        if (clazz.isArray() && !isClass) {
-            // Arrays are special, these public members cannot be found via Reflection
-            for (String member : ['length', 'clone()']) {
-                if (member.startsWith(prefix)) {
-                    rv.add(new ReflectionCompletionCandidate(member, Ansi.Attribute.INTENSITY_BOLD.name()))
-                }
-            }
-        }
-
-        // other completions that are commonly possible with properties
-        if (!isClass) {
-            Set<String> candidates = new HashSet<String>()
-            PROPERTIES_COMPLETER.addCompletions(instance, prefix, candidates)
-            rv.addAll(candidates.collect({String it -> new ReflectionCompletionCandidate(it, AnsiRenderer.Code.MAGENTA.name())}))
-        }
-
-        return rv.sort()
-    }
-
-    /**
-     * removes candidates that, most of the times, a programmer does not want to see in completion
-     * @param candidates
-     */
-    static removeStandardMethods(final Collection<ReflectionCompletionCandidate> candidates) {
-        for (String defaultMethod : [
-                'clone()', 'finalize()', 'getClass()',
-                'getMetaClass()', 'getProperty(',  'invokeMethod(', 'setMetaClass(', 'setProperty(',
-                'equals(', 'hashCode()', 'toString()',
-                'notify()', 'notifyAll()', 'wait(', 'wait()']) {
-            for (ReflectionCompletionCandidate candidate : candidates) {
-                if (defaultMethod.equals(candidate.value)) {
-                    candidates.remove(candidate)
-                    break
-                }
-            }
-        }
-    }
-
-    /**
-     * Offering all DefaultGroovyMethods on any object is too verbose, hiding all
-     * removes user-friendliness. So here util methods will be added to candidates
-     * if the instance is of a suitable type.
-     * This does not need to be strictly complete, only the most useful functions may appear.
-     */
-    static List<String> getDefaultMethods(final Object instance, final String prefix) {
-        List<String> candidates = []
-        if (instance instanceof Iterable) {
-            [
-                    'any()', 'any(',
-                    'collect()', 'collect(',
-                    'combinations()',
-                    'count(',
-                    'countBy(',
-                    'drop(', 'dropRight(', 'dropWhile(',
-                    'each()', 'each(',
-                    'eachPermutation(',
-                    'every()', 'every(',
-                    'find(', 'findResult(', 'findResults(',
-                    'flatten()',
-                    'init()',
-                    'inject(',
-                    'intersect(',
-                    'join(',
-                    'max()', 'min()',
-                    'reverse()',
-                    'size()',
-                    'sort()',
-                    'split(',
-                    'take(', 'takeRight(', 'takeWhile(',
-                    'toSet()',
-                    'retainAll(', 'removeAll(',
-                    'unique()', 'unique('
-            ].findAll({it.startsWith(prefix)}).each({candidates.add(it)})
-            if (instance instanceof Collection) {
-                [
-                        'grep('
-                ].findAll({ it.startsWith(prefix) }).each({ candidates.add(it) })
-            }
-            if (instance instanceof List) {
-                [
-                        'collate(',
-                        'execute()', 'execute(',
-                        'pop()',
-                        'transpose()'
-                ].findAll({it.startsWith(prefix)}).each({candidates.add(it)})
-            }
-        }
-        if (instance instanceof Map) {
-            [
-                    'any(',
-                    'collect(',
-                    'collectEntries(',
-                    'collectMany(',
-                    'count(',
-                    'drop(',
-                    'each(',
-                    'every(',
-                    'find(', 'findAll(', 'findResult(', 'findResults(',
-                    'groupEntriesBy(', 'groupBy(',
-                    'inject(', 'intersect(',
-                    'max(', 'min(',
-                    'sort(',
-                    'spread()',
-                    'subMap(',
-                    'take(', 'takeWhile('
-            ].findAll({it.startsWith(prefix)}).each({candidates.add(it)})
-        }
-        if (instance instanceof File) {
-            [
-                    'append(',
-                    'createTempDir()', 'createTempDir(',
-                    'deleteDir()', 'directorySize()',
-                    'eachByte(', 'eachDir(', 'eachDirMatch(', 'eachDirRecurse(', 'eachFile(', 'eachFileMatch(', 'eachFileRecurse(', 'eachLine(',
-                    'filterLine(',
-                    'getBytes()', 'getText()', 'getText(',
-                    'newInputStream()', 'newOutputStream()', 'newPrintWriter()', 'newPrintWriter(', 'newReader()', 'newReader(', 'newWriter()', 'newWriter(',
-                    'readBytes()', 'readLines(',
-                    'setBytes(', 'setText(', 'size()', 'splitEachLine(',
-                    'traverse(',
-                    'withInputStream(', 'withOutputStream(', 'withPrintWriter(', 'withReader(', 'withWriter(', 'withWriterAppend(', 'write('
-            ].findAll({it.startsWith(prefix)}).each({candidates.add(it)})
-        }
-        if (instance instanceof String) {
-            [
-                    'capitalize()', 'center(', 'collectReplacements(', 'count(',
-                    'decodeBase64()', 'decodeHex()', 'denormalize()',
-                    'eachLine(', 'eachMatch(', 'execute()', 'execute(',
-                    'find(', 'findAll(',
-                    'isAllWhitespace()', 'isBigDecimal()', 'isBigInteger()', 'isDouble()', 'isFloat()', 'isInteger()', 'isLong()', 'isNumber()',
-                    'normalize()', 
-                    'padLeft(', 'padRight(',
-                    'readLines()', 'reverse()', 
-                    'size()', 'splitEachLine(', 'stripIndent(', 'stripMargin(',
-                    'toBigDecimal()', 'toBigInteger()', 'toBoolean()', 'toCharacter()', 'toDouble()', 'toFloat()', 'toInteger()',
-                    'toList()', 'toLong()', 'toSet()', 'toShort()', 'toURI()', 'toURL()',
-                    'tokenize(', 'tr('
-            ].findAll({it.startsWith(prefix)}).each({candidates.add(it)})
-        }
-        if (instance instanceof URL) {
-            [
-                    'eachLine(',
-                    'filterLine(',
-                    'getBytes()', 'getBytes(', 'getText()', 'getText(',
-                    'newInputStream()', 'newInputStream(', 'newReader()', 'newReader(',
-                    'readLines()', 'readLines(',
-                    'splitEachLine(',
-                    'withInputStream(', 'withReader('
-            ].findAll({it.startsWith(prefix)}).each({candidates.add(it)})
-        }
-        if (instance instanceof InputStream) {
-            [
-                    'eachLine(',
-                    'filterLine(',
-                    'getBytes()', 'getText()', 'getText(',
-                    'newReader()', 'newReader(',
-                    'readLines()', 'readLines(',
-                    'splitEachLine(',
-                    'withReader(', 'withStream('
-            ].findAll({it.startsWith(prefix)}).each({candidates.add(it)})
-        }
-        if (instance instanceof OutputStream) {
-            [
-                    'newPrintWriter()', 'newWriter()', 'newWriter(',
-                    'setBytes(',
-                    'withPrintWriter(', 'withStream(', 'withWriter('
-            ].findAll({it.startsWith(prefix)}).each({candidates.add(it)})
-        }
-        if (instance instanceof Number) {
-            [
-                    'abs()',
-                    'downto(',
-                    'times(',
-                    'power(',
-                    'upto('
-            ].findAll({it.startsWith(prefix)}).each({candidates.add(it)})
-        }
-        Class clazz = instance.getClass()
-        if (clazz != null && clazz != Class && clazz.isArray()) {
-            [
-                    'any()', 'any(',
-                    'collect()', 'collect(',
-                    'count(',
-                    'countBy(',
-                    'drop(', 'dropRight(', 'dropWhile(',
-                    'each()', 'each(',
-                    'every()', 'every(',
-                    'find(', 'findResult(',
-                    'flatten()',
-                    'init()',
-                    'inject(',
-                    'join(',
-                    'max()', 'min()',
-                    'reverse()',
-                    'size()',
-                    'sort()',
-                    'split(',
-                    'take(', 'takeRight(', 'takeWhile('
-            ].findAll({it.startsWith(prefix)}).each({candidates.add(it)})
-        }
-        return candidates
-    }
-
-    private static Collection<ReflectionCompletionCandidate> addClassFieldsAndMethods(final Class clazz,
-                                                                            final boolean includeStatic,
-                                                                            final boolean includeNonStatic,
-                                                                            final String prefix,
-                                                                            final Collection<ReflectionCompletionCandidate> rv,
-                                                                            final boolean renderBold) {
-
-        Field[] fields = (includeStatic && ! includeNonStatic) ? clazz.fields : clazz.getDeclaredFields()
-        fields.each { Field fit ->
-            if (acceptName(fit.name, prefix)) {
-                int modifiers = fit.getModifiers()
-                if (Modifier.isPublic(modifiers) && (Modifier.isStatic(modifiers) ? includeStatic : includeNonStatic)) {
-                    if (!clazz.isEnum()
-                            || !(!includeStatic && Modifier.isPublic(modifiers) && Modifier.isFinal(modifiers) && Modifier.isStatic(modifiers) && fit.type == clazz)) {
-                        ReflectionCompletionCandidate candidate = new ReflectionCompletionCandidate(fit.name)
-                        if (!Modifier.isStatic(modifiers)) {
-                            if (renderBold) {
-                                candidate.jAnsiCodes.add(Ansi.Attribute.INTENSITY_BOLD.name())
-                            }
-                        }
-                        rv << candidate
-                    }
-                }
-            }
-        }
-        Method[] methods = (includeStatic && ! includeNonStatic) ? clazz.methods : clazz.getDeclaredMethods()
-        for (Method methIt : methods) {
-            String name = methIt.getName()
-            if (name.startsWith("super\$")) {
-                name = name.substring(name.find("^super\\\$.*\\\$").length())
-            }
-            int modifiers = methIt.getModifiers()
-            if (Modifier.isPublic(modifiers) && (Modifier.isStatic(modifiers) ? includeStatic : includeNonStatic)) {
-                boolean fieldnameSuggested = false
-                // bean fieldname can be used instead of accessor, tidies up completion candidates
-                // the same goes for static fields // accessors
-                if (name.matches(BEAN_ACCESSOR_PATTERN)) {
-                    String fieldname = getFieldnameForAccessor(name, methIt.parameterTypes.length)
-                    if (fieldname != null && fieldname != 'metaClass' && fieldname != 'property') {
-                        if (acceptName(fieldname, prefix)) {
-                            fieldnameSuggested = true
-                            ReflectionCompletionCandidate fieldCandidate = new ReflectionCompletionCandidate(fieldname)
-                            if (!rv.contains(fieldCandidate)) {
-                                if (!Modifier.isStatic(modifiers) && renderBold) {
-                                    fieldCandidate.jAnsiCodes.add(Ansi.Attribute.INTENSITY_BOLD.name())
-                                }
-
-                                rv.add(fieldCandidate)
-                            }
-                        }
-                    }
-                }
-                if (! fieldnameSuggested && acceptName(name, prefix)) {
-                    ReflectionCompletionCandidate candidate = new ReflectionCompletionCandidate(name + (methIt.parameterTypes.length == 0 ? '()' : '('))
-                    if (!Modifier.isStatic(modifiers) && renderBold) {
-                        candidate.jAnsiCodes.add(Ansi.Attribute.INTENSITY_BOLD.name())
-                    }
-                    rv.add(candidate)
-                }
-            }
-        }
-
-        for (Class interface_ : clazz.getInterfaces()) {
-            addClassFieldsAndMethods(interface_, includeStatic, includeNonStatic, prefix, rv, false)
-        }
-    }
-
-    static CharSequence getFieldnameForAccessor(String accessor, int parameterLength) {
-        String fieldname = null
-        if (accessor.startsWith('get')) {
-            if (parameterLength == 0) {
-                fieldname = accessor.substring(3)
-            }
-        } else if (accessor.startsWith('set')) {
-            if (parameterLength == 1) {
-                fieldname = accessor.substring(3)
-            }
-        } else if (accessor.startsWith('is')) {
-            if (parameterLength == 0) {
-                fieldname = accessor.substring(2)
-            }
-        } else {
-            throw new IllegalStateException('getFieldnameForAccessor called with invalid accessor : ' + accessor)
-        }
-        if (fieldname == null) {
-            return null
-        }
-        return fieldname[0].toLowerCase() + fieldname.substring(1)
-    }
-}
diff --git a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/completion/StricterArgumentCompleter.groovy b/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/completion/StricterArgumentCompleter.groovy
deleted file mode 100644
index 010ef70..0000000
--- a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/completion/StricterArgumentCompleter.groovy
+++ /dev/null
@@ -1,133 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.tools.shell.completion
-
-import groovy.transform.CompileStatic
-import jline.console.completer.ArgumentCompleter
-import jline.console.completer.ArgumentCompleter.ArgumentDelimiter
-import jline.console.completer.ArgumentCompleter.ArgumentList
-import jline.console.completer.Completer
-import jline.internal.Log
-
-import static jline.internal.Preconditions.checkNotNull
-
-/**
- * This fixes strict jline 2.12 ArgumentCompleter
- * See https://github.com/jline/jline2/pull/202
- */
-@CompileStatic
-@Deprecated
-class StricterArgumentCompleter extends ArgumentCompleter {
-
-    /**
-     *  Create a new completer with the default
-     * {@link jline.console.completer.ArgumentCompleter.WhitespaceArgumentDelimiter}.
-     *
-     * @param completers The embedded completers
-     */
-    StricterArgumentCompleter(List<Completer> completers) {
-        super(completers)
-    }
-
-    int complete(final String buffer, final int cursor, final List<CharSequence> candidates) {
-        // buffer can be null
-        checkNotNull(candidates)
-
-        ArgumentDelimiter delim = delimiter
-        ArgumentList list = delim.delimit(buffer, cursor)
-        int argpos = list.argumentPosition
-        int argIndex = list.cursorArgumentIndex
-
-        if (argIndex < 0) {
-            return -1
-        }
-
-        List<Completer> completers = getCompleters()
-        Completer completer
-
-        // if we are beyond the end of the completers, just use the last one
-        if (argIndex >= completers.size()) {
-            completer = completers.get(completers.size() - 1)
-        } else {
-            completer = completers.get(argIndex)
-        }
-
-        // ensure that all the previous completers are successful before allowing this completer to pass (only if strict).
-        for (int i = 0; isStrict() && (i < argIndex); i++) {
-            Completer sub = completers.get(i >= completers.size() ? (completers.size() - 1) : i)
-            String[] args = list.getArguments()
-            String arg = (args == null || i >= args.length) ? "" : args[i]
-
-            List<CharSequence> subCandidates = new LinkedList<CharSequence>()
-            int offset = sub.complete(arg, arg.length(), subCandidates)
-            if (offset == -1) {
-                return -1
-            }
-
-            // for strict matching, one of the candidates must equal the current argument "arg",
-            // starting from offset within arg, but the suitable candidate may actually also have a
-            // delimiter at the end.
-            boolean candidateMatches = false
-            for (CharSequence subCandidate : subCandidates) {
-                // each Subcandidate may end with the delimiter.
-                // That it contains the delimiter is possible, but not likely.
-                String[] candidateDelimList = delim.delimit(subCandidate, 0).arguments
-                if (candidateDelimList.length == 0) {
-                    continue
-                }
-                String trimmedCand = candidateDelimList[0]
-                if (trimmedCand.equals(arg.substring(offset))) {
-                    candidateMatches = true
-                    break
-                }
-            }
-            if (!candidateMatches) {
-                return -1
-            }
-        }
-
-        int ret = completer.complete(list.getCursorArgument(), argpos, candidates)
-
-        if (ret == -1) {
-            return -1
-        }
-
-        int pos = ret + list.bufferPosition - argpos
-
-        // Special case: when completing in the middle of a line, and the area under the cursor is a delimiter,
-        // then trim any delimiters from the candidates, since we do not need to have an extra delimiter.
-        //
-        // E.g., if we have a completion for "foo", and we enter "f bar" into the buffer, and move to after the "f"
-        // and hit TAB, we want "foo bar" instead of "foo  bar".
-
-        if ((cursor != buffer.length()) && delim.isDelimiter(buffer, cursor)) {
-            for (int i = 0; i < candidates.size(); i++) {
-                CharSequence val = candidates.get(i)
-                while (val.length() > 0 && delim.isDelimiter(val, val.length() - 1)) {
-                    val = val.subSequence(0, val.length() - 1)
-                }
-                candidates.set(i, val)
-            }
-        }
-
-        Log.trace("Completing ", buffer, " (pos=", cursor, ") with: ", candidates, ": offset=", pos)
-
-        return pos
-    }
-}
diff --git a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/completion/VariableSyntaxCompletor.groovy b/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/completion/VariableSyntaxCompletor.groovy
deleted file mode 100644
index b063c4e..0000000
--- a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/completion/VariableSyntaxCompletor.groovy
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.tools.shell.completion
-
-import org.codehaus.groovy.antlr.GroovySourceToken
-import org.codehaus.groovy.runtime.MethodClosure
-import org.codehaus.groovy.tools.shell.Groovysh
-
-/**
- * Completor completing variable and method names from known variables in the shell
- */
-@Deprecated
-class VariableSyntaxCompletor implements IdentifierCompletor {
-
-    final Groovysh shell
-
-    VariableSyntaxCompletor(final Groovysh shell) {
-        this.shell = shell
-    }
-
-    @Override
-    boolean complete(final List<GroovySourceToken> tokens, final List<CharSequence> candidates) {
-        String prefix = tokens.last().text
-        Map vars = shell.interp.context.variables
-        boolean foundMatch = false
-        for (String varName in vars.keySet()) {
-            if (acceptName(varName, prefix)) {
-                if (vars.get(varName) instanceof MethodClosure) {
-                    if (((MethodClosure) vars.get(varName)).getMaximumNumberOfParameters() > 0) {
-                        varName += '('
-                    } else {
-                        varName += '()'
-                    }
-                }
-                foundMatch = true
-                candidates << varName
-            }
-        }
-        return foundMatch
-    }
-
-
-    private static boolean acceptName(String name, String prefix) {
-        return (!prefix || name.startsWith(prefix)) &&
-               (!(name.contains('$')) && !(name.startsWith('_')))
-    }
-}
diff --git a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/package.html b/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/package.html
deleted file mode 100644
index 7ab22a2..0000000
--- a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/package.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<!--
-
-     Licensed to the Apache Software Foundation (ASF) under one
-     or more contributor license agreements.  See the NOTICE file
-     distributed with this work for additional information
-     regarding copyright ownership.  The ASF licenses this file
-     to you under the Apache License, Version 2.0 (the
-     "License"); you may not use this file except in compliance
-     with the License.  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing,
-     software distributed under the License is distributed on an
-     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-     KIND, either express or implied.  See the License for the
-     specific language governing permissions and limitations
-     under the License.
-
--->
-<html>
-    <body>
-        <p>
-            Provides support for the Groovy Shell (aka. <tt>groovysh</tt>).
-        </p>
-    </body>
-</html>
-
diff --git a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/util/CommandArgumentParser.groovy b/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/util/CommandArgumentParser.groovy
deleted file mode 100644
index a25a00b..0000000
--- a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/util/CommandArgumentParser.groovy
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.tools.shell.util
-
-import groovy.transform.CompileStatic
-
-@CompileStatic
-@Deprecated
-class CommandArgumentParser {
-
-    /**
-     * takes a String and tokenizes it according to posix-shell-like rules, meaning
-     * arguments are separated by non-escaped blanks or hyphens, and hyphens wrap tokens regardless
-     * of blanks, other hyphens or escaped hyphens within the wrapping hyphens.
-     *
-     * Example: "foo bar 123'456' 'abc\'def\\' ''"  has 6 tokens:
-     * ["foo", "bar", "123", "456", "abc'def\", ""]
-     *
-     * @param untrimmedLine
-     * @param numTokensToCollect stop processing after so many tokens, negative means unlimited
-     * @return
-     */
-    static List<String> parseLine(final String untrimmedLine, final int numTokensToCollect = -1) {
-        assert untrimmedLine != null
-
-        final String line = untrimmedLine.trim()
-        List<String> tokens = []
-        String currentToken = ''
-        // state machine being either in neutral state, in singleHyphenOpen state, or in doubleHyphenOpen State.
-        boolean singleHyphenOpen = false
-        boolean doubleHyphenOpen = false
-        int index = 0
-        for (; index < line.length(); index++) {
-            if (tokens.size() == numTokensToCollect) {
-                break
-            }
-            String ch = line.charAt(index)
-            // escaped char? -> maybe unescape
-            if (ch == '\\') {
-                if (index >= line.length() - 1) {
-                    // end reached
-                    currentToken += ch
-                    continue
-                }
-                if (singleHyphenOpen || doubleHyphenOpen) {
-                    // add escaped, no other parsing action
-                    currentToken += ch
-                    index++
-                    currentToken += line.charAt(index)
-                    continue
-                } else {
-                    // unescape, only add char after, no parsing action
-                    index++
-                    currentToken += line.charAt(index)
-                    continue
-                }
-            }
-
-            if (ch == '"' && !singleHyphenOpen) {
-                if (doubleHyphenOpen) {
-                    tokens.add(currentToken)
-                    currentToken = ''
-                    doubleHyphenOpen = false
-                } else {
-                    if (currentToken.size() > 0) {
-                        tokens.add(currentToken)
-                        currentToken = ''
-                    }
-                    doubleHyphenOpen = true
-                }
-                continue
-            }
-            if (ch == '\'' && !doubleHyphenOpen) {
-                if (singleHyphenOpen) {
-                    tokens.add(currentToken)
-                    currentToken = ''
-                    singleHyphenOpen = false
-                } else {
-                    if (currentToken.size() > 0) {
-                        tokens.add(currentToken)
-                        currentToken = ''
-                    }
-                    singleHyphenOpen = true
-                }
-                continue
-            }
-            if (ch == ' ' && !doubleHyphenOpen && !singleHyphenOpen) {
-                if (currentToken.size() > 0) {
-                    tokens.add(currentToken)
-                    currentToken = ''
-                }
-                continue
-            }
-            currentToken += ch
-        } // end for char in line
-        if (index == line.length() && doubleHyphenOpen) {
-            throw new IllegalArgumentException('Missing closing " in ' + line + ' -- ' + tokens)
-        }
-        if (index == line.length() && singleHyphenOpen) {
-            throw new IllegalArgumentException('Missing closing \' in ' + line  + ' -- ' + tokens)
-        }
-        if (currentToken.size() > 0) {
-            tokens.add(currentToken)
-        }
-        return tokens
-    }
-}
diff --git a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/util/CurlyCountingGroovyLexer.groovy b/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/util/CurlyCountingGroovyLexer.groovy
deleted file mode 100644
index ab87996..0000000
--- a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/util/CurlyCountingGroovyLexer.groovy
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.tools.shell.util
-
-import org.codehaus.groovy.antlr.GroovySourceToken
-import org.codehaus.groovy.antlr.SourceBuffer
-import org.codehaus.groovy.antlr.UnicodeEscapingReader
-import org.codehaus.groovy.antlr.parser.GroovyLexer
-import org.codehaus.groovy.antlr.parser.GroovyTokenTypes
-
-/**
- * patching GroovyLexer to get access to Paren level
- */
-@Deprecated
-class CurlyCountingGroovyLexer extends GroovyLexer {
-
-    private endReached = false
-
-    protected CurlyCountingGroovyLexer(Reader reader) {
-        super(reader)
-    }
-
-    static CurlyCountingGroovyLexer createGroovyLexer(String src) {
-        Reader unicodeReader = new UnicodeEscapingReader(new StringReader(src.toString()), new SourceBuffer())
-        CurlyCountingGroovyLexer lexer = new CurlyCountingGroovyLexer(unicodeReader)
-        unicodeReader.setLexer(lexer)
-        return lexer
-    }
-
-    int getParenLevel() {
-        return parenLevelStack.size()
-    }
-
-    // called by nextToken()
-    @Override
-    void uponEOF() {
-        super.uponEOF()
-        endReached = true
-    }
-
-    List<GroovySourceToken> toList() {
-        List<GroovySourceToken> tokens = []
-        GroovySourceToken token
-        while (! endReached) {
-            token = nextToken() as GroovySourceToken
-            tokens.add(token)
-            if (token.type == GroovyTokenTypes.EOF) {
-                break
-            }
-        }
-        return tokens
-    }
-}
diff --git a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/util/DefaultCommandsRegistrar.groovy b/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/util/DefaultCommandsRegistrar.groovy
deleted file mode 100644
index 5ad8ec9..0000000
--- a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/util/DefaultCommandsRegistrar.groovy
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.tools.shell.util
-
-import org.codehaus.groovy.tools.shell.Command
-import org.codehaus.groovy.tools.shell.Shell
-import org.codehaus.groovy.tools.shell.commands.AliasCommand
-import org.codehaus.groovy.tools.shell.commands.ClearCommand
-import org.codehaus.groovy.tools.shell.commands.DisplayCommand
-import org.codehaus.groovy.tools.shell.commands.DocCommand
-import org.codehaus.groovy.tools.shell.commands.EditCommand
-import org.codehaus.groovy.tools.shell.commands.ExitCommand
-import org.codehaus.groovy.tools.shell.commands.GrabCommand
-import org.codehaus.groovy.tools.shell.commands.HelpCommand
-import org.codehaus.groovy.tools.shell.commands.HistoryCommand
-import org.codehaus.groovy.tools.shell.commands.ImportCommand
-import org.codehaus.groovy.tools.shell.commands.InspectCommand
-import org.codehaus.groovy.tools.shell.commands.LoadCommand
-import org.codehaus.groovy.tools.shell.commands.PurgeCommand
-import org.codehaus.groovy.tools.shell.commands.RecordCommand
-import org.codehaus.groovy.tools.shell.commands.RegisterCommand
-import org.codehaus.groovy.tools.shell.commands.SaveCommand
-import org.codehaus.groovy.tools.shell.commands.SetCommand
-import org.codehaus.groovy.tools.shell.commands.ShowCommand
-
-/**
- * Registers {@link Command} classes from an XML file like:
- * <commands>
- *  <command>org.codehaus.groovy.tools.shell.commands.HelpCommand</command>
- * ...
- * </commands>
- */
-@Deprecated
-class DefaultCommandsRegistrar
-{
-
-    private final Shell shell
-
-    DefaultCommandsRegistrar(final Shell shell) {
-        assert shell != null
-
-        this.shell = shell
-    }
-
-    void register() {
-
-        for (Command classname in [
-                new HelpCommand(shell),
-                new ExitCommand(shell),
-                new ImportCommand(shell),
-                new DisplayCommand(shell),
-                new ClearCommand(shell),
-                new ShowCommand(shell),
-                new InspectCommand(shell),
-                new PurgeCommand(shell),
-                new EditCommand(shell),
-                new LoadCommand(shell),
-                new SaveCommand(shell),
-                new RecordCommand(shell),
-                new HistoryCommand(shell),
-                new AliasCommand(shell),
-                new SetCommand(shell),
-                new GrabCommand(shell),
-                // does not do anything
-                //new ShadowCommand(shell),
-                new RegisterCommand(shell),
-                new DocCommand(shell)
-        ]) {
-            shell.register(classname)
-        }
-
-    }
-}
diff --git a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/util/NoExitSecurityManager.groovy b/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/util/NoExitSecurityManager.groovy
deleted file mode 100644
index ec8d142..0000000
--- a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/util/NoExitSecurityManager.groovy
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.tools.shell.util
-
-import java.security.Permission
-
-/**
- * Custom security manager to {@link System#exit} (and related) from being used.
- */
-@Deprecated
-public class NoExitSecurityManager
-    extends SecurityManager
-{
-    private final SecurityManager parent
-
-    public NoExitSecurityManager(final SecurityManager parent) {
-        this.parent = parent
-    }
-
-    public NoExitSecurityManager() {
-        this(System.getSecurityManager())
-    }
-
-    @Override
-    public void checkPermission(final Permission perm) {
-        if (parent != null) {
-            parent.checkPermission(perm)
-        }
-    }
-
-    /**
-     * Always throws {@link SecurityException}.
-     */
-    @Override
-    public void checkExit(final int code) {
-        throw new SecurityException('Use of System.exit() is forbidden!')
-    }
-
-    /*
-    public void checkPermission(final Permission perm) {
-        assert perm != null
-
-        if (perm.getName().equals("exitVM")) {
-            System.out.println("exitVM")
-        }
-    }
-    */
-}
diff --git a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/util/PackageHelper.groovy b/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/util/PackageHelper.groovy
deleted file mode 100644
index 42d75a3..0000000
--- a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/util/PackageHelper.groovy
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.tools.shell.util
-
-@Deprecated
-interface PackageHelper {
-
-    public static final String IMPORT_COMPLETION_PREFERENCE_KEY = 'disable-import-completion'
-
-    Set<String> getContents(final String packagename)
-
-    void reset()
-
-}
diff --git a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/util/PackageHelperImpl.groovy b/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/util/PackageHelperImpl.groovy
deleted file mode 100644
index 5a6556d..0000000
--- a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/util/PackageHelperImpl.groovy
+++ /dev/null
@@ -1,487 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.tools.shell.util
-
-import groovy.transform.CompileDynamic
-import groovy.transform.CompileStatic
-
-import java.util.jar.JarEntry
-import java.util.jar.JarFile
-import java.util.prefs.PreferenceChangeEvent
-import java.util.prefs.PreferenceChangeListener
-import java.util.regex.Pattern
-import java.util.zip.ZipException
-
-/**
- * Helper class that crawls all items of the classpath for packages.
- * Retrieves from those sources the list of subpackages and classes on demand.
- */
-@CompileStatic
-@Deprecated
-class PackageHelperImpl implements PreferenceChangeListener, PackageHelper {
-
-    // Pattern for regular Classnames
-    public static final Pattern NAME_PATTERN = ~('^[A-Z][^.\$_]+\$')
-
-    private static final String CLASS_SUFFIX = '.class'
-    protected static final Logger LOG = Logger.create(PackageHelperImpl)
-
-    Map<String, CachedPackage> rootPackages = null
-    final ClassLoader groovyClassLoader
-
-    PackageHelperImpl(final ClassLoader groovyClassLoader=null) {
-        this.groovyClassLoader = groovyClassLoader
-        initializePackages()
-        Preferences.addChangeListener(this)
-    }
-
-    void reset() {
-        initializePackages()
-    }
-
-    private void initializePackages() {
-        if (! Boolean.valueOf(Preferences.get(IMPORT_COMPLETION_PREFERENCE_KEY))) {
-            rootPackages = getPackages(this.groovyClassLoader)
-        }
-    }
-
-    @Override
-    void preferenceChange(final PreferenceChangeEvent evt) {
-        if (evt.key == IMPORT_COMPLETION_PREFERENCE_KEY) {
-            if (Boolean.valueOf(evt.getNewValue())) {
-                rootPackages = null
-            } else if (rootPackages == null) {
-                initializePackages()
-            }
-        }
-    }
-
-    private static Map<String, CachedPackage> getPackages(final ClassLoader groovyClassLoader) throws IOException {
-        Map<String, CachedPackage> rootPackages = new HashMap()
-        Set<URL> urls = new HashSet<URL>()
-
-        // classes in CLASSPATH
-        for (ClassLoader loader = groovyClassLoader; loader != null; loader = loader.parent) {
-            if (!(loader instanceof URLClassLoader)) {
-                LOG.debug('Ignoring classloader for completion: ' + loader)
-                continue
-            }
-
-            urls.addAll(((URLClassLoader)loader).URLs)
-        }
-
-        // System classes
-        Class[] systemClasses = [String, javax.swing.JFrame, GroovyObject] as Class[]
-        boolean jigsaw = false
-        systemClasses.each { Class systemClass ->
-            // normal slash even in Windows
-            String classfileName = systemClass.name.replace('.', '/') + '.class'
-            URL classURL = systemClass.getResource(classfileName)
-            if (classURL == null) {
-                // this seems to work on Windows better than the earlier approach
-                classURL = Thread.currentThread().contextClassLoader.getResource(classfileName)
-            }
-            if (classURL != null) {
-                URLConnection uc = classURL.openConnection()
-                if (uc instanceof JarURLConnection) {
-                    urls.add(((JarURLConnection) uc).getJarFileURL())
-                } else if (uc.getClass().getSimpleName().equals("JavaRuntimeURLConnection")) {
-                    // Java 9 Jigsaw detected
-                    jigsaw = true
-                } else {
-                    String filepath = classURL.toExternalForm()
-                    String rootFolder = filepath.substring(0, filepath.length() - classfileName.length() - 1)
-                    urls.add(new URL(rootFolder))
-                }
-            }
-        }
-
-        for (URL url : urls) {
-            Collection<String> packageNames = getPackageNames(url)
-            if (packageNames) {
-                mergeNewPackages(packageNames, url, rootPackages)
-            }
-        }
-        if (jigsaw || isModularRuntime()) {
-            URL jigsawURL = URI.create("jrt:/").toURL()
-            Set<String> jigsawPackages = getPackagesAndClassesFromJigsaw(jigsawURL)  { isPackage, name -> isPackage && name }
-            mergeNewPackages(jigsawPackages, jigsawURL, rootPackages)
-        }
-        return rootPackages
-    }
-
-    // TODO: review after jdk9 is released
-    @CompileDynamic
-    private static boolean isModularRuntime() {
-        try {
-            return this.classLoader.loadClass('java.lang.reflect.Module', false) != null
-        } catch (e) {
-            return false
-        }
-    }
-
-    /**
-     * This method returns packages or classes listed from Jigsaw modules.
-     * It makes use of a GroovyShell in order to avoid a hard dependency
-     * to JDK 7+ when building the Groovysh module (uses nio2)
-     * @return
-     */
-    private static Set<String> getPackagesAndClassesFromJigsaw(URL jigsawURL, Closure<Boolean> predicate) {
-        def shell = new GroovyShell()
-        shell.setProperty('predicate', predicate)
-        String jigsawURLString = jigsawURL.toString()
-        shell.setProperty('jigsawURLString', jigsawURLString)
-        shell.evaluate '''import java.nio.file.*
-
-def fs = FileSystems.newFileSystem(URI.create(jigsawURLString), [:])
-
-result = [] as Set
-
-def filterPackageName(Path path) {
-    def elems = "$path".split('/')
-
-    if (elems && elems.length > 2) {
-        // remove e.g. 'modules/java.base/
-        elems = elems[2..<elems.length]
-
-        def name = elems.join('.')
-        if (predicate(true, name)) {
-            result << name
-        }
-    }
-}
-
-def filterClassName(Path path) {
-    def elems = "$path".split('/')
-
-    if (elems && elems.length > 2) {
-        // remove e.g. 'modules/java.base/
-        elems = elems[2..<elems.length]
-
-        def name = elems.join('.')
-        if (name.endsWith('.class')) {
-            name = name.substring(0, name.lastIndexOf('.'))
-            if (predicate(false, name)) {
-                result << name
-            }
-        }
-    }
-}
-
-class GroovyFileVisitor extends SimpleFileVisitor {}
-
-// walk each file and directory, possibly storing directories as packages, and files as classes
-Files.walkFileTree(fs.getPath('modules'),
-        [preVisitDirectory: { dir, attrs -> filterPackageName(dir); FileVisitResult.CONTINUE },
-         visitFile: { file, attrs -> filterClassName(file); FileVisitResult.CONTINUE}
-        ]
-            as GroovyFileVisitor)
-'''
-
-        Set<String> jigsawPackages = (Set<String>) shell.getProperty('result')
-
-        jigsawPackages
-    }
-
-    static mergeNewPackages(final Collection<String> packageNames, final URL url,
-                            final Map<String, CachedPackage> rootPackages) {
-        StringTokenizer tokenizer
-        packageNames.each { String packname ->
-            tokenizer = new StringTokenizer(packname, '.')
-            if (!tokenizer.hasMoreTokens()) {
-                return
-            }
-            String rootname = tokenizer.nextToken()
-            CachedPackage cp
-            CachedPackage childp
-            cp = rootPackages.get(rootname, null) as CachedPackage
-            if (cp == null) {
-                cp = new CachedPackage(rootname, [url] as Set)
-                rootPackages.put(rootname, cp)
-            }
-
-            while(tokenizer.hasMoreTokens()) {
-                String packbasename = tokenizer.nextToken()
-                if (cp.childPackages == null) {
-                    // small initial size, to save memory
-                    cp.childPackages = new HashMap<String, CachedPackage>(1)
-                }
-                childp = cp.childPackages.get(packbasename, null) as CachedPackage
-                if (childp == null) {
-                    // start with small arraylist, to save memory
-                    Set<URL> urllist = new HashSet<URL>(1)
-                    urllist.add(url)
-                    childp = new CachedPackage(packbasename, urllist)
-                    cp.childPackages.put(packbasename, childp)
-                } else {
-                    childp.sources.add(url)
-                }
-                cp = childp
-            }
-        }
-    }
-
-    /**
-     * Returns all packagenames found at URL, accepts jar files and folders
-     * @param url
-     * @return
-     */
-    static Collection<String> getPackageNames(final URL url) {
-        //log.debug(url)
-        String path = URLDecoder.decode(url.getFile(), 'UTF-8')
-        File urlfile = new File(path)
-        if (urlfile.isDirectory()) {
-            Set<String> packnames = new HashSet<String>()
-            collectPackageNamesFromFolderRecursive(urlfile, '', packnames)
-            return packnames
-        }
-
-        if (urlfile.path.endsWith('.jar')) {
-            try {
-                JarFile jf = new JarFile(urlfile)
-                return getPackageNamesFromJar(jf)
-            } catch(ZipException ze) {
-                if (LOG.debugEnabled) {
-                    ze.printStackTrace()
-                }
-                LOG.debug("Error opening zipfile : '${url.getFile()}',  ${ze.toString()}")
-            } catch (FileNotFoundException fnfe) {
-                LOG.debug("Error opening file : '${url.getFile()}',  ${fnfe.toString()}")
-            }
-        }
-        return []
-    }
-
-    /**
-     * Crawls a folder, iterates over subfolders, looking for class files.
-     * @param directory
-     * @param prefix
-     * @param packnames
-     * @return
-     */
-    static Collection<String> collectPackageNamesFromFolderRecursive(final File directory, final String prefix,
-                                                                     final Set<String> packnames) {
-        //log.debug(directory)
-        File[] files = directory.listFiles()
-        boolean packageAdded = false
-
-        for (int i = 0; (files != null) && (i < files.length); i++) {
-            if (files[i].isDirectory()) {
-                if (files[i].name.startsWith('.')) {
-                    return
-                }
-                String optionalDot = prefix ? '.' : ''
-                collectPackageNamesFromFolderRecursive(files[i], prefix + optionalDot + files[i].name, packnames)
-            } else if (! packageAdded) {
-                if (files[i].name.endsWith(CLASS_SUFFIX)) {
-                    packageAdded = true
-                    if (prefix) {
-                        packnames.add(prefix)
-                    }
-                }
-            }
-        }
-    }
-
-
-    static Collection<String> getPackageNamesFromJar(final JarFile jf) {
-        Set<String> packnames = new HashSet<String>()
-        for (Enumeration e = jf.entries(); e.hasMoreElements();) {
-            JarEntry entry = (JarEntry) e.nextElement()
-
-            if (entry == null) {
-                continue
-            }
-
-            String name = entry.name
-
-            if (!name.endsWith(CLASS_SUFFIX)) {
-                // only use class files
-                continue
-            }
-            // normal slashes also on Windows
-            String fullname = name.replace('/', '.').substring(0, name.length() - CLASS_SUFFIX.length())
-            // Discard classes in the default package
-            if (fullname.lastIndexOf('.') > -1) {
-                packnames.add(fullname.substring(0, fullname.lastIndexOf('.')))
-            }
-        }
-        return packnames
-    }
-
-    // following block does not work, because URLClassLoader.packages only ever returns SystemPackages
-    /*static Collection<String> getPackageNames(URL url) {
-        URLClassLoader urlLoader = new URLClassLoader([url] as URL[])
-        //log.debug(urlLoader.packages.getClass())
-
-        urlLoader.getPackages().collect {Package pack ->
-            pack.name
-        }
-    }*/
-
-    /**
-     * returns the names of Classes and direct subpackages contained in a package
-     * @param packagename
-     * @return
-     */
-    @CompileStatic
-    Set<String> getContents(final String packagename) {
-        if (! rootPackages) {
-            return [] as Set
-        }
-        if (! packagename) {
-            return rootPackages.collect { String key, CachedPackage v -> key } as Set
-        }
-        String sanitizedPackageName
-        if (packagename.endsWith('.*')) {
-            sanitizedPackageName = packagename[0..-3]
-        } else {
-            sanitizedPackageName = packagename
-        }
-
-        StringTokenizer tokenizer = new StringTokenizer(sanitizedPackageName, '.')
-        CachedPackage cp = rootPackages.get(tokenizer.nextToken())
-        while (cp != null && tokenizer.hasMoreTokens()) {
-            String token = tokenizer.nextToken()
-            if (cp.childPackages == null) {
-                // no match for taken,no subpackages known
-                return [] as Set
-            }
-            cp = cp.childPackages.get(token) as CachedPackage
-        }
-        if (cp == null) {
-            return [] as Set
-        }
-        // TreeSet for ordering
-        Set<String> children = new TreeSet()
-        if (cp.childPackages) {
-            children.addAll(cp.childPackages.collect { String key, CachedPackage v -> key })
-        }
-        if (cp.checked && !cp.containsClasses) {
-            return children
-        }
-
-        Set<String> classnames = getClassnames(cp.sources, sanitizedPackageName)
-
-        cp.checked = true
-        if (classnames) {
-            cp.containsClasses = true
-            children.addAll(classnames)
-        }
-        return children
-    }
-
-    /**
-     * Copied from JLine 1.0 ClassNameCompletor
-     * @param urls
-     * @param packagename
-     * @return
-     */
-    static Set<String> getClassnames(final Set<URL> urls, final String packagename) {
-        Set<String> classes = new TreeSet<String>()
-        // normal slash even in Windows
-        String pathname = packagename.replace('.', '/')
-        for (Iterator<URL> it = urls.iterator(); it.hasNext();) {
-            URL url = it.next()
-            if (url.protocol == 'jrt') {
-                getPackagesAndClassesFromJigsaw(url) { boolean isPackage, String name ->
-                    !isPackage && name.startsWith(packagename)
-                }.collect(classes) { it - "${packagename}." }
-            } else {
-                File file = new File(URLDecoder.decode(url.getFile(), 'UTF-8'))
-                if (file == null) {
-                    continue
-                }
-                if (file.isDirectory()) {
-                    File packFolder = new File(file, pathname)
-                    if (!packFolder.isDirectory()) {
-                        continue
-                    }
-                    File[] files = packFolder.listFiles()
-                    for (int i = 0; (files != null) && (i < files.length); i++) {
-                        if (files[i].isFile()) {
-                            String filename = files[i].name
-                            if (filename.endsWith(CLASS_SUFFIX)) {
-                                String name = filename.substring(0, filename.length() - CLASS_SUFFIX.length())
-                                if (!name.matches(NAME_PATTERN)) {
-                                    continue
-                                }
-                                classes.add(name)
-                            }
-                        }
-                    }
-                    continue
-                }
-
-                if (!file.toString().endsWith('.jar')) {
-                    continue
-                }
-
-                JarFile jf = new JarFile(file)
-
-                try {
-                    for (Enumeration e = jf.entries(); e.hasMoreElements();) {
-                        JarEntry entry = (JarEntry) e.nextElement()
-
-                        if (entry == null) {
-                            continue
-                        }
-
-                        String name = entry.name
-
-                        // only use class files
-                        if (!name.endsWith(CLASS_SUFFIX)) {
-                            continue
-                        }
-                        // normal slash inside jars even on windows
-                        int lastslash = name.lastIndexOf('/')
-                        if (lastslash == -1 || name.substring(0, lastslash) != pathname) {
-                            continue
-                        }
-                        name = name.substring(lastslash + 1, name.length() - CLASS_SUFFIX.length())
-                        if (!name.matches(NAME_PATTERN)) {
-                            continue
-                        }
-                        classes.add(name)
-                    }
-                } finally {
-                    jf.close()
-                }
-            }
-        }
-
-
-        return classes
-    }
-}
-
-@CompileStatic
-@Deprecated
-class CachedPackage {
-    String name
-    boolean containsClasses
-    boolean checked
-    Map<String, CachedPackage> childPackages
-    Set<URL> sources
-
-    CachedPackage(String name, Set<URL> sources) {
-        this.sources = sources
-        this.name = name
-    }
-}
diff --git a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/util/ScriptVariableAnalyzer.groovy b/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/util/ScriptVariableAnalyzer.groovy
deleted file mode 100644
index 28a0ba1..0000000
--- a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/util/ScriptVariableAnalyzer.groovy
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.tools.shell.util
-
-import groovy.transform.TypeChecked
-import org.codehaus.groovy.ast.ClassCodeVisitorSupport
-import org.codehaus.groovy.ast.ClassNode
-import org.codehaus.groovy.ast.DynamicVariable
-import org.codehaus.groovy.ast.GroovyClassVisitor
-import org.codehaus.groovy.ast.expr.VariableExpression
-import org.codehaus.groovy.classgen.GeneratorContext
-import org.codehaus.groovy.control.CompilationFailedException
-import org.codehaus.groovy.control.CompilationUnit
-import org.codehaus.groovy.control.CompilerConfiguration
-import org.codehaus.groovy.control.Phases
-import org.codehaus.groovy.control.SourceUnit
-
-import java.security.CodeSource
-
-/**
- * Class to Class parsing a script to detect all bound and unbound variables.
- * Based on http://glaforge.appspot.com/article/knowing-which-variables-are-bound-or-not-in-a-groovy-script
- */
-@TypeChecked
-@Deprecated
-class ScriptVariableAnalyzer {
-
-    /**
-     * define a visitor that visits all variable expressions
-     */
-    @Deprecated
-    static class VariableVisitor extends ClassCodeVisitorSupport implements GroovyClassVisitor {
-        Set<String> bound = new HashSet<String>()
-        Set<String> unbound = new HashSet<String>()
-
-        @Override
-        void visitVariableExpression(VariableExpression expression) {
-            // we're not interested in some special implicit variables
-            if (!(expression.variable in ['args', 'context', 'this', 'super'])) {
-                // thanks to this instanceof
-                // we know if the variable is bound or not
-                if (expression.accessedVariable instanceof DynamicVariable) {
-                    unbound << expression.variable
-                } else {
-                    bound << expression.variable
-                }
-            }
-            super.visitVariableExpression(expression)
-        }
-
-        @Override
-        protected SourceUnit getSourceUnit() {
-            return null
-        }
-    }
-
-    /**
-     * custom PrimaryClassNodeOperation
-     * to be able to hook our code visitor
-     */
-    @Deprecated
-    static class VisitorSourceOperation extends CompilationUnit.PrimaryClassNodeOperation {
-
-        final GroovyClassVisitor visitor
-
-        VisitorSourceOperation(final GroovyClassVisitor visitor) {
-            this.visitor = visitor
-        }
-
-        @Override
-        void call(final SourceUnit source, final GeneratorContext context, final ClassNode classNode)
-                throws CompilationFailedException {
-            classNode.visitContents(visitor)
-        }
-    }
-
-    /**
-     * class loader to add our phase operation
-     */
-    @Deprecated
-    static class VisitorClassLoader extends GroovyClassLoader {
-        final GroovyClassVisitor visitor
-
-        VisitorClassLoader(final GroovyClassVisitor visitor, ClassLoader parent) {
-            super(parent == null ?  Thread.currentThread().getContextClassLoader() : parent)
-            this.visitor = visitor
-        }
-
-        @Override
-        protected CompilationUnit createCompilationUnit(final CompilerConfiguration config, final CodeSource source) {
-            CompilationUnit cu = super.createCompilationUnit(config, source)
-            cu.addPhaseOperation(new VisitorSourceOperation(visitor), Phases.CLASS_GENERATION)
-            return cu
-        }
-    }
-
-    static Set<String> getBoundVars(final String scriptText, ClassLoader parent) {
-        assert scriptText != null
-        GroovyClassVisitor visitor = new VariableVisitor()
-        VisitorClassLoader myCL = new VisitorClassLoader(visitor, parent)
-        // simply by parsing the script with our classloader
-        // our visitor will be called and will visit all the variables
-        myCL.parseClass(scriptText)
-        return visitor.bound
-    }
-
-}
diff --git a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/util/SimpleCompletor.groovy b/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/util/SimpleCompletor.groovy
deleted file mode 100644
index cf2bb4e..0000000
--- a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/util/SimpleCompletor.groovy
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.tools.shell.util
-
-import jline.console.completer.Completer
-import org.codehaus.groovy.runtime.InvokerHelper
-
-/**
- * Support for simple completors.
- */
-@Deprecated
-class SimpleCompletor implements Completer {
-
-    SortedSet<String> candidates
-
-    /**
-    * A delimiter to use to qualify completions.
-    */
-    protected String delimiter
-
-    boolean withBlank = true
-
-
-    SimpleCompletor(final String[] candidates) {
-        setCandidateStrings(candidates)
-    }
-
-    SimpleCompletor() {
-        this(new String[0])
-    }
-
-    SimpleCompletor(final Closure loader) {
-        this()
-
-        assert loader != null
-
-        Object obj = loader.call()
-
-        List list = null
-
-        if (obj instanceof List) {
-            list = (List) obj
-        }
-
-        //
-        // TODO: Maybe handle arrays too?
-        //
-
-        if (list == null) {
-            throw new IllegalStateException('The loader closure did not return a list of candidates; found: ' + obj)
-        }
-
-        Iterator iter = list.iterator()
-
-        while (iter.hasNext()) {
-            add(InvokerHelper.toString(iter.next()))
-        }
-    }
-
-    void setWithBlank(boolean withBlank) {
-        this.withBlank = withBlank
-    }
-
-    void add(final String candidate) {
-        addCandidateString(candidate)
-    }
-
-    Object leftShift(final String s) {
-        add(s)
-
-        return null
-    }
-
-    @Override
-    int complete(final String buffer, final int cursor, final List<CharSequence> clist) {
-        String start = (buffer == null) ? '' : buffer
-
-        SortedSet<String> matches = getCandidates().tailSet(start)
-
-        for (Iterator i = matches.iterator(); i.hasNext();) {
-            String can = (String) i.next()
-
-            if (!(can.startsWith(start))) {
-                break
-            }
-
-            String delim = delimiter
-
-            if (delim != null) {
-                int index = can.indexOf(delim, cursor)
-
-                if (index != -1) {
-                    can = can.substring(0, index + 1)
-                }
-            }
-
-            if (withBlank) {
-                can += ' '
-            }
-
-            clist.add(can)
-        }
-
-        // the index of the completion is always from the beginning of the buffer.
-        return (clist.size() == 0) ? (-1) : 0
-    }
-
-    void setCandidates(final SortedSet<String> candidates) {
-        this.candidates = candidates
-    }
-
-    SortedSet<String> getCandidates() {
-        return Collections.unmodifiableSortedSet(this.candidates)
-    }
-
-    void setCandidateStrings(final String[] strings) {
-        setCandidates(new TreeSet(Arrays.asList(strings)))
-    }
-
-    void addCandidateString(final String string) {
-        if (string != null) {
-            candidates.add(string)
-        }
-    }
-}
diff --git a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/util/WrappedInputStream.groovy b/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/util/WrappedInputStream.groovy
deleted file mode 100644
index 8a91f14..0000000
--- a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/util/WrappedInputStream.groovy
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.tools.shell.util
-
-/**
- * In order to modify JLine Behavior, we need to wrap the IO streams so we can hack into them
- * This allows autoindent and redisplaying the chars typed so far after exceptions during completion
- */
-@Deprecated
-class WrappedInputStream extends InputStream implements Closeable {
-
-    final InputStream wrapped
-    // observed sometimes ClassNotFoundException when not qualifying with java.io
-    java.io.ByteArrayInputStream inserted = new java.io.ByteArrayInputStream()
-
-
-    /**
-     * Construct a new IO container using system streams.
-     */
-    WrappedInputStream(final InputStream wrapped) {
-        super()
-        this.wrapped = wrapped
-    }
-
-    @Override
-    int read() throws java.io.IOException {
-        if (inserted != null && inserted.available() > 0) {
-            return inserted.read()
-        }
-        return wrapped.read()
-    }
-
-    void insert(String chars) {
-        inserted.close()
-        inserted = new java.io.ByteArrayInputStream(chars.getBytes('UTF-8'))
-    }
-
-    @Override
-    int read(byte[] b) throws java.io.IOException {
-        def insertb = inserted.read(b)
-        if (insertb > 0) {
-            return insertb
-        }
-        return wrapped.read(b)
-    }
-
-    @Override
-    int read(byte[] b, int off, int len) throws java.io.IOException {
-        def insertb = inserted.read(b, off, len)
-        if (insertb > 0) {
-            return insertb
-        }
-        return wrapped.read(b, off, len)
-    }
-
-    @Override
-    long skip(long n) throws java.io.IOException {
-        def skipb = inserted.skip(n)
-        if (skipb > 0) {
-            return skipb
-        }
-        return wrapped.skip(n)
-    }
-
-    @Override
-    int available() throws java.io.IOException {
-        int x = inserted.available()
-        if (x > 0) {
-            return x
-        }
-        return wrapped.available()
-    }
-
-    @Override
-    void close() throws java.io.IOException {
-        wrapped.close()
-        inserted.close()
-    }
-
-    @Override
-    synchronized void mark(int readlimit) {
-        throw new UnsupportedOperationException()
-    }
-
-    @Override
-    synchronized void reset() throws java.io.IOException {
-        throw new UnsupportedOperationException()
-    }
-
-    @Override
-    boolean markSupported() {
-        return false
-    }
-}
diff --git a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/util/XmlCommandRegistrar.groovy b/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/util/XmlCommandRegistrar.groovy
deleted file mode 100644
index 30de139..0000000
--- a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/util/XmlCommandRegistrar.groovy
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.tools.shell.util
-
-import org.codehaus.groovy.tools.shell.Command
-import org.codehaus.groovy.tools.shell.Shell
-
-/**
- * Registers {@link Command} classes from an XML file like:
- *
- * <pre>
-  {@literal
- <commands>
-   <!-- default commands -->
-   <command>org.codehaus.groovy.tools.shell.commands.HelpCommand</command>
-   <command>org.codehaus.groovy.tools.shell.commands.ExitCommand</command>
-   <command>org.codehaus.groovy.tools.shell.commands.ImportCommand</command>
-   <command>org.codehaus.groovy.tools.shell.commands.DisplayCommand</command>
-   <command>org.codehaus.groovy.tools.shell.commands.ClearCommand</command>
-   <command>org.codehaus.groovy.tools.shell.commands.ShowCommand</command>
-   <command>org.codehaus.groovy.tools.shell.commands.InspectCommand</command>
-   <command>org.codehaus.groovy.tools.shell.commands.PurgeCommand</command>
-   <command>org.codehaus.groovy.tools.shell.commands.EditCommand</command>
-   <command>org.codehaus.groovy.tools.shell.commands.LoadCommand</command>
-   <command>org.codehaus.groovy.tools.shell.commands.SaveCommand</command>
-   <command>org.codehaus.groovy.tools.shell.commands.RecordCommand</command>
-   <command>org.codehaus.groovy.tools.shell.commands.HistoryCommand</command>
-   <command>org.codehaus.groovy.tools.shell.commands.AliasCommand</command>
-   <command>org.codehaus.groovy.tools.shell.commands.SetCommand</command>
-   <command>org.codehaus.groovy.tools.shell.commands.ShadowCommand</command>
-   <command>org.codehaus.groovy.tools.shell.commands.RegisterCommand</command>
-   <command>org.codehaus.groovy.tools.shell.commands.DocCommand</command>
-   <!-- custom commands -->
- </commands>
- * }
- * <pre>
- */
-@Deprecated
-class XmlCommandRegistrar {
-    private final Logger log = Logger.create(this.class)
-
-    private final Shell shell
-
-    private final ClassLoader classLoader
-
-    XmlCommandRegistrar(final Shell shell, final ClassLoader classLoader) {
-        assert shell != null
-        assert classLoader != null
-
-        this.shell = shell
-        this.classLoader = classLoader
-    }
-
-    void register(final URL url) {
-        assert url
-
-        if (log.debugEnabled) {
-            log.debug("Registering commands from: $url")
-        }
-
-        url.withReader {Reader reader ->
-            groovy.util.Node doc = new groovy.util.XmlParser().parse(reader)
-
-            doc.children().each {groovy.util.Node element ->
-                String classname = element.text()
-
-                Class type = classLoader.loadClass(classname)
-
-                Command command = type.newInstance(shell) as Command
-
-                if (log.debugEnabled) {
-                    log.debug("Created command '${command.name}': $command")
-                }
-
-                shell << command
-            }
-        }
-    }
-}
diff --git a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/util/package.html b/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/util/package.html
deleted file mode 100644
index c9ec0d5..0000000
--- a/subprojects/groovy-groovysh/src/main/groovy/org/codehaus/groovy/tools/shell/util/package.html
+++ /dev/null
@@ -1,30 +0,0 @@
-<!--
-
-     Licensed to the Apache Software Foundation (ASF) under one
-     or more contributor license agreements.  See the NOTICE file
-     distributed with this work for additional information
-     regarding copyright ownership.  The ASF licenses this file
-     to you under the Apache License, Version 2.0 (the
-     "License"); you may not use this file except in compliance
-     with the License.  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing,
-     software distributed under the License is distributed on an
-     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-     KIND, either express or implied.  See the License for the
-     specific language governing permissions and limitations
-     under the License.
-
--->
-<!-- $Id: package.html 7254 2007-08-15 22:26:39Z user57 $ -->
-
-<html>
-    <body>
-        <p>
-            Utility classes related to the Groovy Shell (aka. <tt>groovysh</tt>).
-        </p>
-    </body>
-</html>
-
diff --git a/subprojects/groovy-nio/build.gradle b/subprojects/groovy-nio/build.gradle
index d12c4f9..d164141 100644
--- a/subprojects/groovy-nio/build.gradle
+++ b/subprojects/groovy-nio/build.gradle
@@ -10,12 +10,18 @@
  *    http://www.apache.org/licenses/LICENSE-2.0
  *
  *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
+ *  software distributed under the License is distributed oHistoryRecordGetTextToRunTestsn an
  *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  *  KIND, either express or implied.  See the License for the
  *  specific language governing permissions and limitations
  *  under the License.
  */
+repositories {
+    maven {
+        url 'https://oss.sonatype.org/content/repositories/snapshots'
+    }
+}
+
 dependencies {
     compile rootProject
     testCompile project(':groovy-test')
diff --git a/subprojects/groovy-swing/src/main/java/org/codehaus/groovy/binding/AbstractFullBinding.java b/subprojects/groovy-swing/src/main/java/org/codehaus/groovy/binding/AbstractFullBinding.java
deleted file mode 100644
index b534116..0000000
--- a/subprojects/groovy-swing/src/main/java/org/codehaus/groovy/binding/AbstractFullBinding.java
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.binding;
-
-import groovy.lang.Closure;
-
-/**
- * @since Groovy 1.1
- */
-@Deprecated
-public abstract class AbstractFullBinding  implements FullBinding {
-
-    protected SourceBinding sourceBinding;
-    protected TargetBinding targetBinding;
-    protected Closure validator;
-    protected Closure converter;
-    protected Closure reverseConverter;
-
-    private void fireBinding() {
-        if ((sourceBinding == null) || (targetBinding == null)) {
-            // should we throw invalid binding exception?  or fail quietly?
-            return;
-        }
-        Object result = sourceBinding.getSourceValue();
-        if (getValidator() != null) {
-            Object validation = getValidator().call(result);
-            if ((validation == null)
-                || ((validation instanceof Boolean) && !(Boolean) validation))
-            {
-                // should we throw a validation failed exception?  or fail quietly?
-                return;
-            }
-        }
-        if (getConverter() != null) {
-            result = getConverter().call(result);
-        }
-        targetBinding.updateTargetValue(result);
-    }
-
-    public void update() {
-        fireBinding();
-    }
-
-    private void fireReverseBinding() {
-        if (!(sourceBinding instanceof TargetBinding) || !(targetBinding instanceof SourceBinding)) {
-            throw new RuntimeException("Binding Instance is not reversable");
-        }
-        Object result = ((SourceBinding)targetBinding).getSourceValue();
-        if (getReverseConverter() != null) {
-            result = getReverseConverter().call(result);
-        }
-        ((TargetBinding)sourceBinding).updateTargetValue(result);
-    }
-
-    public void reverseUpdate() {
-        fireReverseBinding();
-    }
-
-    public SourceBinding getSourceBinding() {
-        return sourceBinding;
-    }
-
-    public void setSourceBinding(SourceBinding sourceBinding) {
-        this.sourceBinding = sourceBinding;
-    }
-
-    public TargetBinding getTargetBinding() {
-        return targetBinding;
-    }
-
-    public void setTargetBinding(TargetBinding targetBinding) {
-        this.targetBinding = targetBinding;
-    }
-
-    public Closure getValidator() {
-        return validator;
-    }
-
-    public void setValidator(Closure validator) {
-        this.validator = validator;
-    }
-
-    public Closure getConverter() {
-        return converter;
-    }
-
-    public void setConverter(Closure converter) {
-        this.converter = converter;
-    }
-
-    public Closure getReverseConverter() {
-        return reverseConverter;
-    }
-
-    public void setReverseConverter(Closure reverseConverter) {
-        this.reverseConverter = reverseConverter;
-    }
-}
diff --git a/subprojects/groovy-swing/src/main/java/org/codehaus/groovy/binding/AggregateBinding.java b/subprojects/groovy-swing/src/main/java/org/codehaus/groovy/binding/AggregateBinding.java
deleted file mode 100644
index 3b85d53..0000000
--- a/subprojects/groovy-swing/src/main/java/org/codehaus/groovy/binding/AggregateBinding.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.binding;
-
-import java.util.LinkedHashSet;
-import java.util.Set;
-
-/**
- * An aggregation of multiple bindings
- *
- * @since Groovy 1.6
- */
-@Deprecated
-public class AggregateBinding implements BindingUpdatable {
-
-    protected  boolean bound;
-
-    // use linked hash set so order is preserved
-    protected Set<BindingUpdatable> bindings = new LinkedHashSet<BindingUpdatable>();
-
-    public void addBinding(BindingUpdatable binding) {
-        if (binding == null || bindings.contains(binding)) return;
-        if (bound) binding.bind(); // bind is idempotent, so no state checking
-        bindings.add(binding);
-    }
-
-    public void removeBinding(BindingUpdatable binding) {
-        bindings.remove(binding);
-    }
-
-    public void bind() {
-        if (!bound) {
-            bound = true;
-            for (BindingUpdatable binding : bindings) {
-                binding.bind();
-            }
-        }
-    }
-
-    public void unbind() {
-        if (bound) {
-            for (BindingUpdatable binding : bindings) {
-                binding.unbind();
-            }
-            bound = false;
-        }
-    }
-
-    public void rebind() {
-        if (bound) {
-            unbind();
-            bind();
-        }
-    }
-
-    public void update() {
-        for (BindingUpdatable binding : bindings) {
-            binding.update();
-        }
-    }
-
-    public void reverseUpdate() {
-        for (BindingUpdatable binding : bindings) {
-            binding.reverseUpdate();
-        }
-    }
-}
diff --git a/subprojects/groovy-swing/src/main/java/org/codehaus/groovy/binding/BindPath.java b/subprojects/groovy-swing/src/main/java/org/codehaus/groovy/binding/BindPath.java
deleted file mode 100644
index f0cdbe8..0000000
--- a/subprojects/groovy-swing/src/main/java/org/codehaus/groovy/binding/BindPath.java
+++ /dev/null
@@ -1,238 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.binding;
-
-import groovy.lang.MetaClass;
-import groovy.lang.MissingPropertyException;
-import groovy.lang.Reference;
-import org.codehaus.groovy.runtime.InvokerHelper;
-
-import java.beans.PropertyChangeListener;
-import java.util.Map;
-import java.util.Set;
-import java.util.TreeMap;
-
-/**
- * The bind path object.  This class represents one "step" in the bind path.
- */
-@SuppressWarnings({"unchecked"}) // all are of type Object, so generics are useless
-@Deprecated
-public class BindPath {
-
-    /**
-     * The local lookup for synthetic properties, like JTextField#text
-     */
-    Map<String, TriggerBinding> localSynthetics;
-
-    /**
-     * The object we think we are bound to
-     */
-    Object currentObject;
-
-    /**
-     * The property we are interested in
-     */
-    String propertyName;
-
-    PropertyChangeListener localListener;
-    PropertyChangeListener globalListener;
-    BindingUpdatable syntheticFullBinding;
-
-    /**
-     * The steps further down the path from us
-     */
-    BindPath[] children;
-
-    /**
-     * Called when we detect a change somewhere down our path.
-     * First, check to see if our object is changing.  If so remove our old listener
-     * Next, update the reference object the children have and recurse
-     * Finally, add listeners if we have a different object
-     *
-     * @param listener This listener to attach.
-     * @param newObject The object we should read our property off of.
-     * @param updateSet The list of objects we have added listeners to
-     */
-    public synchronized void updatePath(PropertyChangeListener listener, Object newObject, Set updateSet) {
-        if (currentObject != newObject) {
-            removeListeners();
-        }
-        if ((children != null) && (children.length > 0)) {
-            try {
-                Object newValue = null;
-                if (newObject != null) {
-                    updateSet.add(newObject);
-                    newValue = extractNewValue(newObject);
-                }
-                for (BindPath child : children) {
-                    child.updatePath(listener, newValue, updateSet);
-                }
-            } catch (Exception e) {
-                //LOGME
-                // do we ignore it, or fail?
-            }
-        }
-        if (currentObject != newObject) {
-            addListeners(listener, newObject, updateSet);
-        }
-    }
-
-    /**
-     * Adds all the listeners to the objects in the bind path.
-     * This assumes that we are not added as listeners to any of them, hence
-     * it is not idempotent.
-     *
-     * @param listener This listener to attach.
-     * @param newObject The object we should read our property off of.
-     * @param updateSet The list of objects we have added listeners to
-     */
-    public void addAllListeners(PropertyChangeListener listener, Object newObject, Set updateSet) {
-        addListeners(listener, newObject, updateSet);
-        if ((children != null) && (children.length > 0)) {
-            try {
-                Object newValue = null;
-                if (newObject != null) {
-                    updateSet.add(newObject);
-                    newValue = extractNewValue(newObject);
-                }
-                for (BindPath child : children) {
-                    child.addAllListeners(listener, newValue, updateSet);
-                }
-            } catch (Exception e) {
-                e.printStackTrace(System.out);
-                //LOGME
-                // do we ignore it, or fail?
-            }
-        }
-    }
-
-    private Object extractNewValue(Object newObject) {
-        Object newValue;
-        try {
-            newValue = InvokerHelper.getProperty(newObject, propertyName);
-
-        } catch (MissingPropertyException mpe) {
-            //todo we should flag this when the path is created that this is a field not a prop...
-            // try direct method...
-            try {
-                newValue = InvokerHelper.getAttribute(newObject, propertyName);
-                if (newValue instanceof Reference) {
-                    newValue = ((Reference) newValue).get();
-                }
-            } catch (Exception e) {
-                //LOGME?
-                newValue = null;
-            }
-        }
-        return newValue;
-    }
-
-    static final Class[] NAME_PARAMS = {String.class, PropertyChangeListener.class};
-    static final Class[] GLOBAL_PARAMS = {PropertyChangeListener.class};
-
-    /**
-     * Add listeners to a specific object.  Updates the bould flags and update set
-     *
-     * @param listener This listener to attach.
-     * @param newObject The object we should read our property off of.
-     * @param updateSet The list of objects we have added listeners to
-     */
-    public void addListeners(PropertyChangeListener listener, Object newObject, Set updateSet) {
-        removeListeners();
-        if (newObject != null) {
-            // check for local synthetics
-            TriggerBinding syntheticTrigger = getSyntheticTriggerBinding(newObject);
-            MetaClass mc = InvokerHelper.getMetaClass(newObject);
-            if (syntheticTrigger != null) {
-                PropertyBinding psb = new PropertyBinding(newObject, propertyName);
-                PropertyChangeProxyTargetBinding proxytb = new PropertyChangeProxyTargetBinding(newObject, propertyName, listener);
-
-                syntheticFullBinding = syntheticTrigger.createBinding(psb, proxytb);
-                syntheticFullBinding.bind();
-                updateSet.add(newObject);
-            } else if (!mc.respondsTo(newObject, "addPropertyChangeListener", NAME_PARAMS).isEmpty()) {
-                InvokerHelper.invokeMethod(newObject, "addPropertyChangeListener", new Object[] {propertyName, listener});
-                localListener = listener;
-                updateSet.add(newObject);
-            } else if (!mc.respondsTo(newObject, "addPropertyChangeListener", GLOBAL_PARAMS).isEmpty()) {
-                InvokerHelper.invokeMethod(newObject, "addPropertyChangeListener", listener);
-                globalListener = listener;
-                updateSet.add(newObject);
-            }
-        }
-        currentObject = newObject;
-    }
-
-    /**
-     * Remove listeners, believing that our bould flags are accurate and it removes
-     * only as declared.
-     */
-    public void removeListeners() {
-        if (globalListener != null) {
-            try {
-                InvokerHelper.invokeMethod(currentObject, "removePropertyChangeListener", globalListener);
-            } catch (Exception e) {
-                //LOGME ignore the failure
-            }
-            globalListener = null;
-        }
-        if (localListener != null) {
-            try {
-                InvokerHelper.invokeMethod(currentObject, "removePropertyChangeListener", new Object[] {propertyName, localListener});
-            } catch (Exception e) {
-                //LOGME ignore the failure
-            }
-            localListener = null;
-        }
-        if (syntheticFullBinding != null) {
-            syntheticFullBinding.unbind();
-        }
-    }
-
-    public synchronized void updateLocalSyntheticProperties(Map<String, TriggerBinding> synthetics) {
-        localSynthetics = null;
-        String endName = "#" + propertyName;
-        for (Map.Entry<String, TriggerBinding> syntheticEntry : synthetics.entrySet()) {
-            if (syntheticEntry.getKey().endsWith(endName)) {
-                if (localSynthetics == null) {
-                    localSynthetics = new TreeMap();
-                }
-                localSynthetics.put(syntheticEntry.getKey(), syntheticEntry.getValue());
-            }
-        }
-    }
-
-    public TriggerBinding getSyntheticTriggerBinding(Object newObject) {
-        if (localSynthetics == null) {
-            return null;
-        }
-        Class currentClass = newObject.getClass();
-        while (currentClass != null) {
-            // should we check interfaces as well?  if so at what level?
-            TriggerBinding trigger =
-                    localSynthetics.get(currentClass.getName() + "#" + propertyName);
-            if (trigger != null) {
-                return trigger;
-            }
-            currentClass = currentClass.getSuperclass();
-        }
-        return null;
-    }
-
-}
diff --git a/subprojects/groovy-swing/src/main/java/org/codehaus/groovy/binding/BindingProxy.java b/subprojects/groovy-swing/src/main/java/org/codehaus/groovy/binding/BindingProxy.java
deleted file mode 100644
index 0815018..0000000
--- a/subprojects/groovy-swing/src/main/java/org/codehaus/groovy/binding/BindingProxy.java
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.binding;
-
-import groovy.lang.GroovyObjectSupport;
-import groovy.lang.ReadOnlyPropertyException;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * This class returns half bound {@link org.codehaus.groovy.binding.FullBinding}s on the source half to the model
- * object for every property reference (and I do mean every, valid or not, queried before or not).  These returned
- * half bindings are stored strongly in a list when generated.
- *
- * Changing the model will keep all existing bindings but change the source on all of the bininfs
- *
- * Formerly Known as Model Binding.
- *
- * @since Groovy 1.5
- */
-@Deprecated
-public class BindingProxy extends GroovyObjectSupport implements BindingUpdatable {
-
-    Object model;
-    boolean bound;
-
-    final Map<String, PropertyBinding> propertyBindings = new HashMap<String, PropertyBinding>();
-    final List<FullBinding> generatedBindings = new ArrayList<FullBinding>();
-
-    public BindingProxy(Object model) {
-        this.model = model;
-    }
-
-    public Object getModel() {
-        return model;
-    }
-
-    public synchronized void setModel(Object model) {
-        // should we use a finer grained lock than this?
-
-        boolean bindAgain = bound;
-        this.model = model;
-
-        unbind();
-        for (PropertyBinding propertyBinding : propertyBindings.values()) {
-            (propertyBinding).setBean(model);
-        }
-
-        if (bindAgain) {
-            bind();
-            update();
-        }
-    }
-
-    public Object getProperty(String property) {
-        PropertyBinding pb;
-        synchronized (propertyBindings) {
-            // should we verify the property is valid?
-            pb = propertyBindings.get(property);
-            if (pb == null) {
-                pb = new ModelBindingPropertyBinding(model, property);
-                propertyBindings.put(property, pb);
-            }
-        }
-        FullBinding fb = pb.createBinding(pb, null);
-        if (bound) {
-            fb.bind();
-        }
-        return fb;
-    }
-
-    public void setProperty(String property, Object value) {
-        throw new ReadOnlyPropertyException(property, model.getClass());
-    }
-
-    public void bind() {
-        synchronized (generatedBindings) {
-            if (!bound) {
-                bound = true;
-                for (FullBinding generatedBinding : generatedBindings) {
-                    (generatedBinding).bind();
-                    // should we trap exceptions and do an each?
-                }
-            }
-        }
-    }
-
-    public void unbind() {
-        synchronized (generatedBindings) {
-            if (bound) {
-                bound = false;
-                for (FullBinding generatedBinding : generatedBindings) {
-                    (generatedBinding).unbind();
-                    // should we trap exceptions and do an each?
-                }
-            }
-        }
-    }
-
-    public void rebind() {
-        synchronized (generatedBindings) {
-            if (bound) {
-                for (FullBinding generatedBinding : generatedBindings) {
-                    (generatedBinding).rebind();
-                    // should we trap exceptions and do an each?
-                }
-            }
-        }
-    }
-
-    public void update() {
-        synchronized (generatedBindings) {
-            for (FullBinding generatedBinding : generatedBindings) {
-                (generatedBinding).update();
-                // should we trap exceptions and do an each?
-            }
-        }
-    }
-
-    public void reverseUpdate() {
-        synchronized (generatedBindings) {
-            for (FullBinding generatedBinding : generatedBindings) {
-                (generatedBinding).reverseUpdate();
-                // should we trap exceptions and do an each?
-            }
-        }
-    }
-
-    class ModelBindingPropertyBinding extends PropertyBinding {
-        public ModelBindingPropertyBinding(Object bean, String propertyName) {
-            super(bean, propertyName);
-        }
-
-        public FullBinding createBinding(SourceBinding source, TargetBinding target) {
-            FullBinding fb = super.createBinding(source, target);
-            generatedBindings.add(fb);
-            return fb;
-        }
-    }
-
-}
diff --git a/subprojects/groovy-swing/src/main/java/org/codehaus/groovy/binding/BindingUpdatable.java b/subprojects/groovy-swing/src/main/java/org/codehaus/groovy/binding/BindingUpdatable.java
deleted file mode 100644
index d822567..0000000
--- a/subprojects/groovy-swing/src/main/java/org/codehaus/groovy/binding/BindingUpdatable.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.binding;
-
-/**
- * @since Groovy 1.1
- */
-@Deprecated
-public interface BindingUpdatable {
-
-    /**
-     * Causes automatic updating of bound values to be turned on.
-     * This is idempotent between calls to unbind and rebind; i.e. multiple calls
-     * to bind will have only the effect of the first call.
-     */
-    void bind();
-
-    /**
-     * Causes automatic updating of bound values to be turned off.
-     * This is idempotent between calls to bind and rebind; i.e. multiple calls
-     * to unbind will have only the effect of the first call. 
-     */
-    void unbind();
-
-    /**
-     * Causes the current bindings to be reset.
-     * If the binding is not bound, it is a no-op.
-     * If the binding is bound, it will be turned off, then turned on against current values.
-     */
-    void rebind();
-
-    /**
-     * Causes the values to be propagated from the source to the target
-     */
-    void update();
-
-    /**
-     * If supported, Causes the values to be propagated from the target to the source,
-     * If not supported, an exception may be thrown 
-     */
-    void reverseUpdate();
-}
diff --git a/subprojects/groovy-swing/src/main/java/org/codehaus/groovy/binding/ClosureSourceBinding.java b/subprojects/groovy-swing/src/main/java/org/codehaus/groovy/binding/ClosureSourceBinding.java
deleted file mode 100644
index c9f6e2b..0000000
--- a/subprojects/groovy-swing/src/main/java/org/codehaus/groovy/binding/ClosureSourceBinding.java
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.binding;
-
-import groovy.lang.Closure;
-
-/**
- * @since Groovy 1.1
- */
-@Deprecated
-public class ClosureSourceBinding implements SourceBinding {
-
-    private static final Object[] EMPTY_OBJECT_ARRAY = new Object[0];
-
-    Closure closure;
-    Object[] arguments;
-
-    public ClosureSourceBinding(Closure closure) {
-        this(closure, EMPTY_OBJECT_ARRAY);
-    }
-
-    public ClosureSourceBinding(Closure closure, Object[] arguments) { //TODO in Groovy 2.0 use varargs?
-        this.closure = closure;
-        this.arguments = arguments;
-    }
-
-    public Closure getClosure() {
-        return closure;
-    }
-
-    public void setClosure(Closure closure) {
-        this.closure = closure;
-    }
-
-    public Object getSourceValue() {
-        return closure.call(arguments);
-    }
-
-    public void setClosureArguments(Object[] arguments) {
-        this.arguments = arguments;
-    }
-
-    public void setClosureArgument(Object argument) {
-        this.arguments = new Object[] {argument};
-    }
-}
diff --git a/subprojects/groovy-swing/src/main/java/org/codehaus/groovy/binding/ClosureTriggerBinding.java b/subprojects/groovy-swing/src/main/java/org/codehaus/groovy/binding/ClosureTriggerBinding.java
deleted file mode 100644
index 11a85f2..0000000
--- a/subprojects/groovy-swing/src/main/java/org/codehaus/groovy/binding/ClosureTriggerBinding.java
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.binding;
-
-import groovy.lang.Closure;
-import groovy.lang.GroovyObjectSupport;
-import groovy.lang.Reference;
-import org.codehaus.groovy.reflection.ReflectionUtils;
-
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Field;
-import java.security.PrivilegedAction;
-import java.util.ArrayList;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-
-@Deprecated
-public class ClosureTriggerBinding implements TriggerBinding, SourceBinding {
-    private static final BindPath[] EMPTY_BINDPATH_ARRAY = new BindPath[0];
-    Map<String, TriggerBinding> syntheticBindings;
-    Closure closure;
-
-    public ClosureTriggerBinding(Map<String, TriggerBinding> syntheticBindings) {
-        this.syntheticBindings = syntheticBindings;
-    }
-
-    public Closure getClosure() {
-        return closure;
-    }
-
-    public void setClosure(Closure closure) {
-        this.closure = closure;
-    }
-
-    private BindPath createBindPath(String propertyName, BindPathSnooper snooper) {
-        BindPath bp = new BindPath();
-        bp.propertyName = propertyName;
-        bp.updateLocalSyntheticProperties(syntheticBindings);
-        List<BindPath> childPaths = new ArrayList<BindPath>();
-        for (Map.Entry<String, BindPathSnooper> entry : snooper.fields.entrySet()) {
-            childPaths.add(createBindPath(entry.getKey(), entry.getValue()));
-        }
-        bp.children = childPaths.toArray(EMPTY_BINDPATH_ARRAY);
-        return bp;
-    }
-
-    public FullBinding createBinding(SourceBinding source, TargetBinding target) {
-        if (source != this) {
-            throw new RuntimeException("Source binding must the Trigger Binding as well");
-        }
-        final BindPathSnooper delegate = new BindPathSnooper();
-        try {
-            // create our own local copy of the closure
-            final Class closureClass = closure.getClass();
-
-            // do in privileged block since we may be looking at private stuff
-            Closure closureLocalCopy = java.security.AccessController.doPrivileged(new PrivilegedAction<Closure>() {
-                public Closure run() {
-                    // assume closures have only 1 constructor, of the form (Object, Reference*)
-                    Constructor constructor = closureClass.getConstructors()[0];
-                    int paramCount = constructor.getParameterTypes().length;
-                    Object[] args = new Object[paramCount];
-                    args[0] = delegate;
-                    for (int i = 1; i < paramCount; i++) {
-                        args[i] = new Reference(new BindPathSnooper());
-                    }
-                    try {
-                        boolean acc = constructor.isAccessible();
-                        ReflectionUtils.trySetAccessible(constructor);
-                        Closure localCopy = (Closure) constructor.newInstance(args);
-                        if (!acc) { constructor.setAccessible(false); }
-                        localCopy.setResolveStrategy(Closure.DELEGATE_ONLY);
-                        for (Field f:closureClass.getDeclaredFields()) {
-                            acc = f.isAccessible();
-                            ReflectionUtils.trySetAccessible(f);
-                            if (f.getType() == Reference.class) {
-                                delegate.fields.put(f.getName(),
-                                        (BindPathSnooper) ((Reference) f.get(localCopy)).get());
-                            }
-                            if (!acc) { f.setAccessible(false); }
-                        }
-                        return localCopy;
-                    } catch (Exception e) {
-                        throw new RuntimeException("Error snooping closure", e);
-                    }
-                }
-            });
-            try {
-                closureLocalCopy.call();
-            } catch (DeadEndException e) {
-                // we want this exception exposed.
-                throw e;
-            } catch (Exception e) {
-                //LOGME
-                // ignore it, likely failing because we are faking out properties
-                // such as a call to Math.min(int, BindPathSnooper)
-            }
-        } catch (Exception e) {
-            e.printStackTrace(System.out);
-            throw new RuntimeException("A closure expression binding could not be created because of " + e.getClass().getName() + ":\n\t" + e.getMessage());
-        }
-        List<BindPath> rootPaths = new ArrayList<BindPath>();
-        for (Map.Entry<String, BindPathSnooper> entry : delegate.fields.entrySet()) {
-            BindPath bp =createBindPath(entry.getKey(), entry.getValue());
-            bp.currentObject = closure;
-            rootPaths.add(bp);
-        }
-        PropertyPathFullBinding fb = new PropertyPathFullBinding();
-        fb.setSourceBinding(new ClosureSourceBinding(closure));
-        fb.setTargetBinding(target);
-        fb.bindPaths = rootPaths.toArray(EMPTY_BINDPATH_ARRAY);
-        return fb;
-    }
-
-    public Object getSourceValue() {
-        return closure.call();
-    }
-}
-
-@Deprecated
-class DeadEndException extends RuntimeException {
-    DeadEndException(String message) { super(message); }
-}
-
-@Deprecated
-class DeadEndObject {
-    public Object getProperty(String property) {
-        throw new DeadEndException("Cannot bind to a property on the return value of a method call");
-    }
-    public Object invokeMethod(String name, Object args) {
-        return this;
-    }
-}
-
-@Deprecated
-class BindPathSnooper extends GroovyObjectSupport {
-    static final DeadEndObject DEAD_END = new DeadEndObject();
-
-    Map<String, BindPathSnooper> fields = new LinkedHashMap<String, BindPathSnooper>();
-
-    public Object getProperty(String property) {
-        if (fields.containsKey(property)) {
-            return fields.get(property);
-        } else {
-            BindPathSnooper snooper = new BindPathSnooper();
-            fields.put(property, snooper);
-            return snooper;
-        }
-    }
-
-    public Object invokeMethod(String name, Object args) {
-        return DEAD_END;
-    }
-}
diff --git a/subprojects/groovy-swing/src/main/java/org/codehaus/groovy/binding/EventTriggerBinding.java b/subprojects/groovy-swing/src/main/java/org/codehaus/groovy/binding/EventTriggerBinding.java
deleted file mode 100644
index b7b503d..0000000
--- a/subprojects/groovy-swing/src/main/java/org/codehaus/groovy/binding/EventTriggerBinding.java
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.binding;
-
-import groovy.lang.Closure;
-import org.codehaus.groovy.runtime.InvokerHelper;
-
-/**
- * @since Groovy 1.1
- */
-@Deprecated
-public class EventTriggerBinding implements TriggerBinding {
-
-    Object triggerBean;
-    String eventName;
-
-    public EventTriggerBinding(Object triggerBean, String eventName) {
-        this.triggerBean = triggerBean;
-        this.eventName = eventName;
-    }
-
-    public FullBinding createBinding(final SourceBinding sourceBinding, final TargetBinding targetBinding) {
-        return new EventTriggerFullBinding(sourceBinding, targetBinding);
-    }
-
-    public Object getTriggerBean() {
-        return triggerBean;
-    }
-
-    public void setTriggerBean(Object triggerBean) {
-        this.triggerBean = triggerBean;
-    }
-
-    public String getEventName() {
-        return eventName;
-    }
-
-    public void setEventName(String eventName) {
-        this.eventName = eventName;
-    }
-
-    private class EventTriggerFullBinding extends AbstractFullBinding {
-
-        Closure handler;
-
-        public EventTriggerFullBinding(final SourceBinding sourceBinding, TargetBinding targetBinding) {
-            setSourceBinding(sourceBinding);
-            setTargetBinding(targetBinding);
-            handler = new Closure(triggerBean) {
-                public Object call(Object... params) {
-                    if (sourceBinding instanceof ClosureSourceBinding) {
-                        ((ClosureSourceBinding)sourceBinding).setClosureArguments(params);
-                    }
-                    update();
-                    return null;
-                }
-            };
-        }
-
-        public void bind() {
-            InvokerHelper.setProperty(triggerBean, eventName, handler);
-        }
-
-        public void unbind() {
-            throw new UnsupportedOperationException();
-        }
-
-        public void rebind() {
-            throw new UnsupportedOperationException();
-        }
-    }
-}
\ No newline at end of file
diff --git a/subprojects/groovy-swing/src/main/java/org/codehaus/groovy/binding/FullBinding.java b/subprojects/groovy-swing/src/main/java/org/codehaus/groovy/binding/FullBinding.java
deleted file mode 100644
index ebe7d2c..0000000
--- a/subprojects/groovy-swing/src/main/java/org/codehaus/groovy/binding/FullBinding.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.binding;
-
-import groovy.lang.Closure;
-
-/**
- * @since Groovy 1.1
- */
-@Deprecated
-public interface FullBinding extends BindingUpdatable {
-
-    SourceBinding getSourceBinding();
-
-    TargetBinding getTargetBinding();
-
-    void setSourceBinding(SourceBinding source);
-
-    void setTargetBinding(TargetBinding target);
-
-    void setValidator(Closure validator);
-
-    Closure getValidator();
-
-    void setConverter(Closure converter);
-
-    Closure getConverter();
-
-    void setReverseConverter(Closure reverseConverter);
-
-    Closure getReverseConverter();
-}
diff --git a/subprojects/groovy-swing/src/main/java/org/codehaus/groovy/binding/MutualPropertyBinding.java b/subprojects/groovy-swing/src/main/java/org/codehaus/groovy/binding/MutualPropertyBinding.java
deleted file mode 100644
index 41f3b63..0000000
--- a/subprojects/groovy-swing/src/main/java/org/codehaus/groovy/binding/MutualPropertyBinding.java
+++ /dev/null
@@ -1,199 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.binding;
-
-import groovy.lang.Closure;
-
-/**
- * @since Groovy 1.6
- */
-
-@Deprecated
-public class MutualPropertyBinding implements FullBinding {
-
-    boolean bound;
-
-    PropertyBinding sourceBinding;
-    PropertyBinding targetBinding;
-    Closure validator;
-    Closure converter;
-    Closure reverseConverter;
-
-    Closure triggerFactory;
-
-    TriggerBinding forwardTriggerBinding;
-    FullBinding forwardBinding;
-    TriggerBinding reverseTriggerBinding;
-    FullBinding reverseBinding;
-
-    MutualPropertyBinding(TriggerBinding forwardTrigger, PropertyBinding source, PropertyBinding target, Closure triggerFactory) {
-        // order matters here!
-        this.triggerFactory = triggerFactory;
-        sourceBinding = source;
-        forwardTriggerBinding = forwardTrigger;
-        setTargetBinding(target);
-        rebuildBindings();
-    }
-
-    public SourceBinding getSourceBinding() {
-        return sourceBinding;
-    }
-
-    public TargetBinding getTargetBinding() {
-        return targetBinding;
-    }
-
-    public void setSourceBinding(SourceBinding sourceBinding) {
-        try {
-            if (sourceBinding == null) {
-                forwardTriggerBinding = null;
-            } else {
-                forwardTriggerBinding = (TriggerBinding) triggerFactory.call(sourceBinding);
-            }
-            this.sourceBinding = (PropertyBinding) sourceBinding;
-        } catch (RuntimeException re) {
-            throw new UnsupportedOperationException("Mutual Bindings may only change source bindings to other PropertyBindings");
-        }
-        rebuildBindings();
-    }
-
-    public void setTargetBinding(TargetBinding targetBinding) {
-        try {
-            if (targetBinding == null) {
-                reverseTriggerBinding = null;
-            } else {
-                reverseTriggerBinding = (TriggerBinding) triggerFactory.call(targetBinding);
-            }
-            this.targetBinding = (PropertyBinding) targetBinding;
-        } catch (RuntimeException re) {
-            throw new UnsupportedOperationException("Mutual Bindings may only change target bindings to other PropertyBindings");
-        }
-        rebuildBindings();
-    }
-
-    public void setValidator(Closure validator) {
-        this.validator = validator;
-        rebuildBindings();
-    }
-
-    public Closure getValidator() {
-        return validator;
-    }
-
-    public void setConverter(Closure converter) {
-        this.converter = converter;
-        rebuildBindings();
-    }
-
-    public Closure getConverter() {
-        return converter;
-    }
-
-    public void setReverseConverter(Closure reverseConverter) {
-       this.reverseConverter = reverseConverter;
-        rebuildBindings();
-    }
-
-    public Closure getReverseConverter() {
-        return reverseConverter;
-    }
-
-    protected void rebuildBindings() {
-        // tear stuff down, even if we are half built
-        if (bound) {
-            if (forwardBinding != null) {
-                forwardBinding.unbind();
-            }
-            if (reverseBinding != null) {
-                reverseBinding.unbind();
-            }
-        }
-
-        // check for all pieces, if we don't have the triad quit silently
-        if (forwardTriggerBinding == null || sourceBinding == null || reverseTriggerBinding == null || targetBinding == null) {
-            return;
-        }
-
-        // build the pieces
-        forwardBinding = forwardTriggerBinding.createBinding(sourceBinding, targetBinding);
-        reverseBinding = reverseTriggerBinding.createBinding(targetBinding, sourceBinding);
-
-        // add the ancillary pieces
-        if ((converter != null) && (reverseConverter != null)) {
-            forwardBinding.setConverter(converter);
-            reverseBinding.setConverter(reverseConverter);
-        }
-        if (validator != null) {
-            forwardBinding.setValidator(validator);
-        }
-
-        // rebind if we were bound
-        if (bound) {
-            forwardBinding.bind();
-            reverseBinding.bind();
-        }
-
-    }
-
-    public void bind() {
-        if (!bound) {
-            bound = true;
-            //guard checks
-
-            // both converter and reverseConverter must be set or not
-            if ((converter == null) != (reverseConverter == null)) {
-                throw new RuntimeException("Both converter or reverseConverter must be set or unset to bind.  Only "
-                        + ((converter != null) ? "converter": "reverseConverter") + " is set.");
-            }
-            // don't bind if we are half set up, quietly stop
-            if (forwardBinding == null || reverseBinding == null) {
-                // don't worry about the bind state, if the binding
-                // is completed we will bind in rebuild
-                return;
-            }
-
-            forwardBinding.bind();
-            reverseBinding.bind();
-        }
-    }
-
-    public void unbind() {
-        if (bound) {
-            forwardBinding.unbind();
-            reverseBinding.unbind();
-            bound = false;
-        }
-    }
-
-    public void rebind() {
-        if (bound) {
-            unbind();
-            bind();
-        }
-    }
-
-    public void update() {
-        forwardBinding.update();
-    }
-
-    public void reverseUpdate() {
-        reverseBinding.update();
-    }
-}
-
diff --git a/subprojects/groovy-swing/src/main/java/org/codehaus/groovy/binding/PropertyBinding.java b/subprojects/groovy-swing/src/main/java/org/codehaus/groovy/binding/PropertyBinding.java
deleted file mode 100644
index dbc9a89..0000000
--- a/subprojects/groovy-swing/src/main/java/org/codehaus/groovy/binding/PropertyBinding.java
+++ /dev/null
@@ -1,368 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.binding;
-
-import groovy.beans.DefaultPropertyAccessor;
-import groovy.beans.PropertyAccessor;
-import groovy.lang.GroovyRuntimeException;
-import groovy.lang.MissingMethodException;
-import org.codehaus.groovy.runtime.InvokerHelper;
-import org.codehaus.groovy.runtime.InvokerInvocationException;
-import org.codehaus.groovy.runtime.ResourceGroovyMethods;
-import org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation;
-
-import javax.swing.*;
-import java.awt.*;
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
-import java.beans.PropertyVetoException;
-import java.io.IOException;
-import java.lang.reflect.InvocationTargetException;
-import java.net.URL;
-import java.util.Enumeration;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-
-/**
- * @since Groovy 1.1
- */
-@Deprecated
-public class PropertyBinding implements SourceBinding, TargetBinding, TriggerBinding {
... 1934 lines suppressed ...


[groovy] 13/23: GROOVY-9254: Split package renaming second stage (remove violating packages)

Posted by pa...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

paulk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git

commit 88034ff1d52642ff871b1344df78804f5f76541c
Author: Paul King <pa...@asert.com.au>
AuthorDate: Wed Sep 18 19:53:42 2019 +1000

    GROOVY-9254: Split package renaming second stage (remove violating packages)
---
 .../src/main/groovy/groovy/inspect/TextNode.groovy |   55 -
 .../groovy/groovy/inspect/TextTreeNodeMaker.groovy |   37 -
 .../groovy/inspect/swingui/AstBrowser.groovy       |  690 --------
 .../inspect/swingui/AstNodeToScriptAdapter.groovy  | 1185 --------------
 .../inspect/swingui/ButtonOrDefaultRenderer.groovy |   42 -
 .../inspect/swingui/ButtonOrTextEditor.groovy      |   61 -
 .../groovy/inspect/swingui/ObjectBrowser.groovy    |  168 --
 .../inspect/swingui/ScriptToTreeNodeAdapter.groovy |  823 ----------
 .../groovy/groovy/inspect/swingui/package.html     |   28 -
 .../src/main/groovy/groovy/ui/Console.groovy       | 1718 --------------------
 .../main/groovy/groovy/ui/ConsoleActions.groovy    |  428 -----
 .../src/main/groovy/groovy/ui/ConsoleApplet.groovy |   42 -
 .../main/groovy/groovy/ui/ConsoleIvyPlugin.groovy  |   65 -
 .../groovy/groovy/ui/ConsolePreferences.groovy     |  168 --
 .../src/main/groovy/groovy/ui/ConsoleSupport.java  |   91 --
 .../main/groovy/groovy/ui/ConsoleTextEditor.java   |  356 ----
 .../src/main/groovy/groovy/ui/ConsoleView.groovy   |  181 ---
 .../src/main/groovy/groovy/ui/HistoryRecord.groovy |   48 -
 .../main/groovy/groovy/ui/OutputTransforms.groovy  |  110 --
 .../groovy/groovy/ui/SystemOutputInterceptor.java  |  135 --
 .../src/main/groovy/groovy/ui/package.html         |   28 -
 .../groovy/groovy/ui/text/AutoIndentAction.groovy  |   55 -
 .../groovy/groovy/ui/text/FindReplaceUtility.java  |  544 -------
 .../main/groovy/groovy/ui/text/GroovyFilter.java   |  271 ---
 .../groovy/groovy/ui/text/MatchingHighlighter.java |  222 ---
 .../groovy/groovy/ui/text/SmartDocumentFilter.java |  361 ----
 .../ui/text/StructuredSyntaxDocumentFilter.java    |  574 -------
 .../groovy/ui/text/StructuredSyntaxHandler.java    |  107 --
 .../groovy/ui/text/StructuredSyntaxResources.java  |   81 -
 .../src/main/groovy/groovy/ui/text/TextEditor.java |  500 ------
 .../groovy/groovy/ui/text/TextUndoManager.java     |  201 ---
 .../src/main/groovy/groovy/ui/text/package.html    |   28 -
 .../groovy/groovy/ui/view/BasicContentPane.groovy  |  158 --
 .../main/groovy/groovy/ui/view/BasicMenuBar.groovy |  102 --
 .../groovy/groovy/ui/view/BasicStatusBar.groovy    |   34 -
 .../main/groovy/groovy/ui/view/BasicToolBar.groovy |   46 -
 .../src/main/groovy/groovy/ui/view/Defaults.groovy |   88 -
 .../main/groovy/groovy/ui/view/GTKDefaults.groovy  |   58 -
 .../groovy/groovy/ui/view/MacOSXDefaults.groovy    |   88 -
 .../groovy/groovy/ui/view/MacOSXMenuBar.groovy     |  149 --
 .../groovy/groovy/ui/view/WindowsDefaults.groovy   |   35 -
 .../inspect/swingui/AstBrowserProperties.groovy    |   67 -
 .../main/resources/groovy/ui/Console.properties    |   47 -
 .../src/main/resources/groovy/ui/ConsoleIcon.png   |  Bin 3739 -> 0 bytes
 .../groovy/ui/InteractiveShell.properties          |   66 -
 .../main/resources/groovy/ui/icons/arrow_redo.png  |  Bin 625 -> 0 bytes
 .../main/resources/groovy/ui/icons/arrow_undo.png  |  Bin 631 -> 0 bytes
 .../main/resources/groovy/ui/icons/book_next.png   |  Bin 702 -> 0 bytes
 .../resources/groovy/ui/icons/book_previous.png    |  Bin 680 -> 0 bytes
 .../resources/groovy/ui/icons/bullet_green.png     |  Bin 295 -> 0 bytes
 .../src/main/resources/groovy/ui/icons/clear.png   |  Bin 524 -> 0 bytes
 .../src/main/resources/groovy/ui/icons/credits.txt |   24 -
 .../src/main/resources/groovy/ui/icons/cross.png   |  Bin 655 -> 0 bytes
 .../src/main/resources/groovy/ui/icons/cut.png     |  Bin 648 -> 0 bytes
 .../src/main/resources/groovy/ui/icons/cut_red.png |  Bin 650 -> 0 bytes
 .../src/main/resources/groovy/ui/icons/disk.png    |  Bin 620 -> 0 bytes
 .../src/main/resources/groovy/ui/icons/find.png    |  Bin 659 -> 0 bytes
 .../main/resources/groovy/ui/icons/folder_page.png |  Bin 688 -> 0 bytes
 .../src/main/resources/groovy/ui/icons/page.png    |  Bin 635 -> 0 bytes
 .../main/resources/groovy/ui/icons/page_copy.png   |  Bin 663 -> 0 bytes
 .../main/resources/groovy/ui/icons/page_paste.png  |  Bin 703 -> 0 bytes
 .../main/resources/groovy/ui/icons/script_go.png   |  Bin 839 -> 0 bytes
 .../resources/groovy/ui/icons/text_replace.png     |  Bin 691 -> 0 bytes
 63 files changed, 10365 deletions(-)

diff --git a/subprojects/groovy-console/src/main/groovy/groovy/inspect/TextNode.groovy b/subprojects/groovy-console/src/main/groovy/groovy/inspect/TextNode.groovy
deleted file mode 100644
index d76748c..0000000
--- a/subprojects/groovy-console/src/main/groovy/groovy/inspect/TextNode.groovy
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-/**
- * Represents a plain text node for use in the AST tree made by ASTBrowser 
- */
-package groovy.inspect
-
-import groovy.transform.CompileStatic
-
-@CompileStatic
-@Deprecated
-class TextNode {
-    Object userObject
-    List<List<String>> properties
-    TextNode parent
-    List children
-     
-    TextNode(Object userObject) {
-        this.userObject = userObject
-        children = new ArrayList<TextNode>()
-    }
-
-    TextNode(Object userObject, List<List<String>> properties) {
-        this(userObject)
-        this.properties = properties
-    }
-    
-    void add(TextNode child) {
-        children << child
-    }
-    
-    void setParent(TextNode newParent) {
-        parent = newParent
-    }
-    
-    String toString() {
-        userObject ? userObject.toString() : 'null' 
-    }
-}
diff --git a/subprojects/groovy-console/src/main/groovy/groovy/inspect/TextTreeNodeMaker.groovy b/subprojects/groovy-console/src/main/groovy/groovy/inspect/TextTreeNodeMaker.groovy
deleted file mode 100644
index fa24403..0000000
--- a/subprojects/groovy-console/src/main/groovy/groovy/inspect/TextTreeNodeMaker.groovy
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-/**
- * A factory class for plain text nodes for use in the AST tree made by ASTBrowser 
- */
-package groovy.inspect
-
-import groovy.inspect.swingui.AstBrowserNodeMaker
-import groovy.transform.CompileStatic
-
-@CompileStatic
-@Deprecated
-class TextTreeNodeMaker implements AstBrowserNodeMaker<TextNode> {
-    TextNode makeNode(Object userObject) {
-        new TextNode(userObject)
-    }
-
-    TextNode makeNodeWithProperties(Object userObject, List<List<String>> properties) {
-        new TextNode(userObject, properties)
-    }
-}
\ No newline at end of file
diff --git a/subprojects/groovy-console/src/main/groovy/groovy/inspect/swingui/AstBrowser.groovy b/subprojects/groovy-console/src/main/groovy/groovy/inspect/swingui/AstBrowser.groovy
deleted file mode 100644
index 9882fc3..0000000
--- a/subprojects/groovy-console/src/main/groovy/groovy/inspect/swingui/AstBrowser.groovy
+++ /dev/null
@@ -1,690 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package groovy.inspect.swingui
-
-import groovy.lang.GroovyClassLoader.ClassCollector
-import groovy.swing.SwingBuilder
-import groovy.transform.CompileStatic
-import org.apache.groovy.io.StringBuilderWriter
-import org.codehaus.groovy.ast.ClassNode
-import org.codehaus.groovy.control.CompilationUnit
-import org.codehaus.groovy.control.CompilerConfiguration
-import org.codehaus.groovy.control.Phases
-import org.codehaus.groovy.control.SourceUnit
-import org.objectweb.asm.ClassReader
-import org.objectweb.asm.util.ASMifier
-import org.objectweb.asm.util.TraceClassVisitor
-
-import javax.swing.*
-import javax.swing.event.TreeSelectionEvent
-import javax.swing.event.TreeSelectionListener
-import javax.swing.tree.DefaultMutableTreeNode
-import javax.swing.tree.DefaultTreeModel
-import javax.swing.tree.TreeNode
-import javax.swing.tree.TreeSelectionModel
-import java.awt.*
-import java.awt.event.KeyEvent
-import java.util.List
-import java.util.prefs.Preferences
-import java.util.regex.Pattern
-
-import static java.awt.GridBagConstraints.BOTH
-import static java.awt.GridBagConstraints.HORIZONTAL
-import static java.awt.GridBagConstraints.NONE
-import static java.awt.GridBagConstraints.NORTHEAST
-import static java.awt.GridBagConstraints.NORTHWEST
-import static java.awt.GridBagConstraints.WEST
-
-/**
- * This object is a GUI for looking at the AST that Groovy generates. 
- *
- * Usage: java groovy.inspect.swingui.AstBrowser [filename]
- *         where [filename] is an existing Groovy script. 
- */
-@Deprecated
-class AstBrowser {
-
-    private static final String BYTECODE_MSG_SELECT_NODE = '// Please select a class node in the tree view.'
-    private static final String NO_BYTECODE_AVAILABLE_AT_THIS_PHASE = '// No bytecode available at this phase'
-
-    private inputArea, rootElement, decompiledSource, jTree, propertyTable, splitterPane, mainSplitter, bytecodeView, asmifierView
-    boolean showScriptFreeForm, showScriptClass, showClosureClasses, showTreeView, showIndyBytecode
-    GeneratedBytecodeAwareGroovyClassLoader classLoader
-    def prefs = new AstBrowserUiPreferences()
-    Action refreshAction
-    private CompilerConfiguration config
-
-    AstBrowser(inputArea, rootElement, classLoader, config = null) {
-        this.inputArea = inputArea
-        this.rootElement = rootElement
-        this.classLoader = new GeneratedBytecodeAwareGroovyClassLoader(classLoader)
-        this.config = config
-    }
-
-    SwingBuilder swing
-    def frame
-
-    static void main(args) {
-
-        if (!args) {
-            println 'Usage: java groovy.inspect.swingui.AstBrowser [filename]\nwhere [filename] is a Groovy script'
-        } else {
-            def file = new File((String) args[0])
-            if (!file.exists()) {
-                println "File $args[0] cannot be found."
-            } else {
-                UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName())
-                new AstBrowser(null, null, new GroovyClassLoader()).run({file.text}, file.path)
-            }
-        }
-    }
-
-    void initAuxViews() {
-        bytecodeView.textEditor.text = BYTECODE_MSG_SELECT_NODE
-        asmifierView.textEditor.text = BYTECODE_MSG_SELECT_NODE
-    }
-
-    void run(Closure script) {
-        run(script, null)
-    }
-
-    void run(Closure script, String name) {
-
-        swing = new SwingBuilder()
-        def phasePicker
-
-        showScriptFreeForm = prefs.showScriptFreeForm
-        showScriptClass = prefs.showScriptClass
-        showClosureClasses = prefs.showClosureClasses
-        showTreeView = prefs.showTreeView
-        showIndyBytecode = prefs.showIndyBytecode
-
-        frame = swing.frame(title: 'Groovy AST Browser' + (name ? " - $name" : ''),
-                location: prefs.frameLocation,
-                size: prefs.frameSize,
-                iconImage: swing.imageIcon(groovy.ui.Console.ICON_PATH).image,
-                defaultCloseOperation: WindowConstants.DISPOSE_ON_CLOSE,
-                windowClosing: { event -> prefs.save(frame, splitterPane, mainSplitter, showScriptFreeForm, showScriptClass, showClosureClasses, phasePicker.selectedItem, showTreeView, showIndyBytecode) }) {
-
-            menuBar {
-                menu(text: 'Show Script', mnemonic: 'S') {
-                    checkBoxMenuItem(selected: showScriptFreeForm) {
-                        action(name: 'Free Form', closure: this.&showScriptFreeForm,
-                                mnemonic: 'F',)
-                    }
-                    checkBoxMenuItem(selected: showScriptClass) {
-                        action(name: 'Class Form', closure: this.&showScriptClass,
-                                mnemonic: 'C')
-                    }
-                    checkBoxMenuItem(selected: showClosureClasses) {
-                        action(name: 'Generated Closure/Lambda Classes', closure: this.&showClosureClasses,
-                                mnemonic: 'G')
-                    }
-                    checkBoxMenuItem(selected: showTreeView) {
-                        action(name: 'Tree View', closure: this.&showTreeView,
-                                mnemonic: 'T')
-                    }
-                    checkBoxMenuItem(selected: showIndyBytecode) {
-                        action(name: 'Generate Indy Bytecode', closure: this.&showIndyBytecode,
-                                mnemonic: 'I')
-                    }
-                }
-                menu(text: 'View', mnemonic: 'V') {
-                    menuItem {action(name: 'Larger Font', closure: this.&largerFont, mnemonic: 'L', accelerator: shortcut('shift L'))}
-                    menuItem {action(name: 'Smaller Font', closure: this.&smallerFont, mnemonic: 'S', accelerator: shortcut('shift S'))}
-                    menuItem {
-                        refreshAction = action(name: 'Refresh', closure: {
-                            decompile(phasePicker.selectedItem.phaseId, script())
-                            compile(jTree, script(), phasePicker.selectedItem.phaseId)
-                            initAuxViews()
-                        }, mnemonic: 'R', accelerator: KeyStroke.getKeyStroke(KeyEvent.VK_F5, 0))
-                    }
-                }
-                menu(text: 'Help', mnemonic: 'H') {
-                    menuItem {action(name: 'About', closure: this.&showAbout, mnemonic: 'A')}
-                }
-            }
-            panel {
-                gridBagLayout()
-                label(text: 'At end of Phase: ',
-                        constraints: gbc(gridx: 0, gridy: 0, gridwidth: 1, gridheight: 1, weightx: 0, weighty: 0, anchor: WEST, fill: HORIZONTAL, insets: [2, 2, 2, 2]))
-                phasePicker = comboBox(items: CompilePhaseAdapter.values(),
-                        selectedItem: prefs.selectedPhase,
-                        actionPerformed: {
-                            // reset text to the default as the phase change removes the focus from the class node
-                            initAuxViews()
-
-                            decompile(phasePicker.selectedItem.phaseId, script())
-                            compile(jTree, script(), phasePicker.selectedItem.phaseId)
-                        },
-                        constraints: gbc(gridx: 1, gridy: 0, gridwidth: 1, gridheight: 1, weightx: 1.0, weighty: 0, anchor: NORTHWEST, fill: NONE, insets: [2, 2, 2, 2]))
-                button(text: 'Refresh',
-                        actionPerformed: {
-                            decompile(phasePicker.selectedItem.phaseId, script())
-                            compile(jTree, script(), phasePicker.selectedItem.phaseId)
-                            initAuxViews()
-                        },
-                        constraints: gbc(gridx: 2, gridy: 0, gridwidth: 1, gridheight: 1, weightx: 0, weighty: 0, anchor: NORTHEAST, fill: NONE, insets: [2, 2, 2, 3]))
-                splitterPane = splitPane(
-                        visible: showTreeView, 
-                        leftComponent: scrollPane {
-                            jTree = tree(
-                                    name: 'AstTreeView', rowHeight: 0, /* force recalc */
-                                    model: new DefaultTreeModel(new DefaultMutableTreeNode('Loading...'))) {}
-                        },
-                        rightComponent: scrollPane {
-                            propertyTable = table {
-                                tableModel(list: [[:]]) {
-                                    propertyColumn(header: 'Name', propertyName: 'name')
-                                    propertyColumn(header: 'Value', propertyName: 'value')
-                                    propertyColumn(header: 'Type', propertyName: 'type')
-                                }
-                            }
-                        }
-                ) { }
-                mainSplitter = splitPane(
-                        orientation: JSplitPane.VERTICAL_SPLIT,
-                        topComponent: splitterPane,
-                        bottomComponent: tabbedPane {
-                            widget(decompiledSource = new groovy.ui.ConsoleTextEditor(editable: false, showLineNumbers: false), title:'Source')
-                            widget(bytecodeView = new groovy.ui.ConsoleTextEditor(editable: false, showLineNumbers: false), title:getByteCodeTitle())
-                            widget(asmifierView = new groovy.ui.ConsoleTextEditor(editable: false, showLineNumbers: false), title:getASMifierTitle())
-                        },
-                        constraints: gbc(gridx: 0, gridy: 2, gridwidth: 3, gridheight: 1, weightx: 1.0, weighty: 1.0, anchor: NORTHWEST, fill: BOTH, insets: [2, 2, 2, 2])) { }
-
-            }
-        }
-
-        initAuxViews()
-
-        propertyTable.model.rows.clear() //for some reason this suppress an empty row
-
-        jTree.cellRenderer.setLeafIcon(swing.imageIcon(groovy.ui.Console.NODE_ICON_PATH))
-        jTree.selectionModel.selectionMode = TreeSelectionModel.SINGLE_TREE_SELECTION
-        jTree.addTreeSelectionListener({ TreeSelectionEvent e ->
-
-            propertyTable.model.rows.clear()
-            propertyTable.columnModel.getColumn(1).cellRenderer = new ButtonOrDefaultRenderer()
-            propertyTable.columnModel.getColumn(1).cellEditor = new ButtonOrTextEditor()
-            TreeNode node = jTree.lastSelectedPathComponent
-            if (node instanceof TreeNodeWithProperties) {
-                def titleSuffix = node.properties.find{ it[0] == 'text' }?.get(1)
-                for (it in node.properties) {
-                    def propList = it
-                    if (propList[2] == "ListHashMap" && propList[1] != 'null' && propList[1] != '[:]') {
-                        //If the class is a ListHashMap, make it accessible in a new frame through a button
-                        def kvPairs = propList[1].substring(1, propList[1].length() - 1).tokenize(',')
-                        def kvFirst = kvPairs.get(0)
-                        def btnPanel = swing.button(
-                                text: "Key/value pairs: [" + kvFirst.substring(0, Math.min(25, kvFirst.size())) + "...]",
-                            actionPerformed: {
-                                def mapTable
-                                String title = titleSuffix ? propList[0] + " (" + titleSuffix + ")" : propList[0]
-                                def props = swing.frame(title: title, defaultCloseOperation: JFrame.DISPOSE_ON_CLOSE,
-                                        show: true, locationRelativeTo: null) {
-                                    lookAndFeel("system")
-                                    panel {
-                                        scrollPane() {
-                                            mapTable = swing.table() {
-                                                tableModel(list: [[:]]) {
-                                                    propertyColumn(header: 'Name', propertyName: 'name')
-                                                    propertyColumn(header: 'Value', propertyName: 'value')
-                                                }
-                                            }
-                                        }
-                                    }
-                                }
-                                mapTable.model.rows.clear()
-                                kvPairs.each {
-                                    def kv = it.tokenize(':')
-                                    if (kv)
-                                        mapTable.model.rows << ["name": kv[0], "value": kv[1]]
-                                }
-                                props.pack()
-                            })
-                        propertyTable.model.rows << ["name": propList[0], "value": btnPanel, "type": propList[2]]
-                        btnPanel.updateUI()
-                    } else {
-                        propertyTable.model.rows << ["name": it[0], "value": it[1], "type": it[2]]
-                    }
-                }
-
-                if (inputArea && rootElement) {
-                    // get the line / column information to select the text represented by the current selected node
-                    def lineInfo = node.properties.findAll { it[0] in ['lineNumber', 'columnNumber', 'lastLineNumber', 'lastColumnNumber'] }
-                    def lineInfoMap = lineInfo.inject([:]) { map, info -> map[(info[0])] = Integer.valueOf(info[1]); return map }
-
-                    // when there are valid line / column information (ie. != -1), create a selection in the input area
-                    if (!lineInfoMap.every { k, v -> v == -1 }) {
-                        def startOffset = rootElement.getElement(lineInfoMap.lineNumber - 1).startOffset
-                        inputArea.setCaretPosition(startOffset + lineInfoMap.columnNumber - 1)
-
-                        def endOffset = rootElement.getElement(lineInfoMap.lastLineNumber - 1).startOffset
-                        inputArea.moveCaretPosition(endOffset + lineInfoMap.lastColumnNumber - 1)
-                    } else {
-                        // if no line number is provided, unselect the current selection
-                        // but keep the caret at the same position
-                        inputArea.moveCaretPosition(inputArea.getCaretPosition())
-                    }
-                }
-
-                if (node.classNode || node.methodNode) {
-                    bytecodeView.textEditor.text = '// Loading bytecode ...'
-                    asmifierView.textEditor.text = '// Loading ASMifier\'s output ...'
-                    boolean showOnlyMethodCode = node.methodNode
-
-                    swing.doOutside {
-                        def className = showOnlyMethodCode ? node.getPropertyValue('declaringClass') : node.getPropertyValue('name')
-                        def bytecode = classLoader.getBytecode(className)
-                        if (bytecode) {
-                            def methodName = node.getPropertyValue('name')
-                            def methodDescriptor = node.getPropertyValue('descriptor')
-                            boolean isMethodNameAndMethodDescriptorAvailable = methodName && methodDescriptor
-
-                            String bytecodeSource = generateSource(bytecode, {writer -> new TraceClassVisitor(new PrintWriter(writer))})
-                            showSource(bytecodeView, bytecodeSource, showOnlyMethodCode, isMethodNameAndMethodDescriptorAvailable, {"^.*\\n.*${Pattern.quote(methodName + methodDescriptor)}[\\s\\S]*?\\n[}|\\n]"})
-
-                            String asmifierSource = generateSource(bytecode, {writer -> new TraceClassVisitor(null, new ASMifier(), new PrintWriter(writer))})
-                            showSource(asmifierView, asmifierSource, showOnlyMethodCode, isMethodNameAndMethodDescriptorAvailable, {"^.*\\n.*${Pattern.quote(methodName)}.*?${Pattern.quote(methodDescriptor)}[\\s\\S]*?\\n[}|\\n]"})
-                        } else {
-                            swing.doLater {
-                                bytecodeView.textEditor.text = NO_BYTECODE_AVAILABLE_AT_THIS_PHASE
-                                asmifierView.textEditor.text = NO_BYTECODE_AVAILABLE_AT_THIS_PHASE
-                            }
-                        }
-                    }
-
-                } else {
-                    bytecodeView.textEditor.text = ''
-                    asmifierView.textEditor.text = ''
-                }
-            }
-            propertyTable.model.fireTableDataChanged()
-        } as TreeSelectionListener)
-
-        updateFontSize(prefs.decompiledSourceFontSize)
-
-        frame.pack()
-        frame.location = prefs.frameLocation
-        frame.size = prefs.frameSize
-        splitterPane.dividerLocation = prefs.verticalDividerLocation
-        mainSplitter.dividerLocation = prefs.horizontalDividerLocation
-        frame.visible = true
-
-        String source = script()
-        decompile(phasePicker.selectedItem.phaseId, source)
-        compile(jTree, source, phasePicker.selectedItem.phaseId)
-        jTree.rootVisible = false
-        jTree.showsRootHandles = true   // some OS's require this as a step to show nodes
-
-    }
-
-    private static final int INITIAL_CAPACITY = 64 * 1024 // 64K
-    private String generateSource(byte[] bytecode, getVisitor) {
-        def sw = new StringBuilderWriter(INITIAL_CAPACITY) // the generated code of `println 123` occupies about 618 bytes, so we should increase the initial capacity to 64K
-        new ClassReader(bytecode).accept(getVisitor(sw), 0)
-        return sw.toString()
-    }
-
-    private void showSource(view, String source, boolean showOnlyMethodCode, boolean isMethodNameAndMethodDescriptorAvailable, getPatternStr) {
-        swing.doLater {
-            view.textEditor.text = source
-            if (showOnlyMethodCode && isMethodNameAndMethodDescriptorAvailable) {
-                def pattern = Pattern.compile(getPatternStr(), Pattern.MULTILINE)
-                def matcher = pattern.matcher(source)
-                if (matcher.find()) {
-                    view.textEditor.text = source.substring(matcher.start(0), matcher.end(0))
-                }
-            }
-
-            view.textEditor.caretPosition = 0
-        }
-    }
-
-    void largerFont(EventObject evt = null) {
-        updateFontSize(decompiledSource.textEditor.font.size + 2)
-    }
-
-    void smallerFont(EventObject evt = null) {
-        updateFontSize(decompiledSource.textEditor.font.size - 2)
-    }
-
-    private final updateFontSize = { newFontSize ->
-        if (newFontSize > 40) {
-            newFontSize = 40
-        } else if (newFontSize < 4) {
-            newFontSize = 4
-        }
-
-        prefs.decompiledSourceFontSize = newFontSize
-
-        def newDecompilerFont = new Font(decompiledSource.textEditor.font.name, decompiledSource.textEditor.font.style, newFontSize)
-        decompiledSource.textEditor.font = newDecompilerFont
-
-        def newFont = new Font(jTree.cellRenderer.font.name, jTree.cellRenderer.font.style, newFontSize)
-        jTree.cellRenderer.font = newFont
-        jTree.model.reload(jTree.model.root)
-        propertyTable.tableHeader.font = newFont
-        propertyTable.font = newFont
-        propertyTable.rowHeight = newFontSize + 2
-    }
-
-    void showAbout(EventObject evt) {
-        def pane = swing.optionPane()
-        def version = GroovySystem.getVersion()
-        pane.setMessage('An interactive GUI to explore AST capabilities\nVersion ' + version)
-        def dialog = pane.createDialog(frame, 'About Groovy AST Browser')
-        dialog.pack()
-        dialog.visible = true
-    }
-
-    void showScriptFreeForm(EventObject evt) {
-        showScriptFreeForm = evt.source.selected
-    }
-
-    void showScriptClass(EventObject evt) {
-        showScriptClass = evt.source.selected
-    }
-
-    void showClosureClasses(EventObject evt)  {
-        showClosureClasses = evt.source.selected
-    }
-
-    void showTreeView(EventObject evt = null) {
-        showTreeView = !showTreeView
-        splitterPane.visible = showTreeView
-        if (showTreeView) {
-            mainSplitter.dividerLocation = 100
-        } else {
-            mainSplitter.dividerLocation = 0
-        }
-    }
-
-    void showIndyBytecode(EventObject evt = null) {
-        showIndyBytecode = evt.source.selected
-        initAuxViews()
-        refreshAction.actionPerformed(null)
-        updateTabTitles()
-    }
-
-    private void updateTabTitles() {
-        def tabPane = mainSplitter.bottomComponent
-        int tabCount = tabPane.getTabCount()
-        for (int i = 0; i < tabCount; i++) {
-            def component = tabPane.getComponentAt(i);
-            if (bytecodeView.is(component)) {
-                tabPane.setTitleAt(i, getByteCodeTitle())
-            } else if (asmifierView.is(component)) {
-                tabPane.setTitleAt(i, getASMifierTitle())
-            }
-        }
-    }
-
-    private String getByteCodeTitle() {
-        'Bytecode' + (showIndyBytecode ? ' (Indy)' : '')
-    }
-
-    private String getASMifierTitle() {
-        'ASMifier' + (showIndyBytecode ? ' (Indy)' : '')
-    }
-
-    void decompile(phaseId, source) {
-
-        decompiledSource.textEditor.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR))
-        decompiledSource.textEditor.text = 'Loading...'
-
-        swing.doOutside {
-            try {
-
-                String result = new AstNodeToScriptAdapter().compileToScript(source, phaseId, classLoader, showScriptFreeForm, showScriptClass, config)
-                swing.doLater {
-                    decompiledSource.textEditor.text = result 
-                    decompiledSource.textEditor.setCaretPosition(0)
-                    decompiledSource.textEditor.setCursor(Cursor.defaultCursor)
-                }
-            } catch (Throwable t) {
-                swing.doLater {
-                    decompiledSource.textEditor.text = t.getMessage()
-                    decompiledSource.textEditor.setCaretPosition(0)
-                    decompiledSource.textEditor.setCursor(Cursor.defaultCursor)
-                }
-                throw t
-            }
-        }
-    }
-
-    void compile(jTree, String script, int compilePhase) {
-        jTree.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR))
-        def model = jTree.model
-        swing.edt {
-            def root = model.getRoot()
-            root.removeAllChildren()
-            root.add(new DefaultMutableTreeNode(new DefaultMutableTreeNode('Loading...')))
-            model.reload(root)
-        }
-        swing.doOutside {
-            try {
-                def nodeMaker = new SwingTreeNodeMaker()
-                def adapter = new ScriptToTreeNodeAdapter(classLoader, showScriptFreeForm, showScriptClass, showClosureClasses, nodeMaker, config)
-                classLoader.clearBytecodeTable()
-                def result = adapter.compile(script, compilePhase, showIndyBytecode)
-                swing.doLater {
-                    model.setRoot(result)
-                    model.reload()
-                    jTree.setCursor(Cursor.defaultCursor)
-                }
-            } catch (Throwable t) {
-                swing.doLater {
-                    jTree.setCursor(Cursor.defaultCursor)
-                }
-                throw t
-            }
-        }
-    }
-}
-
-/**
- * This class sets and restores control positions in the browser.
- */
-@Deprecated
-class AstBrowserUiPreferences {
-
-    final frameLocation
-    final frameSize
-    final verticalDividerLocation
-    final horizontalDividerLocation
-    final boolean showScriptFreeForm
-    final boolean showTreeView
-    final boolean showScriptClass
-    final boolean showClosureClasses
-    final boolean showIndyBytecode
-    int decompiledSourceFontSize
-    final CompilePhaseAdapter selectedPhase
-
-    AstBrowserUiPreferences() {
-        Preferences prefs = Preferences.userNodeForPackage(AstBrowserUiPreferences)
-        frameLocation = [
-                prefs.getInt('frameX', 200),
-                prefs.getInt('frameY', 200)]
-        frameSize = [
-                prefs.getInt('frameWidth', 800),
-                prefs.getInt('frameHeight', 600)]
-
-        decompiledSourceFontSize = prefs.getInt('decompiledFontSize', 12)
-        verticalDividerLocation = Math.max(prefs.getInt('verticalSplitterLocation', 100), 100)
-        horizontalDividerLocation = Math.max(prefs.getInt('horizontalSplitterLocation', 100), 100)
-        showScriptFreeForm = prefs.getBoolean('showScriptFreeForm', false)
-        showScriptClass = prefs.getBoolean('showScriptClass', true)
-        showClosureClasses = prefs.getBoolean('showClosureClasses', false)
-        showTreeView = prefs.getBoolean('showTreeView', true)
-        showIndyBytecode = prefs.getBoolean('showIndyBytecode', false)
-        int phase = prefs.getInt('compilerPhase', Phases.SEMANTIC_ANALYSIS)
-        selectedPhase = CompilePhaseAdapter.values().find {
-            it.phaseId == phase
-        }
-    }
-
-    def save(frame, vSplitter, hSplitter, scriptFreeFormPref, scriptClassPref, closureClassesPref, CompilePhaseAdapter phase, showTreeView, showIndyBytecode=false) {
-        Preferences prefs = Preferences.userNodeForPackage(AstBrowserUiPreferences)
-        prefs.putInt('decompiledFontSize', decompiledSourceFontSize as int)
-        prefs.putInt('frameX', frame.location.x as int)
-        prefs.putInt('frameY', frame.location.y as int)
-        prefs.putInt('frameWidth', frame.size.width as int)
-        prefs.putInt('frameHeight', frame.size.height as int)
-        prefs.putInt('verticalSplitterLocation', vSplitter.dividerLocation)
-        prefs.putInt('horizontalSplitterLocation', hSplitter.dividerLocation)
-        prefs.putBoolean('showScriptFreeForm', scriptFreeFormPref)
-        prefs.putBoolean('showScriptClass', scriptClassPref)
-        prefs.putBoolean('showClosureClasses', closureClassesPref)
-        prefs.putBoolean('showTreeView', showTreeView)
-        prefs.putBoolean('showIndyBytecode', showIndyBytecode)
-        prefs.putInt('compilerPhase', phase.phaseId)
-    }
-}
-
-/**
- * An adapter for the CompilePhase enum that can be entered into a Swing combobox.
- */
-@CompileStatic
-@Deprecated
-enum CompilePhaseAdapter {
-    INITIALIZATION(Phases.INITIALIZATION, 'Initialization'),
-    PARSING(Phases.PARSING, 'Parsing'),
-    CONVERSION(Phases.CONVERSION, 'Conversion'),
-    SEMANTIC_ANALYSIS(Phases.SEMANTIC_ANALYSIS, 'Semantic Analysis'),
-    CANONICALIZATION(Phases.CANONICALIZATION, 'Canonicalization'),
-    INSTRUCTION_SELECTION(Phases.INSTRUCTION_SELECTION, 'Instruction Selection'),
-    CLASS_GENERATION(Phases.CLASS_GENERATION, 'Class Generation'),
-    OUTPUT(Phases.OUTPUT, 'Output'),
-    FINALIZATION(Phases.FINALIZATION, 'Finalization')
-
-    final int phaseId
-    final String string
-
-    CompilePhaseAdapter(int phaseId, String string) {
-        this.phaseId = phaseId
-        this.string = string
-    }
-
-    String toString() {
-        return string
-    }
-}
-
-/**
- * This class is a TreeNode and you can store additional properties on it.
- */
-@CompileStatic
-@Deprecated
-class TreeNodeWithProperties extends DefaultMutableTreeNode {
-
-    List<List<String>> properties
-
-    /**
-     * Creates a tree node and attaches properties to it.
-     * @param userObject same as a DefaultMutableTreeNode requires
-     * @param properties a list of String lists
-     */
-    TreeNodeWithProperties(userObject, List<List<String>> properties) {
-        super(userObject)
-        this.properties = properties
-    }
-
-    String getPropertyValue(String name)  {
-        def match = properties.find { n, v, t -> name == n }
-        return match != null ? match[1] : null
-    }
-
-    boolean isClassNode() {
-        getPropertyValue('class') in ['class org.codehaus.groovy.ast.ClassNode', 'class org.codehaus.groovy.ast.InnerClassNode']
-    }
-
-    boolean isMethodNode() {
-        getPropertyValue('class') in ['class org.codehaus.groovy.ast.MethodNode', 'class org.codehaus.groovy.ast.ConstructorNode']
-    }
-}
-
-/**
- * This interface is used to create tree nodes of various types 
- */
-@CompileStatic
-@Deprecated
-interface AstBrowserNodeMaker<T> {
-    T makeNode(Object userObject)
-
-    T makeNodeWithProperties(Object userObject, List<List<String>> properties)
-}
-
-/**
- * Creates tree nodes for swing UI  
- */
-@CompileStatic
-@Deprecated
-class SwingTreeNodeMaker implements AstBrowserNodeMaker<DefaultMutableTreeNode> {
-    DefaultMutableTreeNode makeNode(Object userObject) {
-        new DefaultMutableTreeNode(userObject)
-    }
-
-    DefaultMutableTreeNode makeNodeWithProperties(Object userObject, List<List<String>> properties) {
-        new TreeNodeWithProperties(userObject, properties)
-    }
-}
-
-@Deprecated
-class BytecodeCollector extends ClassCollector {
-
-    Map<String, byte[]> bytecode
-
-    BytecodeCollector(ClassCollector delegate, Map<String,byte[]> bytecode) {
-        super(delegate.cl, delegate.unit, delegate.su)
-        this.bytecode = bytecode
-    }
-
-    @Override
-    protected Class createClass(byte[] code, ClassNode classNode) {
-        bytecode[classNode.name] = code
-        return super.createClass(code, classNode)
-    }
-
-}
-
-@CompileStatic
-@Deprecated
-class GeneratedBytecodeAwareGroovyClassLoader extends GroovyClassLoader {
-
-    private final Map<String, byte[]> bytecode = new HashMap<String, byte[]>()
-
-    GeneratedBytecodeAwareGroovyClassLoader(final GroovyClassLoader parent) {
-        super(parent)
-    }
-
-    @Override
-    protected ClassCollector createCollector(CompilationUnit unit, SourceUnit su) {
-        def collector = super.createCollector(unit, su)
-        new BytecodeCollector(collector, bytecode)
-    }
-
-    void clearBytecodeTable() {
-        bytecode.clear()
-    }
-
-    byte[] getBytecode(final String className) {
-        bytecode[className]
-    }
-}
diff --git a/subprojects/groovy-console/src/main/groovy/groovy/inspect/swingui/AstNodeToScriptAdapter.groovy b/subprojects/groovy-console/src/main/groovy/groovy/inspect/swingui/AstNodeToScriptAdapter.groovy
deleted file mode 100644
index 9f75dcd..0000000
--- a/subprojects/groovy-console/src/main/groovy/groovy/inspect/swingui/AstNodeToScriptAdapter.groovy
+++ /dev/null
@@ -1,1185 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package groovy.inspect.swingui
-
-import groovy.transform.CompileStatic
-import org.apache.groovy.io.StringBuilderWriter
-import org.codehaus.groovy.ast.ASTNode
-import org.codehaus.groovy.ast.AnnotationNode
-import org.codehaus.groovy.ast.ClassHelper
-import org.codehaus.groovy.ast.ClassNode
-import org.codehaus.groovy.ast.ConstructorNode
-import org.codehaus.groovy.ast.FieldNode
-import org.codehaus.groovy.ast.GenericsType
-import org.codehaus.groovy.ast.GroovyClassVisitor
-import org.codehaus.groovy.ast.GroovyCodeVisitor
-import org.codehaus.groovy.ast.ImportNode
-import org.codehaus.groovy.ast.MethodNode
-import org.codehaus.groovy.ast.PackageNode
-import org.codehaus.groovy.ast.Parameter
-import org.codehaus.groovy.ast.PropertyNode
-import org.codehaus.groovy.ast.expr.ArgumentListExpression
-import org.codehaus.groovy.ast.expr.ArrayExpression
-import org.codehaus.groovy.ast.expr.AttributeExpression
-import org.codehaus.groovy.ast.expr.BinaryExpression
-import org.codehaus.groovy.ast.expr.BitwiseNegationExpression
-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.ClosureListExpression
-import org.codehaus.groovy.ast.expr.ConstantExpression
-import org.codehaus.groovy.ast.expr.ConstructorCallExpression
-import org.codehaus.groovy.ast.expr.DeclarationExpression
-import org.codehaus.groovy.ast.expr.ElvisOperatorExpression
-import org.codehaus.groovy.ast.expr.EmptyExpression
-import org.codehaus.groovy.ast.expr.Expression
-import org.codehaus.groovy.ast.expr.FieldExpression
-import org.codehaus.groovy.ast.expr.GStringExpression
-import org.codehaus.groovy.ast.expr.LambdaExpression
-import org.codehaus.groovy.ast.expr.ListExpression
-import org.codehaus.groovy.ast.expr.MapEntryExpression
-import org.codehaus.groovy.ast.expr.MapExpression
-import org.codehaus.groovy.ast.expr.MethodCallExpression
-import org.codehaus.groovy.ast.expr.MethodPointerExpression
-import org.codehaus.groovy.ast.expr.MethodReferenceExpression
-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.SpreadExpression
-import org.codehaus.groovy.ast.expr.SpreadMapExpression
-import org.codehaus.groovy.ast.expr.StaticMethodCallExpression
-import org.codehaus.groovy.ast.expr.TernaryExpression
-import org.codehaus.groovy.ast.expr.TupleExpression
-import org.codehaus.groovy.ast.expr.UnaryMinusExpression
-import org.codehaus.groovy.ast.expr.UnaryPlusExpression
-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.classgen.BytecodeExpression
-import org.codehaus.groovy.classgen.GeneratorContext
-import org.codehaus.groovy.classgen.Verifier
-import org.codehaus.groovy.control.CompilationFailedException
-import org.codehaus.groovy.control.CompilationUnit
-import org.codehaus.groovy.control.CompilationUnit.PrimaryClassNodeOperation
-import org.codehaus.groovy.control.CompilePhase
-import org.codehaus.groovy.control.CompilerConfiguration
-import org.codehaus.groovy.control.SourceUnit
-import org.codehaus.groovy.syntax.Types
-
-import java.lang.reflect.Modifier
-import java.security.CodeSource
-
-/**
- * This class takes Groovy source code, compiles it to a specific compile phase, and then decompiles it
- * back to the groovy source. It is used by GroovyConsole's AST Browser, but can also be invoked from
- * the command line.
- */
-@CompileStatic
-@Deprecated
-class AstNodeToScriptAdapter {
-
-    /**
-     * Run this class as a script to compile a groovy file and print out the resulting source.
-     * @param args
-     *      a filename to compile and a CompilePhase to run to
-     */
-    static void main(String[] args) {
-
-        if (!args || args.length < 2) {
-            println '''
-Usage: java groovy.inspect.swingui.AstNodeToScriptAdapter [filename] [compilephase]
-where [filename] is a Groovy script
-and [compilephase] is a valid Integer based org.codehaus.groovy.control.CompilePhase'''
-        } else {
-            def file = new File((String) args[0])
-            def phase = CompilePhase.fromPhaseNumber(args[1] as int)
-            if (!file.exists()) {
-                println "File ${args[0]} cannot be found."
-            } else if (phase == null) {
-                println "Compile phase ${args[1]} cannot be mapped to a org.codehaus.groovy.control.CompilePhase."
-            } else {
-                println new AstNodeToScriptAdapter().compileToScript(file.text, phase.getPhaseNumber())
-            }
-        }
-    }
-
-    /**
-     * This method takes source code, compiles it, then reverses it back to source.
-     *
-     * @param script
-     *    the source code to be compiled. If invalid, a compile error occurs
-     * @param compilePhase
-     *    the CompilePhase. Must be an int mapped in {@link CompilePhase}
-     * @param classLoader
-     *    (optional) the classloader to use. If missing/null then the current is used.
-     *    This parameter enables things like ASTBrowser to invoke this with the correct classpath
-     * @param showScriptFreeForm
-     *    Whether or not to show the script portion of the source code
-     * @param showScriptClass
-     *    Whether or not to show the Script class from the source code
-     * @param config
-     *    optional compiler configuration
-     * @returns the source code from the AST state
-     */
-
-    String compileToScript(String script, int compilePhase, ClassLoader classLoader = null, boolean showScriptFreeForm = true, boolean showScriptClass = true, CompilerConfiguration config = null) {
-
-        def writer = new StringBuilderWriter()
-
-        classLoader = classLoader ?: new GroovyClassLoader(getClass().classLoader)
-
-        def scriptName = 'script' + System.currentTimeMillis() + '.groovy'
-        GroovyCodeSource codeSource = new GroovyCodeSource(script, scriptName, '/groovy/script')
-        CompilationUnit cu = new CompilationUnit((CompilerConfiguration) (config ?: CompilerConfiguration.DEFAULT), (CodeSource) codeSource.codeSource, (GroovyClassLoader) classLoader)
-        cu.addPhaseOperation(new AstNodeToScriptVisitor(writer, showScriptFreeForm, showScriptClass), compilePhase)
-        cu.addSource(codeSource.getName(), script)
-        try {
-            cu.compile(compilePhase)
-        } catch (CompilationFailedException cfe) {
-
-            writer.println 'Unable to produce AST for this phase due to earlier compilation error:'
-            cfe.message.eachLine {
-                writer.println it
-            }
-            writer.println 'Fix the above error(s) and then press Refresh'
-        } catch (Throwable t) {
-            writer.println 'Unable to produce AST for this phase due to an error:'
-            writer.println t.getMessage()
-            writer.println 'Fix the above error(s) and then press Refresh'
-        }
-        return writer.toString()
-    }
-}
-
-/**
- * An adapter from ASTNode tree to source code.
- */
-@CompileStatic
-@Deprecated
-class AstNodeToScriptVisitor extends PrimaryClassNodeOperation implements GroovyCodeVisitor, GroovyClassVisitor {
-
-    private final Writer _out
-    Stack<String> classNameStack = new Stack<String>()
-    String _indent = ''
-    boolean readyToIndent = true
-    boolean showScriptFreeForm
-    boolean showScriptClass
-    boolean scriptHasBeenVisited
-
-    def AstNodeToScriptVisitor(Writer writer, boolean showScriptFreeForm = true, boolean showScriptClass = true) {
-        this._out = writer
-        this.showScriptFreeForm = showScriptFreeForm
-        this.showScriptClass = showScriptClass
-        this.scriptHasBeenVisited = false
-    }
-
-    void call(SourceUnit source, GeneratorContext context, ClassNode classNode) {
-
-        visitPackage(source?.getAST()?.getPackage())
-
-        visitAllImports(source)
-
-        if (showScriptFreeForm && !scriptHasBeenVisited) {
-            scriptHasBeenVisited = true
-            source?.getAST()?.getStatementBlock()?.visit(this)
-        }
-        if (showScriptClass || !classNode.isScript()) {
-            visitClass classNode
-        }
-    }
-
-    private def visitAllImports(SourceUnit source) {
-        boolean staticImportsPresent = false
-        boolean importsPresent = false
-
-        source?.getAST()?.getStaticImports()?.values()?.each {
-            visitImport(it)
-            staticImportsPresent = true
-        }
-        source?.getAST()?.getStaticStarImports()?.values()?.each {
-            visitImport(it)
-            staticImportsPresent = true
-        }
-
-        if (staticImportsPresent) {
-            printDoubleBreak()
-        }
-
-        source?.getAST()?.getImports()?.each {
-            visitImport(it)
-            importsPresent = true
-        }
-        source?.getAST()?.getStarImports()?.each {
-            visitImport(it)
-            importsPresent = true
-        }
-        if (importsPresent) {
-            printDoubleBreak()
-        }
-    }
-
-
-    void print(parameter) {
-        def output = parameter.toString()
-
-        if (readyToIndent) {
-            _out.print _indent
-            readyToIndent = false
-            while (output.startsWith(' ')) {
-                output = output[1..-1]  // trim left
-            }
-        }
-        if (_out.toString().endsWith(' ')) {
-            if (output.startsWith(' ')) {
-                output = output[1..-1]
-            }
-        }
-        _out.print output
-    }
-
-    def println(parameter) {
-        throw new UnsupportedOperationException('Wrong API')
-    }
-
-    def indented(Closure block) {
-        String startingIndent = _indent
-        _indent = _indent + '    '
-        block()
-        _indent = startingIndent
-    }
-
-    def printLineBreak() {
-        if (!_out.toString().endsWith('\n')) {
-            _out.print '\n'
-        }
-        readyToIndent = true
-    }
-
-    def printDoubleBreak() {
-        if (_out.toString().endsWith('\n\n')) {
-            // do nothing
-        } else if (_out.toString().endsWith('\n')) {
-            _out.print '\n'
-        } else {
-            _out.print '\n'
-            _out.print '\n'
-        }
-        readyToIndent = true
-    }
-
-    void visitPackage(PackageNode packageNode) {
-
-        if (packageNode) {
-
-            packageNode.annotations?.each {
-                visitAnnotationNode(it)
-                printLineBreak()
-            }
-
-            if (packageNode.text.endsWith('.')) {
-                print packageNode.text[0..-2]
-            } else {
-                print packageNode.text
-            }
-            printDoubleBreak()
-        }
-    }
-
-    void visitImport(ImportNode node) {
-        if (node) {
-            node.annotations?.each {
-                visitAnnotationNode(it)
-                printLineBreak()
-            }
-            print node.text
-            printLineBreak()
-        }
-    }
-
-    @Override
-    void visitClass(ClassNode node) {
-
-        classNameStack.push(node.name)
-
-        node?.annotations?.each {
-            visitAnnotationNode(it)
-            printLineBreak()
-        }
-
-        visitModifiers(node.modifiers)
-        if (node.isInterface()) print node.name
-        else print "class $node.name"
-        visitGenerics node?.genericsTypes
-        print ' extends '
-        visitType node.unresolvedSuperClass
-        boolean first = true
-        node.unresolvedInterfaces?.each {
-            if (!first) {
-                print ', '
-            } else {
-                print ' implements '
-            }
-            first = false
-            visitType it
-        }
-        print ' { '
-        printDoubleBreak()
-
-        indented {
-            node?.properties?.each { visitProperty(it) }
-            printLineBreak()
-            node?.fields?.each { visitField(it) }
-            printDoubleBreak()
-            node?.declaredConstructors?.each { visitConstructor(it) }
-            printLineBreak()
-            visitObjectInitializerBlocks(node)
-            printLineBreak()
-            node?.methods?.each { visitMethod(it) }
-        }
-        print '}'
-        printLineBreak()
-        classNameStack.pop()
-    }
-
-    private void visitObjectInitializerBlocks(ClassNode node) {
-        for (Statement stmt : node.getObjectInitializerStatements()) {
-            print '{'
-            printLineBreak()
-            indented {
-                stmt.visit(this)
-            }
-            printLineBreak()
-            print '}'
-            printDoubleBreak()
-        }
-    }
-
-    private void visitGenerics(GenericsType[] generics) {
-
-        if (generics) {
-            print '<'
-            boolean first = true
-            generics.each { GenericsType it ->
-                if (!first) {
-                    print ', '
-                }
-                first = false
-                print it.name
-                if (it.upperBounds) {
-                    print ' extends '
-                    boolean innerFirst = true
-                    it.upperBounds.each { ClassNode upperBound ->
-                        if (!innerFirst) {
-                            print ' & '
-                        }
-                        innerFirst = false
-                        visitType upperBound
-                    }
-                }
-                if (it.lowerBound) {
-                    print ' super '
-                    visitType it.lowerBound
-                }
-            }
-            print '>'
-        }
-    }
-
-    @Override
-    void visitConstructor(ConstructorNode node) {
-        visitMethod(node)
-    }
-
-    private String visitParameters(parameters) {
-        boolean first = true
-
-        parameters.each { Parameter it ->
-            if (!first) {
-                print ', '
-            }
-            first = false
-
-            it.annotations?.each {
-                visitAnnotationNode(it)
-                print(' ')
-            }
-
-            visitModifiers(it.modifiers)
-            visitType it.type
-            print ' ' + it.name
-            if (it.initialExpression && !(it.initialExpression instanceof EmptyExpression)) {
-                print ' = '
-                it.initialExpression.visit this
-            }
-        }
-    }
-
-    @Override
-    void visitMethod(MethodNode node) {
-        node?.annotations?.each {
-            visitAnnotationNode(it)
-            printLineBreak()
-        }
-
-        visitModifiers(node.modifiers)
-        if (node.name == '<init>') {
-            print "${classNameStack.peek()}("
-            visitParameters(node.parameters)
-            print ') {'
-            printLineBreak()
-        } else if (node.name == '<clinit>') {
-            print '{ ' // will already have 'static' from modifiers
-            printLineBreak()
-        } else {
-            visitType node.returnType
-            print " $node.name("
-            visitParameters(node.parameters)
-            print ')'
-            if (node.exceptions) {
-                boolean first = true
-                print ' throws '
-                node.exceptions.each {
-                    if (!first) {
-                        print ', '
-                    }
-                    first = false
-                    visitType it
-                }
-            }
-            print ' {'
-            printLineBreak()
-        }
-
-        indented {
-            node?.code?.visit(this)
-        }
-        printLineBreak()
-        print '}'
-        printDoubleBreak()
-    }
-
-    private void visitModifiers(int modifiers) {
-        String mods = Modifier.toString(modifiers)
-        mods = mods ? mods + ' ' : mods
-        print mods
-    }
-
-    @Override
-    void visitField(FieldNode node) {
-        node?.annotations?.each {
-            visitAnnotationNode(it)
-            printLineBreak()
-        }
-        visitModifiers(node.modifiers)
-        visitType node.type
-        print " $node.name "
-        // do not print initial expression, as this is executed as part of the constructor, unless on static constant
-        Expression exp = node.initialValueExpression
-        if (exp instanceof ConstantExpression) exp = Verifier.transformToPrimitiveConstantIfPossible(exp)
-        ClassNode type = exp?.type
-        if (Modifier.isStatic(node.modifiers) && Modifier.isFinal(node.getModifiers())
-                && exp instanceof ConstantExpression
-                && type == node.type
-                && ClassHelper.isStaticConstantInitializerType(type)) {
-            // GROOVY-5150: final constants may be initialized directly
-            print ' = '
-            if (ClassHelper.STRING_TYPE == type) {
-                print "'" + node.initialValueExpression.text.replaceAll("'", "\\\\'") + "'"
-            } else if (ClassHelper.char_TYPE == type) {
-                print "'${node.initialValueExpression.text}'"
-            } else {
-                print node.initialValueExpression.text
-            }
-        }
-        printLineBreak()
-    }
-
-    void visitAnnotationNode(AnnotationNode node) {
-        print '@' + node?.classNode?.name
-        if (node?.members) {
-            print '('
-            boolean first = true
-            node.members.each { String name, Expression value ->
-                if (first) {
-                    first = false
-                } else {
-                    print ', '
-                }
-                print name + ' = '
-                value.visit(this)
-            }
-            print ')'
-        }
-
-    }
-
-    @Override
-    void visitProperty(PropertyNode node) {
-        // is a FieldNode, avoid double dispatch
-    }
-
-    @Override
-    void visitBlockStatement(BlockStatement block) {
-        if (printStatementLabels(block)) {
-            print '{'
-            printLineBreak()
-            indented {
-                block?.statements?.each {
-                    it.visit(this)
-                    printLineBreak()
-                }
-            }
-            print '}'
-            printLineBreak()
-        } else {
-            block?.statements?.each {
-                it.visit(this)
-                printLineBreak()
-            }
-        }
-        if (!_out.toString().endsWith('\n')) {
-            printLineBreak()
-        }
-    }
-
-    @Override
-    void visitForLoop(ForStatement statement) {
-        printStatementLabels(statement)
-        print 'for ('
-        if (statement?.variable != ForStatement.FOR_LOOP_DUMMY) {
-            visitParameters([statement.variable])
-            print ' : '
-        }
-
-        if (statement?.collectionExpression instanceof ListExpression) {
-            statement?.collectionExpression?.visit this
-        } else {
-            statement?.collectionExpression?.visit this
-        }
-        print ') {'
-        printLineBreak()
-        indented {
-            statement?.loopBlock?.visit this
-        }
-        print '}'
-        printLineBreak()
-    }
-
-    @Override
-    void visitIfElse(IfStatement ifElse) {
-        printStatementLabels(ifElse)
-        print 'if ('
-        ifElse?.booleanExpression?.visit this
-        print ') {'
-        printLineBreak()
-        indented {
-            ifElse?.ifBlock?.visit this
-        }
-        printLineBreak()
-        if (ifElse?.elseBlock && !(ifElse.elseBlock instanceof EmptyStatement)) {
-            print '} else {'
-            printLineBreak()
-            indented {
-                ifElse?.elseBlock?.visit this
-            }
-            printLineBreak()
-        }
-        print '}'
-        printLineBreak()
-    }
-
-    @Override
-    void visitExpressionStatement(ExpressionStatement statement) {
-        statement.expression.visit this
-    }
-
-    @Override
-    void visitReturnStatement(ReturnStatement statement) {
-        printLineBreak()
-        print 'return '
-        statement.getExpression().visit(this)
-        printLineBreak()
-    }
-
-    @Override
-    void visitSwitch(SwitchStatement statement) {
-        printStatementLabels(statement)
-        print 'switch ('
-        statement?.expression?.visit this
-        print ') {'
-        printLineBreak()
-        indented {
-            statement?.caseStatements?.each {
-                visitCaseStatement it
-            }
-            if (statement?.defaultStatement) {
-                print 'default: '
-                printLineBreak()
-                statement?.defaultStatement?.visit this
-            }
-        }
-        print '}'
-        printLineBreak()
-    }
-
-    @Override
-    void visitCaseStatement(CaseStatement statement) {
-        print 'case '
-        statement?.expression?.visit this
-        print ':'
-        printLineBreak()
-        indented {
-            statement?.code?.visit this
-        }
-    }
-
-    @Override
-    void visitBreakStatement(BreakStatement statement) {
-        print 'break'
-        if (statement?.label) {
-            print ' ' + statement.label
-        }
-        printLineBreak()
-    }
-
-    @Override
-    void visitContinueStatement(ContinueStatement statement) {
-        print 'continue'
-        if (statement?.label) {
-            print ' ' + statement.label
-        }
-        printLineBreak()
-    }
-
-    @Override
-    void visitMethodCallExpression(MethodCallExpression expression) {
-
-        Expression objectExp = expression.getObjectExpression()
-        if (objectExp instanceof VariableExpression) {
-            visitVariableExpression(objectExp, false)
-        } else {
-            objectExp.visit(this)
-        }
-        if (expression.spreadSafe) {
-            print '*'
-        }
-        if (expression.safe) {
-            print '?'
-        }
-        print '.'
-        Expression method = expression.getMethod()
-        if (method instanceof ConstantExpression) {
-            visitConstantExpression(method, true)
-        } else {
-            method.visit(this)
-        }
-        expression.getArguments().visit(this)
-    }
-
-    @Override
-    void visitStaticMethodCallExpression(StaticMethodCallExpression expression) {
-        print expression?.ownerType?.name + '.' + expression?.method
-        if (expression?.arguments instanceof VariableExpression || expression?.arguments instanceof MethodCallExpression) {
-            print '('
-            expression?.arguments?.visit this
-            print ')'
-        } else {
-            expression?.arguments?.visit this
-        }
-    }
-
-    @Override
-    void visitConstructorCallExpression(ConstructorCallExpression expression) {
-        if (expression?.isSuperCall()) {
-            print 'super'
-        } else if (expression?.isThisCall()) {
-            print 'this '
-        } else {
-            print 'new '
-            visitType expression?.type
-        }
-        expression?.arguments?.visit this
-    }
-
-    @Override
-    void visitBinaryExpression(BinaryExpression expression) {
-        expression?.leftExpression?.visit this
-        if (!(expression.rightExpression instanceof EmptyExpression) || expression.operation.type != Types.ASSIGN) {
-            print " $expression.operation.text "
-            expression.rightExpression.visit this
-
-            if (expression?.operation?.text == '[') {
-                print ']'
-            }
-        }
-    }
-
-    @Override
-    void visitPostfixExpression(PostfixExpression expression) {
-        print '('
-        expression?.expression?.visit this
-        print ')'
-        print expression?.operation?.text
-    }
-
-    @Override
-    void visitPrefixExpression(PrefixExpression expression) {
-        print expression?.operation?.text
-        print '('
-        expression?.expression?.visit this
-        print ')'
-    }
-
-
-    @Override
-    void visitClosureExpression(ClosureExpression expression) {
-        print '{ '
-        if (expression?.parameters) {
-            visitParameters(expression?.parameters)
-            print ' ->'
-        }
-        printLineBreak()
-        indented {
-            expression?.code?.visit this
-        }
-        print '}'
-    }
-
-    @Override
-    void visitLambdaExpression(LambdaExpression expression) {
-        print '( '
-        if (expression?.parameters) {
-            visitParameters(expression?.parameters)
-        }
-        print ') -> {'
-        printLineBreak()
-        indented {
-            expression?.code?.visit this
-        }
-        print '}'
-    }
-
-    @Override
-    void visitTupleExpression(TupleExpression expression) {
-        print '('
-        visitExpressionsAndCommaSeparate(expression?.expressions)
-        print ')'
-    }
-
-    @Override
-    void visitRangeExpression(RangeExpression expression) {
-        print '('
-        expression?.from?.visit this
-        print '..'
-        expression?.to?.visit this
-        print ')'
-    }
-
-    @Override
-    void visitPropertyExpression(PropertyExpression expression) {
-        expression?.objectExpression?.visit this
-        if (expression?.spreadSafe) {
-            print '*'
-        } else if (expression?.isSafe()) {
-            print '?'
-        }
-        print '.'
-        if (expression?.property instanceof ConstantExpression) {
-            visitConstantExpression((ConstantExpression) expression?.property, true)
-        } else {
-            expression?.property?.visit this
-        }
-    }
-
-    @Override
-    void visitAttributeExpression(AttributeExpression attributeExpression) {
-        visitPropertyExpression attributeExpression
-    }
-
-    @Override
-    void visitFieldExpression(FieldExpression expression) {
-        print expression?.field?.name
-    }
-
-    void visitConstantExpression(ConstantExpression expression, boolean unwrapQuotes = false) {
-        if (expression.value instanceof String && !unwrapQuotes) {
-            // string reverse escaping is very naive
-            def escaped = ((String) expression.value).replaceAll('\n', '\\\\n').replaceAll("'", "\\\\'")
-            print "'$escaped'"
-        } else {
-            print expression.value
-        }
-    }
-
-    @Override
-    void visitClassExpression(ClassExpression expression) {
-        print expression.text
-    }
-
-    void visitVariableExpression(VariableExpression expression, boolean spacePad = true) {
-
-        if (spacePad) {
-            print ' ' + expression.name + ' '
-        } else {
-            print expression.name
-        }
-    }
-
-    @Override
-    void visitDeclarationExpression(DeclarationExpression expression) {
-        // handle multiple assignment expressions
-        if (expression?.leftExpression instanceof ArgumentListExpression) {
-            print 'def '
-            visitArgumentlistExpression((ArgumentListExpression) expression?.leftExpression, true)
-            print " $expression.operation.text "
-            expression.rightExpression.visit this
-
-            if (expression?.operation?.text == '[') {
-                print ']'
-            }
-        } else {
-            visitType expression?.leftExpression?.type
-            visitBinaryExpression expression // is a BinaryExpression
-        }
-    }
-
-    @Override
-    void visitGStringExpression(GStringExpression expression) {
-        print '"' + expression.text + '"'
-    }
-
-    @Override
-    void visitSpreadExpression(SpreadExpression expression) {
-        print '*'
-        expression?.expression?.visit this
-    }
-
-    @Override
-    void visitNotExpression(NotExpression expression) {
-        print '!('
-        expression?.expression?.visit this
-        print ')'
-    }
-
-    @Override
-    void visitUnaryMinusExpression(UnaryMinusExpression expression) {
-        print '-('
-        expression?.expression?.visit this
-        print ')'
-    }
-
-    @Override
-    void visitUnaryPlusExpression(UnaryPlusExpression expression) {
-        print '+('
-        expression?.expression?.visit this
-        print ')'
-    }
-
-    @Override
-    void visitCastExpression(CastExpression expression) {
-        print '(('
-        expression?.expression?.visit this
-        print ') as '
-        visitType(expression?.type)
-        print ')'
-
-    }
-
-    /**
-     * Prints out the type, safely handling arrays.
-     * @param classNode
-     */
-    void visitType(ClassNode classNode) {
-        def name = classNode.name
-        if (name =~ /^\[+L/ && name.endsWith(';')) {
-            int numDimensions = name.indexOf('L')
-            print "${classNode.name[(numDimensions + 1)..-2]}" + ('[]' * numDimensions)
-        } else {
-            print name
-        }
-        visitGenerics classNode?.genericsTypes
-    }
-
-    void visitArgumentlistExpression(ArgumentListExpression expression, boolean showTypes = false) {
-        print '('
-        int count = expression?.expressions?.size()
-        expression.expressions.each {
-            if (showTypes) {
-                visitType it.type
-                print ' '
-            }
-            if (it instanceof VariableExpression) {
-                visitVariableExpression it, false
-            } else if (it instanceof ConstantExpression) {
-                visitConstantExpression it, false
-            } else {
-                it.visit this
-            }
-            count--
-            if (count) print ', '
-        }
-        print ')'
-    }
-
-    @Override
-    void visitBytecodeExpression(BytecodeExpression expression) {
-        print '/*BytecodeExpression*/'
-        printLineBreak()
-    }
-
-
-    @Override
-    void visitMapExpression(MapExpression expression) {
-        print '['
-        if (expression?.mapEntryExpressions?.size() == 0) {
-            print ':'
-        } else {
-            visitExpressionsAndCommaSeparate((List) expression?.mapEntryExpressions)
-        }
-        print ']'
-    }
-
-    @Override
-    void visitMapEntryExpression(MapEntryExpression expression) {
-        if (expression?.keyExpression instanceof SpreadMapExpression) {
-            print '*'            // is this correct? 
-        } else {
-            expression?.keyExpression?.visit this
-        }
-        print ': '
-        expression?.valueExpression?.visit this
-    }
-
-    @Override
-    void visitListExpression(ListExpression expression) {
-        print '['
-        visitExpressionsAndCommaSeparate(expression?.expressions)
-        print ']'
-    }
-
-    @Override
-    void visitTryCatchFinally(TryCatchStatement statement) {
-        printStatementLabels(statement)
-        print 'try {'
-        printLineBreak()
-        indented {
-            statement?.tryStatement?.visit this
-        }
-        printLineBreak()
-        print '} '
-        printLineBreak()
-        statement?.catchStatements?.each { CatchStatement catchStatement ->
-            visitCatchStatement(catchStatement)
-        }
-        print 'finally { '
-        printLineBreak()
-        indented {
-            statement?.finallyStatement?.visit this
-        }
-        print '} '
-        printLineBreak()
-    }
-
-    @Override
-    void visitThrowStatement(ThrowStatement statement) {
-        print 'throw '
-        statement?.expression?.visit this
-        printLineBreak()
-    }
-
-    @Override
-    void visitSynchronizedStatement(SynchronizedStatement statement) {
-        printStatementLabels(statement)
-        print 'synchronized ('
-        statement?.expression?.visit this
-        print ') {'
-        printLineBreak()
-        indented {
-            statement?.code?.visit this
-        }
-        print '}'
-    }
-
-    @Override
-    void visitTernaryExpression(TernaryExpression expression) {
-        expression?.booleanExpression?.visit this
-        print ' ? '
-        expression?.trueExpression?.visit this
-        print ' : '
-        expression?.falseExpression?.visit this
-    }
-
-    @Override
-    void visitShortTernaryExpression(ElvisOperatorExpression expression) {
-        visitTernaryExpression(expression)
-    }
-
-    @Override
-    void visitBooleanExpression(BooleanExpression expression) {
-        expression?.expression?.visit this
-    }
-
-    @Override
-    void visitWhileLoop(WhileStatement statement) {
-        printStatementLabels(statement)
-        print 'while ('
-        statement?.booleanExpression?.visit this
-        print ') {'
-        printLineBreak()
-        indented {
-            statement?.loopBlock?.visit this
-        }
-        printLineBreak()
-        print '}'
-        printLineBreak()
-    }
-
-    @Override
-    void visitDoWhileLoop(DoWhileStatement statement) {
-        printStatementLabels(statement)
-        print 'do {'
-        printLineBreak()
-        indented {
-            statement?.loopBlock?.visit this
-        }
-        print '} while ('
-        statement?.booleanExpression?.visit this
-        print ')'
-        printLineBreak()
-    }
-
-    @Override
-    void visitCatchStatement(CatchStatement statement) {
-        print 'catch ('
-        visitParameters([statement.variable])
-        print ') {'
-        printLineBreak()
-        indented {
-            statement.code?.visit this
-        }
-        print '} '
-        printLineBreak()
-    }
-
-    @Override
-    void visitBitwiseNegationExpression(BitwiseNegationExpression expression) {
-        print '~('
-        expression?.expression?.visit this
-        print ') '
-    }
-
-    @Override
-    void visitAssertStatement(AssertStatement statement) {
-        print 'assert '
-        statement?.booleanExpression?.visit this
-        print ' : '
-        statement?.messageExpression?.visit this
-    }
-
-    @Override
-    void visitClosureListExpression(ClosureListExpression expression) {
-        boolean first = true
-        expression?.expressions?.each {
-            if (!first) {
-                print ';'
-            }
-            first = false
-            it.visit this
-        }
-    }
-
-    @Override
-    void visitMethodPointerExpression(MethodPointerExpression expression) {
-        expression?.expression?.visit this
-        print '.&'
-        expression?.methodName?.visit this
-    }
-
-    @Override
-    void visitMethodReferenceExpression(MethodReferenceExpression expression) {
-        expression?.expression?.visit this
-        print '::'
-        expression?.methodName?.visit this
-    }
-
-    @Override
-    void visitArrayExpression(ArrayExpression expression) {
-        print 'new '
-        visitType expression?.elementType
-        print '['
-        visitExpressionsAndCommaSeparate(expression?.sizeExpression)
-        print ']'
-    }
-
-    private void visitExpressionsAndCommaSeparate(List<? super Expression> expressions) {
-        boolean first = true
-        expressions?.each {
-            if (!first) {
-                print ', '
-            }
-            first = false
-            ((ASTNode) it).visit this
-        }
-    }
-
-    @Override
-    void visitSpreadMapExpression(SpreadMapExpression expression) {
-        print '*:'
-        expression?.expression?.visit this
-    }
-
-    /**
-     * Prints all labels for the given statement.  The labels will be printed on a single
-     * line and line break will be added.
-     *
-     * @param statement for which to print labels
-     * @return {@code true} if the statement had labels to print, else {@code false}
-     */
-    private boolean printStatementLabels(Statement statement) {
-        List<String> labels = statement?.statementLabels
-        if (labels == null || labels.isEmpty()) {
-            return false
-        }
-        for (String label : labels) {
-            print label + ':'
-            printLineBreak()
-        }
-        return true
-    }
-
-}
diff --git a/subprojects/groovy-console/src/main/groovy/groovy/inspect/swingui/ButtonOrDefaultRenderer.groovy b/subprojects/groovy-console/src/main/groovy/groovy/inspect/swingui/ButtonOrDefaultRenderer.groovy
deleted file mode 100644
index 2e7a880..0000000
--- a/subprojects/groovy-console/src/main/groovy/groovy/inspect/swingui/ButtonOrDefaultRenderer.groovy
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package groovy.inspect.swingui
-
-import groovy.transform.CompileStatic
-
-import javax.swing.*
-import javax.swing.table.DefaultTableCellRenderer
-import java.awt.*
-
-/**
- * A table cell renderer that will return a component instead of drawing it,
- * or call the default in the case of a non component object.
- * This hack allows to render a button shape in a table cell.
- */
-@CompileStatic
-@Deprecated
-class ButtonOrDefaultRenderer extends DefaultTableCellRenderer {
-    Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
-        if (value instanceof JComponent) {
-            value.setSize(Math.round(value.getSize().getWidth())?.toInteger(), table.getRowHeight(row))
-            return value
-        }
-        return super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column)
-    }
-}
diff --git a/subprojects/groovy-console/src/main/groovy/groovy/inspect/swingui/ButtonOrTextEditor.groovy b/subprojects/groovy-console/src/main/groovy/groovy/inspect/swingui/ButtonOrTextEditor.groovy
deleted file mode 100644
index 9bc9b3b..0000000
--- a/subprojects/groovy-console/src/main/groovy/groovy/inspect/swingui/ButtonOrTextEditor.groovy
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package groovy.inspect.swingui
-
-import groovy.transform.CompileStatic
-
-import javax.swing.*
-import javax.swing.table.TableCellEditor
-import java.awt.*
-import java.awt.event.ActionListener
-import java.awt.event.FocusListener
-
-/**
- * A table cell editor that will return a button automatically if it is the cell value,
- * a text field if the value exists, or null otherwise (non editable cell).
- * This hack allows to interact with buttons in a cell.
- */
-@CompileStatic
-@Deprecated
-class ButtonOrTextEditor extends AbstractCellEditor implements TableCellEditor {
-    /** The Swing component being edited. */
-    protected JComponent editorComponent
-
-    @Override
-    Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
-        if (value instanceof JButton) {
-            editorComponent = value
-            ((JButton) editorComponent).addActionListener({ fireEditingStopped() } as ActionListener)
-        } else if (value instanceof JTextArea) {
-            editorComponent = value
-        } else if (value) {
-            editorComponent = new JTextArea(value.toString())
-            editorComponent.addFocusListener({ fireEditingCanceled() } as FocusListener)
-        } else {
-            editorComponent = null
-        }
-        editorComponent
-    }
-
-    @Override
-    Object getCellEditorValue() {
-        editorComponent
-    }
-}
-
diff --git a/subprojects/groovy-console/src/main/groovy/groovy/inspect/swingui/ObjectBrowser.groovy b/subprojects/groovy-console/src/main/groovy/groovy/inspect/swingui/ObjectBrowser.groovy
deleted file mode 100644
index 92f44aa..0000000
--- a/subprojects/groovy-console/src/main/groovy/groovy/inspect/swingui/ObjectBrowser.groovy
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package groovy.inspect.swingui
-
-import groovy.inspect.Inspector
-import groovy.swing.SwingBuilder
-
-import javax.swing.*
-import java.awt.*
-
-import static groovy.inspect.Inspector.MEMBER_DECLARER_IDX
-import static groovy.inspect.Inspector.MEMBER_EXCEPTIONS_IDX
-import static groovy.inspect.Inspector.MEMBER_MODIFIER_IDX
-import static groovy.inspect.Inspector.MEMBER_NAME_IDX
-import static groovy.inspect.Inspector.MEMBER_ORIGIN_IDX
-import static groovy.inspect.Inspector.MEMBER_PARAMS_IDX
-import static groovy.inspect.Inspector.MEMBER_TYPE_IDX
-import static groovy.inspect.Inspector.MEMBER_VALUE_IDX
-
-/**
- * A little GUI to show some of the Inspector capabilities.
- * Starting this script opens the ObjectBrowser on "some String".
- * Use it in groovysh or groovyConsole to inspect your object of interest with:
- * <code>
- * ObjectBrowser.inspect(myObject)
- * </code>.
- */
-@Deprecated
-class ObjectBrowser {
-
-    def inspector
-    def swing, frame, fieldTable, methodTable, itemTable, mapTable
-
-    static void main(args) {
-        inspect('some String')
-    }
-
-    static void inspect(objectUnderInspection) {
-        def browser = new ObjectBrowser()
-        browser.inspector = new Inspector(objectUnderInspection)
-        browser.run()
-    }
-
-    void run() {
-        swing = new SwingBuilder()
-
-        frame = swing.frame(title: 'Groovy Object Browser', location: [200, 200],
-                size: [800, 600], pack: true, show: true,
-                iconImage: swing.imageIcon(groovy.ui.Console.ICON_PATH).image,
-                defaultCloseOperation: WindowConstants.DISPOSE_ON_CLOSE) {
-
-            menuBar {
-                menu(text: 'Help') {
-                    menuItem { action(name: 'About', closure: this.&showAbout) }
-                }
-            }
-            panel {
-                borderLayout()
-                panel(name: 'Class Info',
-                        border: emptyBorder([5, 10, 5, 10]),
-                        constraints: NORTH) {
-                    flowLayout(alignment: FlowLayout.LEFT)
-                    def props = inspector.classProps
-                    def classLabel = '<html>' + props.join('<br>')
-                    label(classLabel)
-                }
-                tabbedPane(constraints: CENTER) {
-                    if (inspector.object instanceof Collection) {
-                        scrollPane(name: ' Collection data ') {
-                            itemTable = table {
-                                int i = 0
-                                def data = inspector.object.collect { val -> [i++, val] }
-                                tableModel(list: data) {
-                                    closureColumn(header: 'Index', read: { it[0] })
-                                    closureColumn(header: 'Value', read: { it[1] })
-                                }
-                            }
-                        }
-                    }
-                    if (inspector.object instanceof Map) {
-                        scrollPane(name: ' Map data ') {
-                            itemTable = table {
-                                int i = 0
-                                def data = inspector.object.collect { key, val -> [i++, key, val] }
-                                tableModel(list: data) {
-                                    closureColumn(header: 'Index', read: { it[0] })
-                                    closureColumn(header: 'Key', read: { it[1] })
-                                    closureColumn(header: 'Value', read: { it[2] })
-                                }
-                            }
-                        }
-                    }
-                    scrollPane(name: ' Public Fields and Properties ') {
-                        fieldTable = table {
-                            def data = Inspector.sort(inspector.publicFields.toList())
-                            data.addAll(Inspector.sort(inspector.propertyInfo.toList()))
-                            tableModel(list: data) {
-                                closureColumn(header: 'Name', read: { it[MEMBER_NAME_IDX] })
-                                closureColumn(header: 'Value', read: { it[MEMBER_VALUE_IDX] })
-                                closureColumn(header: 'Type', read: { it[MEMBER_TYPE_IDX] })
-                                closureColumn(header: 'Origin', read: { it[MEMBER_ORIGIN_IDX] })
-                                closureColumn(header: 'Modifier', read: { it[MEMBER_MODIFIER_IDX] })
-                                closureColumn(header: 'Declarer', read: { it[MEMBER_DECLARER_IDX] })
-                            }
-                        }
-                    }
-                    scrollPane(name: ' (Meta) Methods ') {
-                        methodTable = table {
-                            def data = Inspector.sort(inspector.methods.toList())
-                            data.addAll(Inspector.sort(inspector.metaMethods.toList()))
-
-                            tableModel(list: data) {
-                                closureColumn(header: 'Name', read: { it[MEMBER_NAME_IDX] })
-                                closureColumn(header: 'Params', read: { it[MEMBER_PARAMS_IDX] })
-                                closureColumn(header: 'Type', read: { it[MEMBER_TYPE_IDX] })
-                                closureColumn(header: 'Origin', read: { it[MEMBER_ORIGIN_IDX] })
-                                closureColumn(header: 'Modifier', read: { it[MEMBER_MODIFIER_IDX] })
-                                closureColumn(header: 'Declarer', read: { it[MEMBER_DECLARER_IDX] })
-                                closureColumn(header: 'Exceptions', read: { it[MEMBER_EXCEPTIONS_IDX] })
-                            }
-                        }
-                    }
-                }
-            }
-        }
-
-        // Add a bit of formatting
-        addSorter(itemTable)
-        addSorter(mapTable)
-        addSorter(fieldTable)
-        addSorter(methodTable)
-
-        frame.toFront()
-    }
-
-    void addSorter(table) {
-        if (table != null) {
-            def sorter = new TableSorter(table.model)
-            table.model = sorter
-            sorter.addMouseListenerToHeaderInTable(table)
-        }
-    }
-
-    void showAbout(EventObject evt) {
-        def pane = swing.optionPane()
-        // work around GROOVY-1048
-        def version = GroovySystem.version
-        pane.setMessage('An interactive GUI to explore object capabilities.\nVersion ' + version)
-        def dialog = pane.createDialog(frame, 'About Groovy Object Browser')
-        dialog.show()
-    }
-}
diff --git a/subprojects/groovy-console/src/main/groovy/groovy/inspect/swingui/ScriptToTreeNodeAdapter.groovy b/subprojects/groovy-console/src/main/groovy/groovy/inspect/swingui/ScriptToTreeNodeAdapter.groovy
deleted file mode 100644
index 7290d98..0000000
--- a/subprojects/groovy-console/src/main/groovy/groovy/inspect/swingui/ScriptToTreeNodeAdapter.groovy
+++ /dev/null
@@ -1,823 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package groovy.inspect.swingui
-
-import groovy.text.GStringTemplateEngine
-import groovy.text.Template
-import groovy.transform.CompileStatic
-import groovy.transform.PackageScope
-import org.apache.groovy.io.StringBuilderWriter
-import org.codehaus.groovy.GroovyBugError
-import org.codehaus.groovy.ast.AnnotationNode
-import org.codehaus.groovy.ast.ClassHelper
-import org.codehaus.groovy.ast.ClassNode
-import org.codehaus.groovy.ast.CodeVisitorSupport
-import org.codehaus.groovy.ast.ConstructorNode
-import org.codehaus.groovy.ast.DynamicVariable
-import org.codehaus.groovy.ast.FieldNode
-import org.codehaus.groovy.ast.InnerClassNode
-import org.codehaus.groovy.ast.MethodNode
-import org.codehaus.groovy.ast.ModuleNode
-import org.codehaus.groovy.ast.Parameter
-import org.codehaus.groovy.ast.PropertyNode
-import org.codehaus.groovy.ast.expr.ArgumentListExpression
-import org.codehaus.groovy.ast.expr.ArrayExpression
-import org.codehaus.groovy.ast.expr.AttributeExpression
-import org.codehaus.groovy.ast.expr.BinaryExpression
-import org.codehaus.groovy.ast.expr.BitwiseNegationExpression
-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.ClosureListExpression
-import org.codehaus.groovy.ast.expr.ConstantExpression
-import org.codehaus.groovy.ast.expr.ConstructorCallExpression
-import org.codehaus.groovy.ast.expr.DeclarationExpression
-import org.codehaus.groovy.ast.expr.ElvisOperatorExpression
-import org.codehaus.groovy.ast.expr.Expression
-import org.codehaus.groovy.ast.expr.FieldExpression
-import org.codehaus.groovy.ast.expr.GStringExpression
-import org.codehaus.groovy.ast.expr.LambdaExpression
-import org.codehaus.groovy.ast.expr.ListExpression
-import org.codehaus.groovy.ast.expr.MapEntryExpression
-import org.codehaus.groovy.ast.expr.MapExpression
-import org.codehaus.groovy.ast.expr.MethodCallExpression
-import org.codehaus.groovy.ast.expr.MethodPointerExpression
-import org.codehaus.groovy.ast.expr.MethodReferenceExpression
-import org.codehaus.groovy.ast.expr.NamedArgumentListExpression
-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.SpreadExpression
-import org.codehaus.groovy.ast.expr.SpreadMapExpression
-import org.codehaus.groovy.ast.expr.StaticMethodCallExpression
-import org.codehaus.groovy.ast.expr.TernaryExpression
-import org.codehaus.groovy.ast.expr.TupleExpression
-import org.codehaus.groovy.ast.expr.UnaryMinusExpression
-import org.codehaus.groovy.ast.expr.UnaryPlusExpression
-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.classgen.BytecodeExpression
-import org.codehaus.groovy.classgen.GeneratorContext
-import org.codehaus.groovy.classgen.asm.BytecodeHelper
-import org.codehaus.groovy.control.CompilationFailedException
-import org.codehaus.groovy.control.CompilationUnit
-import org.codehaus.groovy.control.CompilationUnit.PrimaryClassNodeOperation
-import org.codehaus.groovy.control.CompilerConfiguration
-import org.codehaus.groovy.control.SourceUnit
-
-import java.util.concurrent.atomic.AtomicBoolean
-
-/**
- * This class controls the conversion from a Groovy script as a String into
- * a tree representation of the AST of that script. The script itself
- * will be a tree node, and each class in the script will be a tree node. The
- * conversion creates tree nodes for any concrete class found within an AST
- * visitor. So, if a tree node should be shown once for each ASTNode and the parent
- * types will not appear as nodes. Custom subclasses of expression types will
- * not appear in the tree.
- *
- * The String label of a tree node is defined by classname in AstBrowserProperties.properties.
- */
-@Deprecated
-class ScriptToTreeNodeAdapter {
-
-    static Properties classNameToStringForm
-    boolean showScriptFreeForm, showScriptClass, showClosureClasses
-    final GroovyClassLoader classLoader
-    final AstBrowserNodeMaker nodeMaker
-    private final CompilerConfiguration config
-
-    static {
-        try {
-            URL url =  ClassLoader.getSystemResource('groovy/inspect/swingui/AstBrowserProperties.groovy')
-            if (!url) {
-                url = ScriptToTreeNodeAdapter.class.classLoader.getResource('groovy/inspect/swingui/AstBrowserProperties.groovy')
-            }
-    
-            def config = new ConfigSlurper().parse(url)
-            classNameToStringForm = config.toProperties()
-    
-            String home = System.getProperty('user.home')
-            if (home) {
-                File userFile = new File(home + File.separator + '.groovy/AstBrowserProperties.groovy')
-                if (userFile.exists()) {
-                    def customConfig = new ConfigSlurper().parse(userFile.toURL())
-                    // layer custom string forms onto defaults with putAll, do not replace them
-                    classNameToStringForm.putAll(customConfig.toProperties())
-                }
-            }
-        } catch(ex) {
-            // on restricted environments like, such calls may fail, but that should not prevent the class
-            // from being loaded. Tree nodes can still get rendered with their simple names.
-            classNameToStringForm = new Properties()  
-        }
-    }
-    
-    ScriptToTreeNodeAdapter(classLoader, showScriptFreeForm, showScriptClass, showClosureClasses, nodeMaker, config = null) {
-        this.classLoader = classLoader ?: new GroovyClassLoader(getClass().classLoader)
-        this.showScriptFreeForm = showScriptFreeForm
-        this.showScriptClass = showScriptClass
-        this.showClosureClasses = showClosureClasses
-        this.nodeMaker = nodeMaker
-        this.config = config
-    }
-
-    /**
-    * Performs the conversion from script to TreeNode.
-     *
-     * @param script
-     *      a Groovy script in String form
-     * @param compilePhase
-     *      the int based CompilePhase to compile it to.
-     * @param indy
-     *      if {@code true} InvokeDynamic (Indy) bytecode is generated
-    */
-    def compile(String script, int compilePhase, boolean indy=false) {
-        def scriptName = 'script' + System.currentTimeMillis() + '.groovy'
-        GroovyCodeSource codeSource = new GroovyCodeSource(script, scriptName, '/groovy/script')
-        CompilerConfiguration cc = new CompilerConfiguration(config ?: CompilerConfiguration.DEFAULT)
-        if (config) {
-            cc.addCompilationCustomizers(*config.compilationCustomizers)
-        }
-        if (indy) {
-            cc.optimizationOptions.put(CompilerConfiguration.INVOKEDYNAMIC, true)
-        }
-        CompilationUnit cu = new CompilationUnit(cc, codeSource.codeSource, classLoader)
-        cu.setClassgenCallback(classLoader.createCollector(cu, null))
-
-        TreeNodeBuildingNodeOperation operation = new TreeNodeBuildingNodeOperation(this, showScriptFreeForm, showScriptClass, showClosureClasses)
-        cu.addPhaseOperation(operation, compilePhase)
-        cu.addSource(codeSource.getName(), script)
-        try {
-            cu.compile(compilePhase)
-        } catch (CompilationFailedException cfe) {
-            operation.root.add(nodeMaker.makeNode('Unable to produce AST for this phase due to earlier compilation error:'))
-            cfe.message.eachLine {
-                operation.root.add(nodeMaker.makeNode(it))
-            }
-            operation.root.add(nodeMaker.makeNode('Fix the above error(s) and then press Refresh'))
-        } catch (Throwable t) {
-            operation.root.add(nodeMaker.makeNode('Unable to produce AST for this phase due to an error:'))
-            operation.root.add(nodeMaker.makeNode(t))
-            operation.root.add(nodeMaker.makeNode('Fix the above error(s) and then press Refresh'))
-        }
-        return operation.root
-    }
-
-    def make(node) {
-        nodeMaker.makeNodeWithProperties(getStringForm(node), getPropertyTable(node))
-    }
-
-    def make(MethodNode node) {
-        def table = getPropertyTable(node)
-        extendMethodNodePropertyTable(table, node)
-
-        nodeMaker.makeNodeWithProperties(getStringForm(node), table)
-    }
-
-    /**
-     * Extends the method node property table by adding custom properties.
-     */
-    void extendMethodNodePropertyTable(List<List<String>> table, MethodNode node) {
-        table << ['descriptor', BytecodeHelper.getMethodDescriptor(node), 'String']
-    }
-
-    /**
-     * Creates the property table for the node so that the properties view can display nicely.
-     */
-    private List<List<String>> getPropertyTable(node) {
-        node.metaClass.properties?.
-            findAll { it.getter }?.
-            collect {
-                def name = it.name.toString()
-                def value
-                try {
-                    // multiple assignment statements cannot be cast to VariableExpression so
-                    // instead reference the value through the leftExpression property, which is the same
-                    if (node instanceof DeclarationExpression &&
-                            (name == 'variableExpression' || name == 'tupleExpression')) {
-                        value = toString(node.leftExpression)
-                    } else {
-                        value = toString(it.getProperty(node))
-                    }
-                } catch (GroovyBugError reflectionArtefact) {
-                    // compiler throws error if it thinks a field is being accessed
-                    // before it is set under certain conditions. It wasn't designed
-                    // to be walked reflectively like this.
-                    value = null
-                }
-                def type = it.type.simpleName.toString()
-                [name, value, type]
-            }?.
-            sort { it[0] }
-    }
-
-    // GROOVY-8339: to avoid illegal access to a non-visible implementation class - can be removed if a more general solution is found
-    @CompileStatic
-    String toString(Object o) {
-        o.toString()
-    }
-
-    /**
-     * Handles the property file templating for node types.
-     */
-    private String getStringForm(node) {
-        String templateTextForNode = classNameToStringForm[node.class.name]
-        if (templateTextForNode) {
-            GStringTemplateEngine engine = new GStringTemplateEngine()
-            Template template = engine.createTemplate(templateTextForNode)
-            Writable writable = template.make([expression: node])
-            Writer result = new StringBuilderWriter()
-            writable.writeTo(result)
-            result.toString()
-        } else {
-            node.class.simpleName
-        }
-    }
-}
-
-/**
- * This Node Operation builds up a root tree node for the viewer.
- */
-@Deprecated
-class TreeNodeBuildingNodeOperation extends PrimaryClassNodeOperation {
-
-    final root
-    final sourceCollected = new AtomicBoolean(false)
-    final ScriptToTreeNodeAdapter adapter
-
-    final showScriptFreeForm
-    final showScriptClass
-    final showClosureClasses
-
-    final nodeMaker
-
-    TreeNodeBuildingNodeOperation(ScriptToTreeNodeAdapter adapter, showScriptFreeForm, showScriptClass) {
-        this(adapter, showScriptFreeForm, showScriptClass, false)
-    }
-
-    TreeNodeBuildingNodeOperation(ScriptToTreeNodeAdapter adapter, showScriptFreeForm, showScriptClass, showClosureClasses) {
-        if (!adapter) throw new IllegalArgumentException('Null: adapter')
-        this.adapter = adapter
-        this.showScriptFreeForm = showScriptFreeForm
-        this.showScriptClass = showScriptClass
-        this.showClosureClasses = showClosureClasses
-        nodeMaker = adapter.nodeMaker
-        root = nodeMaker.makeNode('root')
-    }
-
-    @Override
-    void call(SourceUnit source, GeneratorContext context, ClassNode classNode) {
-        // module node
-        if (!sourceCollected.getAndSet(true) && showScriptFreeForm) {
-            // display the source unit AST
-            ModuleNode ast = source.getAST()
-            TreeNodeBuildingVisitor visitor = new TreeNodeBuildingVisitor(adapter)
-            ast.getStatementBlock().visit(visitor)
-            if (visitor.currentNode) root.add(visitor.currentNode)
-            collectModuleNodeMethodData('Methods', ast.getMethods())
-        }
-
-        if(classNode.isScript() && !showScriptClass) return
-
-        def child = adapter.make(classNode)
-        root.add(child)
-
-        collectConstructorData(child, 'Constructors', classNode)
-        collectObjectInitializers(child, 'Object Initializers', classNode)
-        collectMethodData(child, 'Methods', classNode)
-        collectFieldData(child, 'Fields', classNode)
-        collectPropertyData(child, 'Properties', classNode)
-        collectAnnotationData(child, 'Annotations', classNode)
-
-        if (showClosureClasses)  {
-            makeClosureClassTreeNodes(classNode)
-        }
-    }
-
-    protected void makeClosureClassTreeNodes(ClassNode classNode) {
-        def compileUnit = classNode.compileUnit
-        if (!compileUnit.generatedInnerClasses) return
-
-        def innerClassNodes = compileUnit.generatedInnerClasses.values().sort { it.name }
-        innerClassNodes.each { InnerClassNode innerClassNode ->
-            if (!innerClassNode.implementsInterface(ClassHelper.GENERATED_CLOSURE_Type) && !innerClassNode.implementsInterface(ClassHelper.GENERATED_LAMBDA_TYPE)) return
-            if (innerClassNode.outerMostClass != classNode) return
-
-            def child = adapter.make(innerClassNode)
-            root.add(child)
-
-            collectConstructorData(child, 'Constructors', innerClassNode)
-            collectObjectInitializers(child, 'Object Initializers', innerClassNode)
-            collectMethodData(child, 'Methods', innerClassNode)
-            collectFieldData(child, 'Fields', innerClassNode)
-            collectPropertyData(child, 'Properties', innerClassNode)
-            collectAnnotationData(child, 'Annotations', innerClassNode)
-        }
-    }
-
-    private void collectAnnotationData(parent, String name, ClassNode classNode) {
-        def allAnnotations = nodeMaker.makeNode(name)
-        if (classNode.annotations) parent.add(allAnnotations)
-        classNode.annotations?.each {AnnotationNode annotationNode ->
-            def ggrandchild = adapter.make(annotationNode)
-            allAnnotations.add(ggrandchild)
-        }
-    }
-
-    private void collectPropertyData(parent, String name, ClassNode classNode) {
-        def allProperties = nodeMaker.makeNode(name)
-        if (classNode.properties) parent.add(allProperties)
-        classNode.properties?.each {PropertyNode propertyNode ->
-            def ggrandchild = adapter.make(propertyNode)
-            allProperties.add(ggrandchild)
-            TreeNodeBuildingVisitor visitor = new TreeNodeBuildingVisitor(adapter)
-            if (propertyNode.field?.initialValueExpression) {
-                propertyNode.field.initialValueExpression.visit(visitor)
-                ggrandchild.add(visitor.currentNode)
-            }
-        }
-    }
-
-    private void collectFieldData(parent, String name, ClassNode classNode) {
-        def allFields = nodeMaker.makeNode(name)
-        if (classNode.fields) parent.add(allFields)
-        classNode.fields?.each {FieldNode fieldNode ->
-            def ggrandchild = adapter.make(fieldNode)
-            allFields.add(ggrandchild)
-            TreeNodeBuildingVisitor visitor = new TreeNodeBuildingVisitor(adapter)
-            if (fieldNode.initialValueExpression) {
-                fieldNode.initialValueExpression.visit(visitor)
-                if (visitor.currentNode) ggrandchild.add(visitor.currentNode)
-            }
-        }
-    }
-
-    private void collectMethodData(parent, String name, ClassNode classNode) {
-        def allMethods = nodeMaker.makeNode(name)
-        if (classNode.methods) parent.add(allMethods)
-
-        doCollectMethodData(allMethods, classNode.methods)
-    }
-
-    private void collectModuleNodeMethodData(String name, List methods) {
-        if(!methods) return
-        def allMethods = nodeMaker.makeNode(name)
-        root.add(allMethods)
-
-        doCollectMethodData(allMethods, methods)
-    }
-    
-    private void doCollectMethodData(allMethods, List methods) {
-        methods?.each {MethodNode methodNode ->
-            def ggrandchild = adapter.make(methodNode)
-            allMethods.add(ggrandchild)
-    
-            // print out parameters of method
-            methodNode.parameters?.each {Parameter parameter ->
-                def gggrandchild = adapter.make(parameter)
-                ggrandchild.add(gggrandchild)
-                if (parameter.initialExpression) {
-                    TreeNodeBuildingVisitor visitor = new TreeNodeBuildingVisitor(adapter)
-                    parameter.initialExpression.visit(visitor)
-                    if (visitor.currentNode) gggrandchild.add(visitor.currentNode)
-                }
-            }
-    
-            // print out code of method
-            TreeNodeBuildingVisitor visitor = new TreeNodeBuildingVisitor(adapter)
-            if (methodNode.code) {
-                methodNode.code.visit(visitor)
-                if (visitor.currentNode) ggrandchild.add(visitor.currentNode)
-            }
-        }
-    }
-
-    private void collectConstructorData(parent, String name, ClassNode classNode) {
-        def allCtors = nodeMaker.makeNode(name)
-        if (classNode.declaredConstructors) parent.add(allCtors)
-        classNode.declaredConstructors?.each {ConstructorNode ctorNode ->
-
-            def ggrandchild = adapter.make(ctorNode)
-            allCtors.add(ggrandchild)
-            TreeNodeBuildingVisitor visitor = new TreeNodeBuildingVisitor(adapter)
-            if (ctorNode.code) {
-                ctorNode.code.visit(visitor)
-                if (visitor.currentNode) ggrandchild.add(visitor.currentNode)
-            }
-        }
-
-    }
-
-    private void collectObjectInitializers(parent, String name, ClassNode node) {
-        List<Statement> initStatements = node.getObjectInitializerStatements()
-        if (!initStatements) {
-            return
-        }
-        def allInitializers = nodeMaker.makeNode(name)
-        parent.add(allInitializers)
-        for (Statement stmt : initStatements) {
-            TreeNodeBuildingVisitor visitor = new TreeNodeBuildingVisitor(adapter)
-            stmt.visit(visitor)
-            if (visitor.currentNode) {
-                allInitializers.add(visitor.currentNode)
-            }
-        }
-    }
-
-}
-
-/**
-* This AST visitor builds up a TreeNode.
-*/
-@PackageScope
-@Deprecated
-class TreeNodeBuildingVisitor extends CodeVisitorSupport {
-
-    def currentNode
-    private final adapter
-
-    /**
-     * Creates the visitor. A file named AstBrowserProperties.groovy is located which is
-     * a property files the describes how to represent ASTNode types as Strings.
-     */
-    TreeNodeBuildingVisitor(adapter) {
-        if (!adapter) throw new IllegalArgumentException('Null: adapter')
-        this.adapter = adapter
-    }
-
-    /**
-    * This method looks at the AST node and decides how to represent it in a TreeNode, then it
-     * continues walking the tree. If the node and the expectedSubclass are not exactly the same
-     * Class object then the node is not added to the tree. This is to eliminate seeing duplicate
-     * nodes, for instance seeing an ArgumentListExpression and a TupleExpression in the tree, when
-     * an ArgumentList is-a Tuple.
-    */
-    private void addNode(node, Class expectedSubclass, Closure superMethod) {
-
-        if (expectedSubclass.getName() == node.getClass().getName()) {
-            if (currentNode == null) {
-                currentNode = adapter.make(node)
-                superMethod.call(node)
-            } else {
-                // visitor works off void methods... so we have to
-                // perform a swap to get accumulation like behavior.
-                def temp = currentNode
-                currentNode = adapter.make(node)
-
-                temp.add(currentNode)
-                currentNode.parent = temp
-                superMethod.call(node)
-                currentNode = temp
-            }
-        } else {
-            superMethod.call(node)
-        }
-    }
-
-    @Override
-    void visitBlockStatement(BlockStatement node) {
-        addNode(node, BlockStatement, { super.visitBlockStatement(it) })
-    }
-
-    @Override
-    void visitForLoop(ForStatement node) {
-        addNode(node, ForStatement, { super.visitForLoop(it) })
-    }
-
-    @Override
-    void visitWhileLoop(WhileStatement node) {
-        addNode(node, WhileStatement, { super.visitWhileLoop(it) })
-    }
-
-    @Override
-    void visitDoWhileLoop(DoWhileStatement node) {
-        addNode(node, DoWhileStatement, { super.visitDoWhileLoop(it) })
-    }
-
-    @Override
-    void visitIfElse(IfStatement node) {
-        addNode(node, IfStatement, { super.visitIfElse(it) })
-    }
-
-    @Override
-    void visitExpressionStatement(ExpressionStatement node) {
-        addNode(node, ExpressionStatement, { super.visitExpressionStatement(it) })
-    }
-
-    @Override
-    void visitReturnStatement(ReturnStatement node) {
-        addNode(node, ReturnStatement, { super.visitReturnStatement(it) })
-    }
-
-    @Override
-    void visitAssertStatement(AssertStatement node) {
-        addNode(node, AssertStatement, { super.visitAssertStatement(it) })
-    }
-
-    @Override
-    void visitTryCatchFinally(TryCatchStatement node) {
-        addNode(node, TryCatchStatement, { super.visitTryCatchFinally(it) })
-    }
-
-    @Override
-    protected void visitEmptyStatement(EmptyStatement node) {
-        addNode(node, EmptyStatement, { super.visitEmptyStatement(it) })
-    }
-
-    @Override
-    void visitSwitch(SwitchStatement node) {
-        addNode(node, SwitchStatement, { super.visitSwitch(it) })
-    }
-
-    @Override
-    void visitCaseStatement(CaseStatement node) {
-        addNode(node, CaseStatement, { super.visitCaseStatement(it) })
-    }
-
-    @Override
-    void visitBreakStatement(BreakStatement node) {
-        addNode(node, BreakStatement, { super.visitBreakStatement(it) })
-    }
-
-    @Override
-    void visitContinueStatement(ContinueStatement node) {
-        addNode(node, ContinueStatement, { super.visitContinueStatement(it) })
-    }
-
-    @Override
-    void visitSynchronizedStatement(SynchronizedStatement node) {
-        addNode(node, SynchronizedStatement, { super.visitSynchronizedStatement(it) })
-    }
-
-    @Override
-    void visitThrowStatement(ThrowStatement node) {
-        addNode(node, ThrowStatement, { super.visitThrowStatement(it) })
-    }
-
-    @Override
-    void visitMethodCallExpression(MethodCallExpression node) {
-        addNode(node, MethodCallExpression, { super.visitMethodCallExpression(it) })
-    }
-
-    @Override
-    void visitStaticMethodCallExpression(StaticMethodCallExpression node) {
-        addNode(node, StaticMethodCallExpression, { super.visitStaticMethodCallExpression(it) })
-    }
-
-    @Override
-    void visitConstructorCallExpression(ConstructorCallExpression node) {
-        addNode(node, ConstructorCallExpression, { super.visitConstructorCallExpression(it) })
-    }
-
-    @Override
-    void visitBinaryExpression(BinaryExpression node) {
-        addNode(node, BinaryExpression, { super.visitBinaryExpression(it) })
-    }
-
-    @Override
-    void visitTernaryExpression(TernaryExpression node) {
-        addNode(node, TernaryExpression, { super.visitTernaryExpression(it) })
-    }
-
-    @Override
-    void visitShortTernaryExpression(ElvisOperatorExpression node) {
-        addNode(node, ElvisOperatorExpression, { super.visitShortTernaryExpression(it) })
-    }
-
-    @Override
-    void visitPostfixExpression(PostfixExpression node) {
-        addNode(node, PostfixExpression, { super.visitPostfixExpression(it) })
-    }
-
-    @Override
-    void visitPrefixExpression(PrefixExpression node) {
-        addNode(node, PrefixExpression, { super.visitPrefixExpression(it) })
-    }
-
-    @Override
-    void visitBooleanExpression(BooleanExpression node) {
-        addNode(node, BooleanExpression, { super.visitBooleanExpression(it) })
-    }
-
-    @Override
-    void visitNotExpression(NotExpression node) {
-        addNode(node, NotExpression, { super.visitNotExpression(it) })
-    }
-
-    @Override
-    void visitClosureExpression(ClosureExpression node) {
-        addNode(node, ClosureExpression, { 
-            it.parameters?.each { parameter -> visitParameter(parameter) }
-            super.visitClosureExpression(it)
-        })
-    }
-
-    @Override
-    void visitLambdaExpression(LambdaExpression node) {
-        addNode(node, LambdaExpression, {
-            // params will be catered for by super call
-            //it.parameters?.each { parameter -> visitParameter(parameter) }
-            super.visitLambdaExpression(it)
-        })
-    }
-
-    /**
-     * Makes walking parameters look like others in the visitor.
-     */
-    void visitParameter(Parameter node) {
-        addNode(node, Parameter, {
-            if (node.initialExpression) {
-                node.initialExpression?.visit(this)
-            }
-        })
-    }
-
-    @Override
-    void visitTupleExpression(TupleExpression node) {
-        addNode(node, TupleExpression, { super.visitTupleExpression(it) })
-    }
-
-    @Override
-    void visitListExpression(ListExpression node) {
-        addNode(node, ListExpression, { super.visitListExpression(it) })
-    }
-
-    @Override
-    void visitArrayExpression(ArrayExpression node) {
-        addNode(node, ArrayExpression, { super.visitArrayExpression(it) })
-    }
-
-    @Override
-    void visitMapExpression(MapExpression node) {
-        addNode(node, MapExpression, { super.visitMapExpression(it) })
-    }
-
-    @Override
-    void visitMapEntryExpression(MapEntryExpression node) {
-        addNode(node, MapEntryExpression, { super.visitMapEntryExpression(it) })
-    }
-
-    @Override
-    void visitRangeExpression(RangeExpression node) {
-        addNode(node, RangeExpression, { super.visitRangeExpression(it) })
-    }
-
-    @Override
-    void visitSpreadExpression(SpreadExpression node) {
-        addNode(node, SpreadExpression, { super.visitSpreadExpression(it) })
-    }
-
-    @Override
-    void visitSpreadMapExpression(SpreadMapExpression node) {
-        addNode(node, SpreadMapExpression, { super.visitSpreadMapExpression(it) })
-    }
-
-    @Override
-    void visitMethodPointerExpression(MethodPointerExpression node) {
-        addNode(node, MethodPointerExpression, { super.visitMethodPointerExpression(it) })
-    }
-
-    @Override
-    void visitMethodReferenceExpression(MethodReferenceExpression node) {
-        addNode(node, MethodReferenceExpression, { super.visitMethodReferenceExpression(it) })
-    }
-
-    @Override
-    void visitUnaryMinusExpression(UnaryMinusExpression node) {
-        addNode(node, UnaryMinusExpression, { super.visitUnaryMinusExpression(it) })
-    }
-
-    @Override
-    void visitUnaryPlusExpression(UnaryPlusExpression node) {
-        addNode(node, UnaryPlusExpression, { super.visitUnaryPlusExpression(it) })
-    }
-
-    @Override
-    void visitBitwiseNegationExpression(BitwiseNegationExpression node) {
-        addNode(node, BitwiseNegationExpression, { super.visitBitwiseNegationExpression(it) })
-    }
-
-    @Override
-    void visitCastExpression(CastExpression node) {
-        addNode(node, CastExpression, { super.visitCastExpression(it) })
-    }
-
-    @Override
-    void visitConstantExpression(ConstantExpression node) {
-        addNode(node, ConstantExpression, { super.visitConstantExpression(it) })
-    }
-
-    @Override
-    void visitClassExpression(ClassExpression node) {
-        addNode(node, ClassExpression, { super.visitClassExpression(it) })
-    }
-
-    @Override
-    void visitVariableExpression(VariableExpression node) {
-        addNode(node, VariableExpression, { VariableExpression it ->
-            if (it.accessedVariable) {
-                if (it.accessedVariable instanceof Parameter) {
-                    visitParameter((Parameter)it.accessedVariable)
-                } else if (it.accessedVariable instanceof DynamicVariable) {
-                    addNode(it.accessedVariable, DynamicVariable,{ it.initialExpression?.visit(this)})
-                }
-            }
-        })
-    }
-
-    @Override
-    void visitDeclarationExpression(DeclarationExpression node) {
-        addNode(node, DeclarationExpression, { super.visitDeclarationExpression(it) })
-    }
-
-    @Override
-    void visitPropertyExpression(PropertyExpression node) {
-        addNode(node, PropertyExpression, { super.visitPropertyExpression(it) })
-    }
-
-    @Override
-    void visitAttributeExpression(AttributeExpression node) {
-        addNode(node, AttributeExpression, { super.visitAttributeExpression(it) })
-    }
-
-    @Override
-    void visitFieldExpression(FieldExpression node) {
-        addNode(node, FieldExpression, { super.visitFieldExpression(it) })
-    }
-
-    @Override
-    void visitGStringExpression(GStringExpression node) {
-        addNode(node, GStringExpression, { super.visitGStringExpression(it) })
-    }
-
-    @Override
-    void visitCatchStatement(CatchStatement node) {
-        addNode(node, CatchStatement, { 
-            if (it.variable) visitParameter(it.variable) 
-            super.visitCatchStatement(it) 
-        })
-    }
-
-    @Override
-    void visitArgumentlistExpression(ArgumentListExpression node) {
-        addNode(node, ArgumentListExpression, { super.visitArgumentlistExpression(it) })
-    }
-
-    @Override
-    void visitClosureListExpression(ClosureListExpression node) {
-        addNode(node, ClosureListExpression, { super.visitClosureListExpression(it) })
-    }
-
-    @Override
-    void visitBytecodeExpression(BytecodeExpression node) {
-        addNode(node, BytecodeExpression, { super.visitBytecodeExpression(it) })
-    }
-
-    @Override
-    void visitListOfExpressions(List<? extends Expression> list) {
-        list.each { Expression node ->
-            if (node instanceof NamedArgumentListExpression ) {
-                addNode(node, NamedArgumentListExpression, { it.visit(this) })
-            } else {
-                node.visit(this)
-            }
-        }
-    }
-}
diff --git a/subprojects/groovy-console/src/main/groovy/groovy/inspect/swingui/package.html b/subprojects/groovy-console/src/main/groovy/groovy/inspect/swingui/package.html
deleted file mode 100644
index 7b601f9..0000000
--- a/subprojects/groovy-console/src/main/groovy/groovy/inspect/swingui/package.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<!--
-
-     Licensed to the Apache Software Foundation (ASF) under one
-     or more contributor license agreements.  See the NOTICE file
-     distributed with this work for additional information
-     regarding copyright ownership.  The ASF licenses this file
-     to you under the Apache License, Version 2.0 (the
-     "License"); you may not use this file except in compliance
-     with the License.  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing,
-     software distributed under the License is distributed on an
-     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-     KIND, either express or implied.  See the License for the
-     specific language governing permissions and limitations
-     under the License.
-
--->
-<html>
-  <head>
-    <title>package groovy.inspect.swingui.*</title>
-  </head>
-  <body>
-    <p>Classes associated with the Swing GUI for inspecting objects.</p>
-  </body>
-</html>
diff --git a/subprojects/groovy-console/src/main/groovy/groovy/ui/Console.groovy b/subprojects/groovy-console/src/main/groovy/groovy/ui/Console.groovy
deleted file mode 100644
index e7db397..0000000
--- a/subprojects/groovy-console/src/main/groovy/groovy/ui/Console.groovy
+++ /dev/null
@@ -1,1718 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package groovy.ui
-
-import groovy.cli.internal.CliBuilderInternal
-import groovy.cli.internal.OptionAccessor
-import groovy.inspect.swingui.AstBrowser
-import groovy.inspect.swingui.ObjectBrowser
-import groovy.swing.SwingBuilder
-import groovy.transform.CompileStatic
-import groovy.transform.ThreadInterrupt
-import groovy.ui.text.FindReplaceUtility
-import groovy.ui.text.GroovyFilter
-import groovy.ui.text.SmartDocumentFilter
-import org.apache.groovy.io.StringBuilderWriter
-import org.apache.groovy.parser.antlr4.GroovyLangLexer
-import org.apache.groovy.util.SystemUtil
-import org.codehaus.groovy.antlr.LexerFrame
-import org.codehaus.groovy.control.CompilerConfiguration
-import org.codehaus.groovy.control.ErrorCollector
-import org.codehaus.groovy.control.MultipleCompilationErrorsException
-import org.codehaus.groovy.control.customizers.ASTTransformationCustomizer
-import org.codehaus.groovy.control.messages.ExceptionMessage
-import org.codehaus.groovy.control.messages.SimpleMessage
-import org.codehaus.groovy.control.messages.SyntaxErrorMessage
-import org.codehaus.groovy.runtime.StackTraceUtils
-import org.codehaus.groovy.runtime.StringGroovyMethods
-import org.codehaus.groovy.syntax.SyntaxException
-import org.codehaus.groovy.tools.shell.util.MessageSource
-import org.codehaus.groovy.transform.ThreadInterruptibleASTTransformation
-
-import javax.swing.Action
-import javax.swing.Icon
-import javax.swing.JApplet
-import javax.swing.JFileChooser
-import javax.swing.JFrame
-import javax.swing.JLabel
-import javax.swing.JOptionPane
-import javax.swing.JScrollPane
-import javax.swing.JSplitPane
-import javax.swing.JTextPane
-import javax.swing.RootPaneContainer
-import javax.swing.SwingUtilities
-import javax.swing.UIManager
-import javax.swing.event.CaretEvent
-import javax.swing.event.CaretListener
-import javax.swing.event.DocumentListener
-import javax.swing.event.HyperlinkEvent
-import javax.swing.event.HyperlinkListener
-import javax.swing.filechooser.FileFilter
-import javax.swing.text.AttributeSet
-import javax.swing.text.Document
-import javax.swing.text.Element
-import javax.swing.text.SimpleAttributeSet
-import javax.swing.text.Style
-import javax.swing.text.StyleConstants
-import javax.swing.text.html.HTML
-
-import java.awt.BorderLayout
-import java.awt.Component
-import java.awt.Dimension
-import java.awt.EventQueue
-import java.awt.Font
-import java.awt.Toolkit
-import java.awt.Window
-import java.awt.event.ActionEvent
-import java.awt.event.ComponentEvent
-import java.awt.event.ComponentListener
-import java.awt.event.FocusEvent
-import java.awt.event.FocusListener
-import java.util.prefs.Preferences
-
-/**
- * Groovy Swing console.
- *
- * Allows user to interactively enter and execute Groovy.
- */
-@Deprecated
-class Console implements CaretListener, HyperlinkListener, ComponentListener, FocusListener {
-
-    static final String DEFAULT_SCRIPT_NAME_START = 'ConsoleScript'
-
-    static private prefs = Preferences.userNodeForPackage(Console)
-
-    // Whether or not std output should be captured to the console
-    static boolean captureStdOut = prefs.getBoolean('captureStdOut', true)
-    static boolean captureStdErr = prefs.getBoolean('captureStdErr', true)
-    static consoleControllers = []
-
-    static boolean smartHighlighter = prefs.getBoolean('smartHighlighter',
-            Boolean.valueOf(SystemUtil.getSystemPropertySafe('groovy.console.enable.smart.highlighter', 'true')))
-
-    boolean fullStackTraces = prefs.getBoolean('fullStackTraces',
-        Boolean.valueOf(System.getProperty('groovy.full.stacktrace', 'false')))
-    Action fullStackTracesAction
-
-    boolean showScriptInOutput = prefs.getBoolean('showScriptInOutput', true)
-    Action showScriptInOutputAction
-
-    boolean visualizeScriptResults = prefs.getBoolean('visualizeScriptResults', false)
-    Action visualizeScriptResultsAction
-
-    boolean showToolbar = prefs.getBoolean('showToolbar', true)
-    Component toolbar
-    Action showToolbarAction
-
-    boolean detachedOutput = prefs.getBoolean('detachedOutput', false)
-    Action detachedOutputAction
-
-    boolean orientationVertical = prefs.getBoolean('orientationVertical', true)
-    Action orientationVerticalAction
-    Action showOutputWindowAction
-    Action hideOutputWindowAction1
-    Action hideOutputWindowAction2
-    Action hideOutputWindowAction3
-    Action hideOutputWindowAction4
-    int origDividerSize
-    Component outputWindow
-    Component copyFromComponent
-    Component blank
-    Component scrollArea
-
-    boolean autoClearOutput = prefs.getBoolean('autoClearOutput', false)
-    Action autoClearOutputAction
-
-    // Safer thread interruption
-    boolean threadInterrupt = prefs.getBoolean('threadInterrupt', false)
-    Action threadInterruptAction
-
-    boolean saveOnRun = prefs.getBoolean('saveOnRun', false)
-    Action saveOnRunAction
-
-    boolean indy = prefs.getBoolean('indy', false)
-    Action indyAction
-
-    //to allow loading classes dynamically when using @Grab (GROOVY-4877, GROOVY-5871)
-    boolean useScriptClassLoaderForScriptExecution = false
-
-    // Maximum size of history
-    int maxHistory = 10
-
-    // Maximum number of characters to show on console at any time
-    int maxOutputChars = System.getProperty('groovy.console.output.limit','20000') as int
-
-    // File to output stdout & stderr, in addition to console
-    PrintWriter outputPrintWriter = null
-
-    // UI
-    SwingBuilder swing
-    RootPaneContainer frame
-    ConsoleTextEditor inputEditor
-    JSplitPane splitPane
-    JTextPane inputArea
-    JTextPane outputArea
-    JLabel statusLabel
-    JLabel rowNumAndColNum
-
-    // row info
-    Element rootElement
-    int cursorPos
-    int rowNum
-    int colNum
-
-    // Styles for output area
-    Style promptStyle
-    Style commandStyle
-    Style outputStyle
-    Style stacktraceStyle
-    Style hyperlinkStyle
-    Style resultStyle
-
-    // Internal history
-    List history = []
-    int historyIndex = 1 // valid values are 0..history.length()
-    HistoryRecord pendingRecord = new HistoryRecord( allText: '', selectionStart: 0, selectionEnd: 0)
-    Action prevHistoryAction
-    Action nextHistoryAction
-
-    // Current editor state
-    boolean dirty
-    Action saveAction
-    int textSelectionStart  // keep track of selections in inputArea
-    int textSelectionEnd
-    def scriptFile
-    File currentFileChooserDir = new File(Preferences.userNodeForPackage(Console).get('currentFileChooserDir', '.'))
-    File currentClasspathJarDir = new File(Preferences.userNodeForPackage(Console).get('currentClasspathJarDir', '.'))
-    File currentClasspathDir = new File(Preferences.userNodeForPackage(Console).get('currentClasspathDir', '.'))
-
-    // Running scripts
-    CompilerConfiguration baseConfig
-    CompilerConfiguration config
-    GroovyShell shell
-    int scriptNameCounter = 0
-    SystemOutputInterceptor systemOutInterceptor
-    SystemOutputInterceptor systemErrorInterceptor
-    Thread runThread = null
-    Closure beforeExecution
-    Closure afterExecution
-
-    public static URL ICON_PATH = Console.class.classLoader.getResource('groovy/ui/ConsoleIcon.png') // used by ObjectBrowser and AST Viewer
-    public static URL NODE_ICON_PATH = Console.class.classLoader.getResource('groovy/ui/icons/bullet_green.png') // used by AST Viewer
-
-    static groovyFileFilter = new GroovyFileFilter()
-    boolean scriptRunning = false
-    boolean stackOverFlowError = false
-    Action interruptAction
-
-    Action selectWordAction
-    Action selectPreviousWordAction
-
-    ConsolePreferences consolePreferences
-
-    static void main(args) {
-        MessageSource messages = new MessageSource(Console)
-        def cli = new CliBuilderInternal(usage: 'groovyConsole [options] [filename]', stopAtNonOption: false,
-                header: messages['cli.option.header'])
-        cli.with {
-            _(names: ['-cp', '-classpath', '--classpath'], messages['cli.option.classpath.description'])
-            h(longOpt: 'help', messages['cli.option.help.description'])
-            V(longOpt: 'version', messages['cli.option.version.description'])
-            pa(longOpt: 'parameters', messages['cli.option.parameters.description'])
-            i(longOpt: 'indy', messages['cli.option.indy.description'])
-            D(longOpt: 'define', type: Map, argName: 'name=value', messages['cli.option.define.description'])
-            _(longOpt: 'configscript', args: 1, messages['cli.option.configscript.description'])
-        }
-        OptionAccessor options = cli.parse(args)
-
-        if (options == null) {
-            // CliBuilder prints error, but does not exit
-            System.exit(22) // Invalid Args
-        }
-
-        if (options.h) {
-            cli.usage()
-            System.exit(0)
-        }
-
-        if (options.V) {
-            System.out.println(messages.format('cli.info.version', GroovySystem.version))
-            System.exit(0)
-        }
-
-        if (options.hasOption('D')) {
-            options.Ds.each { k, v -> System.setProperty(k, v) }
-        }
-
-        // full stack trace should not be logged to the output window - GROOVY-4663
-        java.util.logging.Logger.getLogger(StackTraceUtils.STACK_LOG_NAME).useParentHandlers = false
-
-        //when starting via main set the look and feel to system
-        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName())
-
-        def baseConfig = new CompilerConfiguration(System.getProperties())
-        String starterConfigScripts = System.getProperty("groovy.starter.configscripts", null)
-        if (options.configscript || (starterConfigScripts != null && !starterConfigScripts.isEmpty())) {
-            List<String> configScripts = new ArrayList<String>()
-            if (options.configscript) {
-                configScripts.add(options.configscript)
-            }
-            if (starterConfigScripts != null) {
-                configScripts.addAll(StringGroovyMethods.tokenize((CharSequence) starterConfigScripts, ','))
-            }
-            GroovyMain.processConfigScripts(configScripts, baseConfig)
-        }
-
-        baseConfig.setParameters(options.hasOption("pa"))
-
-        if (options.i) {
-            enableIndy(baseConfig)
-        }
-
-        def console = new Console(Thread.currentThread().contextClassLoader, new Binding(), baseConfig)
-        console.useScriptClassLoaderForScriptExecution = true
-        console.run()
-        def remaining = options.arguments()
-        if (remaining && !remaining[-1].startsWith("-")) {
-            console.loadScriptFile(remaining[-1] as File)
-        }
-    }
-
-    int loadMaxOutputChars() {
-        // For backwards compatibility 'maxOutputChars' remains defined in the Console class
-        // and the System Property takes precedence as the default value.
-        int max = prefs.getInt('maxOutputChars', ConsolePreferences.DEFAULT_MAX_OUTPUT_CHARS)
-        return System.getProperty('groovy.console.output.limit', "${max}") as int
-    }
-
-    void preferences(EventObject evt = null) {
-        if (!consolePreferences) {
-            consolePreferences = new ConsolePreferences(this)
-        }
-        consolePreferences.show()
-    }
-
-    void setOutputPreferences(boolean useOutputFile, File outputFile) {
-        prefs.remove('outputLogFileName')
-        if (!useOutputFile) {
-            closeOutputPrintWriter(outputFile)
-        } else {
-            if (outputFile != null) {
-                closeOutputPrintWriter()
-                createOutputPrintWriter(outputFile)
-                prefs.put('outputLogFileName', outputFile.getAbsolutePath())
-            }
-        }
-    }
-
-    void createOutputPrintWriter(File outputFile) {
-        outputPrintWriter = new PrintWriter(new FileOutputStream(
-                outputFile,
-                true))
-    }
-
-    void closeOutputPrintWriter() {
-        if (outputPrintWriter != null) {
-            outputPrintWriter.close()
-            outputPrintWriter = null
-        }
-    }
-
-    Console(Binding binding = new Binding()) {
-        this(null, binding)
-    }
-
-    Console(ClassLoader parent, Binding binding = new Binding(), CompilerConfiguration baseConfig = new CompilerConfiguration(System.getProperties())) {
-        this.baseConfig = baseConfig
-        this.maxOutputChars = loadMaxOutputChars()
-        indy = indy || isIndyEnabled(baseConfig)
-        if (indy) {
-            enableIndy(baseConfig)
-        }
-
-        // Set up output file for stdout/stderr, if any
-        def outputLogFileName = prefs.get('outputLogFileName', null)
-        if (outputLogFileName) {
-            createOutputPrintWriter(new File(outputLogFileName))
-        }
-
-        newScript(parent, binding)
-        try {
-            System.setProperty('groovy.full.stacktrace', System.getProperty('groovy.full.stacktrace',
-                    Boolean.toString(prefs.getBoolean('fullStackTraces', false))))
-
-        } catch (SecurityException se) {
-            fullStackTracesAction.enabled = false
-        }
-        consoleControllers += this
-
-        // listen for Ivy events if Ivy is on the Classpath
-        try {
-            if (Class.forName('org.apache.ivy.core.event.IvyListener')) {
-                def ivyPluginClass = Class.forName('groovy.ui.ConsoleIvyPlugin')
-                ivyPluginClass.newInstance().addListener(this)
-            }
-        } catch(ClassNotFoundException ignore) { }
-
-        binding.variables._outputTransforms = OutputTransforms.loadOutputTransforms()
-    }
-
-    void newScript(ClassLoader parent, Binding binding) {
-        config = new CompilerConfiguration(baseConfig)
-        config.addCompilationCustomizers(*baseConfig.compilationCustomizers)
-        if (threadInterrupt) {
-            config.addCompilationCustomizers(new ASTTransformationCustomizer(ThreadInterrupt))
-        }
-        shell = new GroovyShell(parent, binding, config)
-    }
-
-    static frameConsoleDelegates = [
-            rootContainerDelegate:{
-                frame(
-                    title: 'GroovyConsole',
-                    //location: [100,100], // in groovy 2.0 use platform default location
-                    iconImage: imageIcon('/groovy/ui/ConsoleIcon.png').image,
-                    defaultCloseOperation: JFrame.DO_NOTHING_ON_CLOSE,
-                ) {
-                    try {
-                        current.locationByPlatform = true
-                    } catch (Exception e) {
-                        current.location = [100, 100] // for 1.4 compatibility
-                    }
-                    containingWindows += current
-                }
-            },
-            menuBarDelegate: {arg->
-                current.JMenuBar = build(arg)}
-        ]
-
-    void run() {
-        run(frameConsoleDelegates)
-    }
-
-    void run(JApplet applet) {
-        run([
-            rootContainerDelegate:{
-                containingWindows += SwingUtilities.getRoot(applet.getParent())
-                applet
-            },
-            menuBarDelegate: {arg->
-                current.JMenuBar = build(arg)}
-        ])
-    }
-
-    void run(Map defaults) {
-
-        swing = new SwingBuilder()
-        defaults.each{k, v -> swing[k] = v}
-
-        // tweak what the stack traces filter out to be fairly broad
-        System.setProperty('groovy.sanitized.stacktraces', '''org.codehaus.groovy.runtime.
-                org.codehaus.groovy.
-                groovy.lang.
-                gjdk.groovy.lang.
-                sun.
-                java.lang.reflect.
-                java.lang.Thread
-                groovy.ui.Console''')
-
-
-        // add controller to the swingBuilder bindings
-        swing.controller = this
-
-        // create the actions
-        swing.build(ConsoleActions)
-
-        // create the view
-        swing.build(ConsoleView)
-
-        bindResults()
-
-        // stitch some actions together
-        swing.bind(source:swing.inputEditor.undoAction, sourceProperty:'enabled', target:swing.undoAction, targetProperty:'enabled')
-        swing.bind(source:swing.inputEditor.redoAction, sourceProperty:'enabled', target:swing.redoAction, targetProperty:'enabled')
-
-        if (swing.consoleFrame instanceof Window) {
-            nativeFullScreenForMac(swing.consoleFrame)
-            swing.consoleFrame.pack()
-            swing.consoleFrame.show()
-        }
-        installInterceptor()
-        updateTitle() // Title changes based on indy setting
-        swing.doLater inputArea.&requestFocus
-    }
-
-    /**
-     * Make the console frames capable of native fullscreen
-     * for Mac OS X Lion and beyond.
-     *
-     * @param frame the application window
-     */
-    private void nativeFullScreenForMac(Window frame) {
-        if (System.getProperty('os.name').contains('Mac OS X')) {
-            new GroovyShell(new Binding([frame: frame])).evaluate('''
-                    try {
-                        com.apple.eawt.FullScreenUtilities.setWindowCanFullScreen(frame, true)
-                    } catch (Throwable t) {
-                        // simply ignore as full screen capability is not available
-                    }
-                ''')
-        }
-    }
-
-    void installInterceptor() {
-        systemOutInterceptor = new SystemOutputInterceptor(this.&notifySystemOut, true)
-        systemOutInterceptor.start()
-        systemErrorInterceptor = new SystemOutputInterceptor(this.&notifySystemErr, false)
-        systemErrorInterceptor.start()
-    }
-
-    void addToHistory(record) {
-        history.add(record)
-        // history.size here just retrieves method closure
-        if (history.size() > maxHistory) {
-            history.remove(0)
-        }
-        // history.size doesn't work here either
-        historyIndex = history.size()
-        updateHistoryActions()
-    }
-
-    // Ensure we don't have too much in console (takes too much memory)
-    private ensureNoDocLengthOverflow(doc) {
-        // if it is a case of stackOverFlowError, show the exception details from the front
-        // as there is no point in showing the repeating details at the back
-        int offset = stackOverFlowError ? maxOutputChars : 0
-        if (doc.length > maxOutputChars) {
-            doc.remove(offset, doc.length - maxOutputChars)
-        }
-    }
-
-    // Append a string to the output area
-    void appendOutput(String text, AttributeSet style){
-        def doc = outputArea.styledDocument
-        insertString(doc, doc.length, text, style)
-        ensureNoDocLengthOverflow(doc)
-    }
-
-    void appendOutput(Window window, AttributeSet style) {
-        appendOutput(window.toString(), style)
-    }
-
-    void appendOutput(Object object, AttributeSet style) {
-        appendOutput(object.toString(), style)
-    }
-
-    void appendOutput(Component component, AttributeSet style) {
-        SimpleAttributeSet sas = new SimpleAttributeSet()
-        sas.addAttribute(StyleConstants.NameAttribute, 'component')
-        StyleConstants.setComponent(sas, component)
-        appendOutput(component.toString(), sas)
-    }
-
-    void appendOutput(Icon icon, AttributeSet style) {
-        SimpleAttributeSet sas = new SimpleAttributeSet()
-        sas.addAttribute(StyleConstants.NameAttribute, 'icon')
-        StyleConstants.setIcon(sas, icon)
-        appendOutput(icon.toString(), sas)
-    }
-
-    void appendStacktrace(text) {
-        def doc = outputArea.styledDocument
-
-        // split lines by new line separator
-        def lines = text.split(/(\n|\r|\r\n|\u0085|\u2028|\u2029)/)
-
-        // Java Identifier regex
-        def ji = /([\p{Alnum}_\$][\p{Alnum}_\$]*)/
-
-        // stacktrace line regex
-        def stacktracePattern = /\tat $ji(\.$ji)+\((($ji(\.(java|groovy))?):(\d+))\)/
-
-        lines.each { line ->
-            int initialLength = doc.length
-
-            def matcher = line =~ stacktracePattern
-            def fileName =  matcher.matches() ? matcher[0][-5] : ''
-
-            if (fileName == scriptFile?.name || fileName.startsWith(DEFAULT_SCRIPT_NAME_START)) {
-                def fileNameAndLineNumber = matcher[0][-6]
-                def length = fileNameAndLineNumber.length()
-                def index = line.indexOf(fileNameAndLineNumber)
-
-                def style = hyperlinkStyle
-                def hrefAttr = new SimpleAttributeSet()
-                // don't pass a GString as it won't be coerced to String as addAttribute takes an Object
-                hrefAttr.addAttribute(HTML.Attribute.HREF, 'file://' + fileNameAndLineNumber)
-                style.addAttribute(HTML.Tag.A, hrefAttr)
-
-                insertString(doc, initialLength,                     line[0..<index],                    stacktraceStyle)
-                insertString(doc, initialLength + index,             line[index..<(index + length)],     style)
-                insertString(doc, initialLength + index + length,    line[(index + length)..-1] + '\n',  stacktraceStyle)
-            } else {
-                insertString(doc, initialLength, line + '\n', stacktraceStyle)
-            }
-        }
-
-        ensureNoDocLengthOverflow(doc)
-    }
-
-    void insertString(Document doc, int offset, String text, AttributeSet attributeSet, boolean outputToFile = true) {
-        doc.insertString(offset, text, attributeSet)
-
-        // Output to file if activated
-        if (outputToFile && outputPrintWriter != null) {
-            outputPrintWriter.append(text)
-            outputPrintWriter.flush()
-        }
-    }
-
-    // Append a string to the output area on a new line
-    void appendOutputNl(text, style) {
-        def doc = outputArea.styledDocument
-        def len = doc.length
-        def alreadyNewLine = (len == 0 || doc.getText(len - 1, 1) == '\n')
-        insertString(doc, doc.length, ' \n', style)
-        if (alreadyNewLine) {
-            doc.remove(len, 2) // windows hack to fix (improve?) line spacing
-        }
-        appendOutput(text, style)
-    }
-
-    void appendOutputLines(text, style) {
-        appendOutput(text, style)
-        def doc = outputArea.styledDocument
-        def len = doc.length
-
-        // Disable output to log file in this case ('\n' is removed from outputArea next line)
-        insertString(doc, len, ' \n', style, false)
-        doc.remove(len, 2) // windows hack to fix (improve?) line spacing
-    }
-
-    // Return false if use elected to cancel
-    boolean askToSaveFile() {
-        if (!dirty) {
-            return true
-        }
-        switch (JOptionPane.showConfirmDialog(frame,
-            'Save changes' + (scriptFile != null ? " to ${scriptFile.name}" : '') + '?',
-            'GroovyConsole', JOptionPane.YES_NO_CANCEL_OPTION))
-        {
-            case JOptionPane.YES_OPTION:
-                return fileSave()
-            case JOptionPane.NO_OPTION:
-                return true
-            default:
-                return false
-        }
-    }
-
-    void beep() {
-        Toolkit.defaultToolkit.beep()
-    }
-
-    // Binds the '_' and '__' variables in the shell
-    void bindResults() {
-        shell.setVariable('_', getLastResult()) // lastResult doesn't seem to work
-        shell.setVariable('__', history.collect {it.result})
-    }
-
-    // Handles menu event
-    static void captureStdOut(EventObject evt) {
-        captureStdOut = evt.source.selected
-        prefs.putBoolean('captureStdOut', captureStdOut)
-    }
-
-    static void captureStdErr(EventObject evt) {
-        captureStdErr = evt.source.selected
-        prefs.putBoolean('captureStdErr', captureStdErr)
-    }
-
-    void fullStackTraces(EventObject evt) {
-        fullStackTraces = evt.source.selected
-        System.setProperty('groovy.full.stacktrace',
-            Boolean.toString(fullStackTraces))
-        prefs.putBoolean('fullStackTraces', fullStackTraces)
-    }
-
-    void showScriptInOutput(EventObject evt) {
-        showScriptInOutput = evt.source.selected
-        prefs.putBoolean('showScriptInOutput', showScriptInOutput)
-    }
-
-    void visualizeScriptResults(EventObject evt) {
-        visualizeScriptResults = evt.source.selected
-        prefs.putBoolean('visualizeScriptResults', visualizeScriptResults)
-    }
-
-    void showToolbar(EventObject evt) {
-        showToolbar = evt.source.selected
-        prefs.putBoolean('showToolbar', showToolbar)
-        toolbar.visible = showToolbar
-    }
-
-    void orientationVertical(EventObject evt) {
-        def oldValue = orientationVertical
-        orientationVertical = evt.source.selected
-        prefs.putBoolean('orientationVertical', orientationVertical)
-        if (oldValue != orientationVertical) {
-            if (orientationVertical) {
-                splitPane.setOrientation(JSplitPane.VERTICAL_SPLIT)
-            } else {
-                splitPane.setOrientation(JSplitPane.HORIZONTAL_SPLIT)
-            }
-            splitPane.resizeWeight = detachedOutput ? 1.0 : 0.5
-            splitPane.resetToPreferredSizes()
-        }
-    }
-
-    void detachedOutput(EventObject evt) {
-        def oldDetachedOutput = detachedOutput
-        detachedOutput = evt.source.selected
-        prefs.putBoolean('detachedOutput', detachedOutput)
-        if (oldDetachedOutput != detachedOutput) {
-            if (detachedOutput) {
-                splitPane.add(blank, JSplitPane.BOTTOM)
-                origDividerSize = splitPane.dividerSize
-                splitPane.dividerSize = 0
-                splitPane.resizeWeight = 1.0
-                outputWindow.add(scrollArea, BorderLayout.CENTER)
-                prepareOutputWindow()
-            } else {
-                splitPane.add(scrollArea, JSplitPane.BOTTOM)
-                splitPane.dividerSize = origDividerSize
-                outputWindow.add(blank, BorderLayout.CENTER)
-                outputWindow.visible = false
-                splitPane.resizeWeight = 0.5
-            }
-        }
-    }
-
-    void autoClearOutput(EventObject evt) {
-        autoClearOutput = evt.source.selected
-        prefs.putBoolean('autoClearOutput', autoClearOutput)
-    }
-
-    void threadInterruption(EventObject evt) {
-        threadInterrupt = evt.source.selected
-        prefs.putBoolean('threadInterrupt', threadInterrupt)
-        def customizers = config.compilationCustomizers.iterator()
-        while (customizers.hasNext()) {
-            def next = customizers.next()
-            if (next instanceof ASTTransformationCustomizer) {
-                ASTTransformationCustomizer astCustomizer = next
-                if (astCustomizer.transformation instanceof ThreadInterruptibleASTTransformation) {
-                    customizers.remove()
-                }
-            }
-        }
-        if (threadInterrupt) {
-            config.addCompilationCustomizers(new ASTTransformationCustomizer(ThreadInterrupt))
-        }
-    }
-
-    void caretUpdate(CaretEvent e){
-        textSelectionStart = Math.min(dot(e), mark(e))
-        textSelectionEnd = Math.max(dot(e), mark(e))
-        setRowNumAndColNum()
-    }
-
-    // GROOVY-8339: to avoid illegal access to a non-visible implementation class - can be removed if a more general solution is found
-    @CompileStatic
-    int dot(CaretEvent e) {
-        e.dot
-    }
-
-    // GROOVY-8339: to avoid illegal access to a non-visible implementation class - can be removed if a more general solution is found
-    @CompileStatic
-    int mark(CaretEvent e) {
-        e.mark
-    }
-
-    void clearOutput(EventObject evt = null) {
-        outputArea.text = ''
-    }
-
-    // If at exit time, a script is running, the user is given an option to interrupt it first
-    def askToInterruptScript() {
-        if(!scriptRunning) return true
-        def rc = JOptionPane.showConfirmDialog(frame, "Script executing. Press 'OK' to attempt to interrupt it before exiting.",
-            'GroovyConsole', JOptionPane.OK_CANCEL_OPTION)
-        if (rc == JOptionPane.OK_OPTION) {
-            doInterrupt()
-            return true
-        } else {
-            return false
-        }
-    }
-
-    void doInterrupt(EventObject evt = null) {
-        runThread?.interrupt()
-    }
-
-    void exitDesktop(EventObject evt = null, quitResponse = null) {
-        exit(evt)
-        quitResponse.performQuit()
-    }
-
-    void exit(EventObject evt = null) {
-        if (askToInterruptScript()) {
-            if (askToSaveFile()) {
-                if (frame instanceof Window) {
-                    frame.hide()
-                    frame.dispose()
-                    outputWindow?.dispose()
-                }
-                FindReplaceUtility.dispose()
-                consoleControllers.remove(this)
-                if (!consoleControllers) {
-                    systemOutInterceptor.stop()
-                    systemErrorInterceptor.stop()
-                }
-            }
-        }
-    }
-
-    void fileNewFile(EventObject evt = null) {
-        if (askToSaveFile()) {
-            scriptFile = null
-            setDirty(false)
-            inputArea.text = ''
-        }
-    }
-
-    // Start a new window with a copy of current variables
-    void fileNewWindow(EventObject evt = null) {
-        Console consoleController = new Console(
-            new Binding(
-                new HashMap(shell.getContext().variables)))
-        consoleController.systemOutInterceptor = systemOutInterceptor
-        consoleController.systemErrorInterceptor = systemErrorInterceptor
-        SwingBuilder swing = new SwingBuilder()
-        consoleController.swing = swing
-        frameConsoleDelegates.each {k, v -> swing[k] = v}
-        swing.controller = consoleController
-        swing.build(ConsoleActions)
-        swing.build(ConsoleView)
-        installInterceptor()
-        nativeFullScreenForMac(swing.consoleFrame)
-        swing.consoleFrame.pack()
-        swing.consoleFrame.show()
-        swing.doLater swing.inputArea.&requestFocus
-    }
-
-    void fileOpen(EventObject evt = null) {
-        if (askToSaveFile()) {
-            def scriptName = selectFilename()
-            if (scriptName != null) {
-                loadScriptFile(scriptName)
-            }
-        }
-    }
-
-    void loadScriptFile(File file) {
-        swing.edt {
-            inputArea.editable = false
-        }
-        swing.doOutside {
-            try {
-                consoleText = file.readLines().join('\n')
-                scriptFile = file
-                swing.edt {
-                    def listeners = inputArea.document.getListeners(DocumentListener)
-                    listeners.each { inputArea.document.removeDocumentListener(it) }
-                    updateTitle()
-                    inputArea.document.remove 0, inputArea.document.length
-                    inputArea.document.insertString 0, consoleText, null
-                    listeners.each { inputArea.document.addDocumentListener(it) }
-                    setDirty(false)
-                    inputArea.caretPosition = 0
-                }
-            } finally {
-                swing.edt { inputArea.editable = true }
-                // GROOVY-3684: focus away and then back to inputArea ensures caret blinks
-                swing.doLater outputArea.&requestFocusInWindow
-                swing.doLater inputArea.&requestFocusInWindow
-            }
-        }
-    }
-
-    // Save file - return false if user cancelled save
-    boolean fileSave(EventObject evt = null) {
-        if (scriptFile == null) {
-            return fileSaveAs(evt)
-        }
-
-        scriptFile.write(inputArea.text)
-        setDirty(false)
-        return true
-    }
-
-    // Save file - return false if user cancelled save
-    boolean fileSaveAs(EventObject evt = null) {
-        scriptFile = selectFilename('Save')
-        if (scriptFile != null) {
-            scriptFile.write(inputArea.text)
-            setDirty(false)
-            return true
-        } else {
-            return false
-        }
-    }
-
-    def finishException(Throwable t, boolean executing) {
-        if(executing) {
-            statusLabel.text = 'Execution terminated with exception.'
-            history[-1].exception = t
-        } else {
-            statusLabel.text = 'Compilation failed.'
-        }
-
-        if (t instanceof MultipleCompilationErrorsException) {
-            MultipleCompilationErrorsException mcee = t
-            ErrorCollector collector = mcee.errorCollector
-            int count = collector.errorCount
-            appendOutputNl("${count} compilation error${count > 1 ? 's' : ''}:\n\n", commandStyle)
-
-            collector.errors.each { error ->
-                if (error instanceof SyntaxErrorMessage) {
-                    SyntaxException se = error.cause
-                    int errorLine = se.line
-                    String message = se.originalMessage
-
-                    String scriptFileName = scriptFile?.name ?: DEFAULT_SCRIPT_NAME_START
-
-                    def doc = outputArea.styledDocument
-
-                    def style = hyperlinkStyle
-                    def hrefAttr = new SimpleAttributeSet()
-                    // don't pass a GString as it won't be coerced to String as addAttribute takes an Object
-                    hrefAttr.addAttribute(HTML.Attribute.HREF, 'file://' + scriptFileName + ':' + errorLine)
-                    style.addAttribute(HTML.Tag.A, hrefAttr)
-
-                    insertString(doc, doc.length, message + ' at ', stacktraceStyle)
-                    insertString(doc, doc.length, "line: ${se.line}, column: ${se.startColumn}\n\n", style)
-                } else if (error instanceof Throwable) {
-                    reportException(error)
-                } else if (error instanceof ExceptionMessage) {
-                    reportException(error.cause)
-                } else if (error instanceof SimpleMessage) {
-                    def doc = outputArea.styledDocument
-                    insertString(doc, doc.length, "${error.message}\n", new SimpleAttributeSet())
-                }
-            }
-        } else {
-            reportException(t)
-        }
-
-        if(!executing) {
-            bindResults()
-        }
-
-        // GROOVY-4496: set the output window position to the top-left so the exception details are visible from the start
-        outputArea.caretPosition = 0
-
-        if (detachedOutput) {
-            prepareOutputWindow()
-            showOutputWindow()
-        }
-    }
-
-    private calcPreferredSize(a, b, c) {
-        [c, [a, b].min()].max()
-    }
-
-    private reportException(Throwable t) {
-        appendOutputNl('Exception thrown\n', commandStyle)
-
-        Writer sw = new StringBuilderWriter()
-        new PrintWriter(sw).withWriter {pw -> StackTraceUtils.deepSanitize(t).printStackTrace(pw) }
-        appendStacktrace("\n${sw.builder}\n")
-    }
-
-    def finishNormal(Object result) {
-        // Take down the wait/cancel dialog
-        history[-1].result = result
-        if (result != null) {
-            statusLabel.text = 'Execution complete.'
-            appendOutputNl('Result: ', promptStyle)
-            def obj = (visualizeScriptResults
-                ? OutputTransforms.transformResult(result, shell.getContext()._outputTransforms)
-                : result.toString())
-
-            // multi-methods are magical!
-            appendOutput(obj, resultStyle)
-        } else {
-            statusLabel.text = 'Execution complete. Result was null.'
-        }
-        bindResults()
-        if (detachedOutput) {
-            prepareOutputWindow()
-            showOutputWindow()
-        }
-    }
-
-    def compileFinishNormal() {
-        statusLabel.text = 'Compilation complete.'
-    }
-
-    private def prepareOutputWindow() {
-        outputArea.setPreferredSize(null)
-        outputWindow.pack()
-        outputArea.setPreferredSize([calcPreferredSize(outputWindow.getWidth(), inputEditor.getWidth(), 120),
-                calcPreferredSize(outputWindow.getHeight(), inputEditor.getHeight(), 60)] as Dimension)
-        outputWindow.pack()
-    }
-
-    // Gets the last, non-null result
-    def getLastResult() {
-        // runtime bugs in here history.reverse produces odd lookup
-        // return history.reverse.find {it != null}
-        if (!history) {
-            return
-        }
-        for (i in (history.size() - 1)..0) {
-            if (history[i].result != null) {
-                return history[i].result
-            }
-        }
-        return null
-    }
-
-    void historyNext(EventObject evt = null) {
-        if (historyIndex < history.size()) {
-            setInputTextFromHistory(historyIndex + 1)
-        } else {
-            statusLabel.text = "Can't go past end of history (time travel not allowed)"
-            beep()
-        }
-    }
-
-    void historyPrev(EventObject evt = null) {
-        if (historyIndex > 0) {
-            setInputTextFromHistory(historyIndex - 1)
-        } else {
-            statusLabel.text = "Can't go past start of history"
-            beep()
-        }
-    }
-
-    void inspectLast(EventObject evt = null){
-        if (null == lastResult) {
-            JOptionPane.showMessageDialog(frame, 'The last result is null.',
-                'Cannot Inspect', JOptionPane.INFORMATION_MESSAGE)
-            return
-        }
-        ObjectBrowser.inspect(lastResult)
-    }
-
-    void inspectVariables(EventObject evt = null) {
-        ObjectBrowser.inspect(shell.getContext().variables)
-    }
-
-    void inspectAst(EventObject evt = null) {
-        new AstBrowser(inputArea, rootElement, shell.getClassLoader(), config).run({ inputArea.getText() } )
-    }
-
-    void inspectTokens(EventObject evt = null) {
-        def content = inputArea.getText()
-        def lf = (CompilerConfiguration.DEFAULT.pluginFactory instanceof org.codehaus.groovy.antlr.AntlrParserPluginFactory
-                ? LexerFrame.groovyScriptFactory(content) : new LexerFrame(GroovyLangLexer, org.apache.groovy.parser.antlr4.GroovyLexer, new StringReader(content)))
-
-        lf.visible = true
-    }
-
-    void largerFont(EventObject evt = null) {
-        updateFontSize(inputArea.font.size + 2)
-    }
-
-    static boolean notifySystemOut(int consoleId, String str) {
-        if (!captureStdOut) {
-            // Output as normal
-            return true
-        }
-
-        Closure doAppend = {
-            Console console = findConsoleById(consoleId)
-            if (console) {
-                console.appendOutputLines(str, console.outputStyle)
-            } else {
-                consoleControllers.each {it.appendOutputLines(str, it.outputStyle)}
-            }
-        }
-
-        // Put onto GUI
-        if (EventQueue.isDispatchThread()) {
-            doAppend.call()
-        }
-        else {
-            SwingUtilities.invokeLater doAppend
-        }
-        return false
-    }
-
-    static boolean notifySystemErr(int consoleId, String str) {
-        if (!captureStdErr) {
-            // Output as normal
-            return true
-        }
-
-        Closure doAppend = {
-            Console console = findConsoleById(consoleId)
-            if (console) {
-                console.appendStacktrace(str)
-            } else {
-                consoleControllers.each {it.appendStacktrace(str)}
-            }
-        }
-
-        // Put onto GUI
-        if (EventQueue.isDispatchThread()) {
-            doAppend.call()
-        }
-        else {
-            SwingUtilities.invokeLater doAppend
-        }
-        return false
-    }
-
-    int getConsoleId() {
-        return System.identityHashCode(this)
-    }
-
-    private static Console findConsoleById(int consoleId) {
-        return consoleControllers.find { it.consoleId == consoleId }
-    }
-
-    // actually run the script
-
-    void runScript(EventObject evt = null) {
-        if (saveOnRun && scriptFile != null)  {
-            if (fileSave(evt)) runScriptImpl(false)
-        } else {
-            runScriptImpl(false)
-        }
-    }
-
-    void saveOnRun(EventObject evt = null)  {
-        saveOnRun = evt.source.selected
-        prefs.putBoolean('saveOnRun', saveOnRun)
-    }
-
-    void indy(EventObject evt = null)  {
-        indy = evt.source.selected
-        prefs.putBoolean('indy', indy)
-        if (indy) {
-            enableIndy(baseConfig)
-        } else {
-            disableIndy(baseConfig)
-        }
-        updateTitle()
-        newScript(shell.classLoader, shell.context)
-    }
-
-    private static void enableIndy(CompilerConfiguration cc) {
-        cc.getOptimizationOptions().put(CompilerConfiguration.INVOKEDYNAMIC, true)
-    }
-
-    private static void disableIndy(CompilerConfiguration cc) {
-        cc.getOptimizationOptions().remove(CompilerConfiguration.INVOKEDYNAMIC)
-    }
-
-    private static boolean isIndyEnabled(CompilerConfiguration cc) {
-        cc.getOptimizationOptions().get(CompilerConfiguration.INVOKEDYNAMIC)
-    }
-
-    void runSelectedScript(EventObject evt = null) {
-        runScriptImpl(true)
-    }
-
-    void addClasspathJar(EventObject evt = null) {
-        def fc = new JFileChooser(currentClasspathJarDir)
-        fc.fileSelectionMode = JFileChooser.FILES_ONLY
-        fc.multiSelectionEnabled = true
-        fc.acceptAllFileFilterUsed = true
-        if (fc.showDialog(frame, 'Add') == JFileChooser.APPROVE_OPTION) {
-            currentClasspathJarDir = fc.currentDirectory
-            Preferences.userNodeForPackage(Console).put('currentClasspathJarDir', currentClasspathJarDir.path)
-            fc.selectedFiles?.each { file ->
-                shell.getClassLoader().addURL(file.toURL())
-            }
-        }
-    }
-
-    void addClasspathDir(EventObject evt = null) {
-        def fc = new JFileChooser(currentClasspathDir)
-        fc.fileSelectionMode = JFileChooser.DIRECTORIES_ONLY
-        fc.acceptAllFileFilterUsed = true
-        if (fc.showDialog(frame, 'Add') == JFileChooser.APPROVE_OPTION) {
-            currentClasspathDir = fc.currentDirectory
-            Preferences.userNodeForPackage(Console).put('currentClasspathDir', currentClasspathDir.path)
-            shell.getClassLoader().addURL(fc.selectedFile.toURL())
-        }
-    }
-
-    void listClasspath(EventObject evt = null) {
-        List<URL> urls = []
-
-        ClassLoader cl = shell.classLoader
-        while(cl instanceof URLClassLoader) {
-            cl.getURLs().each { url -> urls << url }
-            cl = cl.parent
-        }
-
-        boolean isWin = isWindows()
-        List data = urls.unique().collect { url -> [name: new File(url.toURI()).name, path: isWin ? url.path.substring(1).replace('/', '\\') : url.path] }
-        data.sort { it.name.toLowerCase() }
-
-        JScrollPane scrollPane = swing.scrollPane{
-            table {
-                tableModel(list : data) {
-                    propertyColumn(header: 'Name', propertyName: 'name', editable: false)
-                    propertyColumn(header:' Path', propertyName: 'path', editable: false)
-                }
-            }
-        }
-
-        def pane = swing.optionPane()
-        pane.message = scrollPane
-        def dialog = pane.createDialog(frame, 'Classpath')
-        dialog.setSize(800, 600)
-        dialog.resizable = true
-        dialog.visible = true
-    }
-
-    void clearContext(EventObject evt = null) {
-        def binding = new Binding()
-        newScript(null, binding)
-        // reload output transforms
-        binding.variables._outputTransforms = OutputTransforms.loadOutputTransforms()
-    }
-
-    private void runScriptImpl(boolean selected) {
-        if(scriptRunning) {
-            statusLabel.text = 'Cannot run script now as a script is already running. Please wait or use "Interrupt Script" option.'
-            return
-        }
-        scriptRunning = true
-        interruptAction.enabled = true
-        stackOverFlowError = false // reset this flag before running a script
-        def endLine = System.getProperty('line.separator')
-        def record = new HistoryRecord( allText: inputArea.getText().replaceAll(endLine, '\n'),
-            selectionStart: textSelectionStart, selectionEnd: textSelectionEnd)
-        addToHistory(record)
-        pendingRecord = new HistoryRecord(allText:'', selectionStart:0, selectionEnd:0)
-
-        if (prefs.getBoolean('autoClearOutput', false)) clearOutput()
-
-        // Print the input text
-        if (showScriptInOutput) {
-            for (line in record.getTextToRun(selected).tokenize('\n')) {
-                appendOutputNl('groovy> ', promptStyle)
-                appendOutput(line, commandStyle)
-            }
-            appendOutputNl(' \n', promptStyle)
-        }
-
-        // Kick off a new thread to do the evaluation
-        // Run in a thread outside of EDT, this method is usually called inside the EDT
-        runThread = Thread.start {
-            try {
-                systemOutInterceptor.setConsoleId(this.getConsoleId())
-                SwingUtilities.invokeLater { showExecutingMessage() }
-                String name = scriptFile?.name ?: (DEFAULT_SCRIPT_NAME_START + scriptNameCounter++)
-                if(beforeExecution) {
-                    beforeExecution()
-                }
-                def result
-                if(useScriptClassLoaderForScriptExecution) {
-                    ClassLoader savedThreadContextClassLoader = Thread.currentThread().contextClassLoader
-                    try {
-                        Thread.currentThread().contextClassLoader = shell.classLoader
-                        result = shell.run(record.getTextToRun(selected), name, [])
-                    }
-                    finally {
-                        Thread.currentThread().contextClassLoader = savedThreadContextClassLoader
-                    }
-                }
-                else {
-                    result = shell.run(record.getTextToRun(selected), name, [])
-                }
-                if(afterExecution) {
-                    afterExecution()
-                }
-                SwingUtilities.invokeLater { finishNormal(result) }
-            } catch (Throwable t) {
-                if(t instanceof StackOverflowError) {
-                    // set the flag that will be used in printing exception details in output pane
-                    stackOverFlowError = true
-                    clearOutput()
-                }
-                SwingUtilities.invokeLater { finishException(t, true) }
-            } finally {
-                runThread = null
-                scriptRunning = false
-                interruptAction.enabled = false
-                systemOutInterceptor.removeConsoleId()
-            }
-        }
-    }
-
-    void compileScript(EventObject evt = null) {
-        if(scriptRunning) {
-            statusLabel.text = 'Cannot compile script now as a script is already running. Please wait or use "Interrupt Script" option.'
-            return
-        }
-        stackOverFlowError = false // reset this flag before running a script
-        def endLine = System.getProperty('line.separator')
-        def record = new HistoryRecord( allText: inputArea.getText().replaceAll(endLine, '\n'),
-            selectionStart: textSelectionStart, selectionEnd: textSelectionEnd)
-
-        if (prefs.getBoolean('autoClearOutput', false)) clearOutput()
-
-        // Print the input text
-        if (showScriptInOutput) {
-            for (line in record.allText.tokenize('\n')) {
-                appendOutputNl('groovy> ', promptStyle)
-                appendOutput(line, commandStyle)
-            }
-            appendOutputNl(' \n', promptStyle)
-        }
-
-        // Kick off a new thread to do the compilation
-        // Run in a thread outside of EDT, this method is usually called inside the EDT
-        runThread = Thread.start {
-            try {
-                SwingUtilities.invokeLater { showCompilingMessage() }
-                shell.getClassLoader().parseClass(record.allText)
-                SwingUtilities.invokeLater { compileFinishNormal() }
-            } catch (Throwable t) {
-                SwingUtilities.invokeLater { finishException(t, false) }
-            } finally {
-                runThread = null
-            }
-        }
-    }
-
-    def selectFilename(name = 'Open') {
-        def fc = new JFileChooser(currentFileChooserDir)
-        fc.fileSelectionMode = JFileChooser.FILES_ONLY
-        fc.acceptAllFileFilterUsed = true
-        fc.fileFilter = groovyFileFilter
-        if(name == 'Save') {
-            fc.selectedFile = new File('*.groovy')
-        }
-        if (fc.showDialog(frame, name) == JFileChooser.APPROVE_OPTION) {
-            currentFileChooserDir = fc.currentDirectory
-            Preferences.userNodeForPackage(Console).put('currentFileChooserDir', currentFileChooserDir.path)
-            return fc.selectedFile
-        } else {
-            return null
-        }
-    }
-
-    void setDirty(boolean newDirty) {
-        //TODO when @BoundProperty is live, this should be handled via listeners
-        dirty = newDirty
-        saveAction.enabled = newDirty
-        updateTitle()
-    }
-
-    private void setInputTextFromHistory(newIndex) {
-        def endLine = System.getProperty('line.separator')
-        if (historyIndex >= history.size()) {
-            pendingRecord = new HistoryRecord( allText: inputArea.getText().replaceAll(endLine, '\n'),
-                selectionStart: textSelectionStart, selectionEnd: textSelectionEnd)
-        }
-        historyIndex = newIndex
-        def record
-        if (historyIndex < history.size()) {
-            record = history[historyIndex]
-            statusLabel.text = "command history ${history.size() - historyIndex}"
-        } else {
-            record = pendingRecord
-            statusLabel.text = 'at end of history'
-        }
-        inputArea.text = record.allText
-        inputArea.selectionStart = record.selectionStart
-        inputArea.selectionEnd = record.selectionEnd
-        setDirty(true) // Should calculate dirty flag properly (hash last saved/read text in each file)
-        updateHistoryActions()
-    }
-
-    private void updateHistoryActions() {
-        nextHistoryAction.enabled = historyIndex < history.size()
-        prevHistoryAction.enabled = historyIndex > 0
-    }
-
-    // Adds a variable to the binding
-    // Useful for adding variables before opening the console
-    void setVariable(String name, Object value) {
-        shell.getContext().setVariable(name, value)
-    }
-
-    void showAbout(EventObject evt = null) {
-        def version = GroovySystem.getVersion()
-        def pane = swing.optionPane()
-         // work around GROOVY-1048
-        pane.setMessage('Welcome to the Groovy Console for evaluating Groovy scripts\nVersion ' + version)
-        def dialog = pane.createDialog(frame, 'About GroovyConsole')
-        dialog.show()
-    }
-
-    void find(EventObject evt = null) {
-        FindReplaceUtility.showDialog()
-    }
-
-    void findNext(EventObject evt = null) {
-        FindReplaceUtility.FIND_ACTION.actionPerformed(evt)
-    }
-
-    void findPrevious(EventObject evt = null) {
-        def reverseEvt = new ActionEvent(
-            evt.getSource(), evt.getID(),
-            evt.getActionCommand(), evt.getWhen(),
-            ActionEvent.SHIFT_MASK) //reverse
-        FindReplaceUtility.FIND_ACTION.actionPerformed(reverseEvt)
-    }
-
-    void replace(EventObject evt = null) {
-        FindReplaceUtility.showDialog(true)
-    }
-
-    void comment(EventObject evt = null) {
-        def rootElement = inputArea.document.defaultRootElement
-        def cursorPos = inputArea.getCaretPosition()
-        int startRow = rootElement.getElementIndex(cursorPos)
-        int endRow = startRow
-
-        if (inputArea.getSelectedText()) {
-            def selectionStart = inputArea.getSelectionStart()
-            startRow = rootElement.getElementIndex(selectionStart)
-            def selectionEnd = inputArea.getSelectionEnd()
-            endRow = rootElement.getElementIndex(selectionEnd)
-        }
-
-        // If multiple commented lines intermix with uncommented lines, consider them uncommented
-        def allCommented = true
-        startRow.upto(endRow) { rowIndex ->
-            def rowElement = rootElement.getElement(rowIndex)
-            int startOffset = rowElement.getStartOffset()
-            int endOffset = rowElement.getEndOffset()
-            String rowText = inputArea.document.getText(startOffset, endOffset - startOffset)
-            if (rowText.trim().length() < 2 || !rowText.trim().substring(0, 2).equals("//")) {
-                allCommented = false
-            }
-        }
-
-        startRow.upto(endRow) { rowIndex ->
-            def rowElement = rootElement.getElement(rowIndex)
-            int startOffset = rowElement.getStartOffset()
-            int endOffset = rowElement.getEndOffset()
-            String rowText = inputArea.document.getText(startOffset, endOffset - startOffset)
-            if (allCommented) {
-            // Uncomment this line if it is already commented
-            int slashOffset = rowText.indexOf("//")
-            inputArea.document.remove(slashOffset + startOffset, 2)
-            } else {
-                // Add comment string in front of this line
-                inputArea.document.insertString(startOffset, "//", new SimpleAttributeSet())
-            }
-        }
-    }
-
-    void selectBlock(EventObject evt = null) {
-        final int startPos = inputArea.getSelectionStart()
-        final int endPos = inputArea.getSelectionEnd()
-        final int startRow = rootElement.getElementIndex(startPos)
-        final int endRow = rootElement.getElementIndex(endPos)
-        final Element rowElement = rootElement.getElement(startRow)
-        final int startRowOffset = rowElement.getStartOffset()
-        final int endRowOffset = rowElement.getEndOffset()
-
-        // Empty line, nothing to do
-        if (startRowOffset == endRowOffset - 1) {
-            return
-        }
-
-        // Nothing is currently selected so select next chunk unless we are at the end of
-        // the line then we select the previous
-        if (startPos == endPos && selectWordAction != null && selectPreviousWordAction != null) {
-            if (endPos == endRowOffset - 1) {
-                selectPreviousWordAction.actionPerformed(evt)
-            } else {
-                selectWordAction.actionPerformed(evt)
-            }
-            return
-        }
-
-        // Partial selection on a single line but not the entire line or word
-        // selection actions are not available so select the entire line
-        if (startRow == endRow && (startPos != startRowOffset || (endPos != endRowOffset - 1))) {
-            inputArea.setSelectionStart(startRowOffset)
-            inputArea.setSelectionEnd(endRowOffset - 1)
-            return
-        }
-
-        // At this point an entire line or multiple lines are selected so
-        // look for a block/paragraph to select
-        String rowText = inputArea.document.getText(startRowOffset, endRowOffset - startRowOffset)
-        if (!rowText?.trim()) {
-            // Selection is empty or all spaces so not part of any block
-            return
-        }
-
-        // Look up for first empty row
-        int startBlockPos = startRowOffset
-        for (int i = startRow - 1; i >= 0; i--) {
-            Element re = rootElement.getElement(i)
-            rowText = inputArea.document.getText(re.getStartOffset(), re.getEndOffset() - re.getStartOffset())
-            if (!rowText?.trim()) {
-                break
-            }
-            startBlockPos = re.getStartOffset()
-        }
-
-        // Look down for first empty row
-        int endBlockPos = endRowOffset
-        int totalRows = rootElement.getElementCount()
-        for (int i = startRow + 1; i < totalRows; i++) {
-            Element re = rootElement.getElement(i)
-            rowText = inputArea.document.getText(re.getStartOffset(), re.getEndOffset() - re.getStartOffset())
-            if (!rowText?.trim()) {
-                break
-            }
-            endBlockPos = re.getEndOffset()
-        }
-
-        inputArea.setSelectionStart(startBlockPos)
-        inputArea.setSelectionEnd(endBlockPos)
-    }
-
-    void showMessage(String message) {
-        statusLabel.text = message
-    }
-
-    void showExecutingMessage() {
-        statusLabel.text = 'Script executing now. Please wait or use "Interrupt Script" option.'
-    }
-
-    void showCompilingMessage() {
-        statusLabel.text = 'Script compiling now. Please wait.'
-    }
-
-    // Shows the detached 'outputArea' dialog
-    void showOutputWindow(EventObject evt = null) {
-        if (detachedOutput) {
-            outputWindow.setLocationRelativeTo(frame)
-            outputWindow.show()
-        }
-    }
-
-    void hideOutputWindow(EventObject evt = null) {
-        if (detachedOutput) {
-            outputWindow.visible = false
-        }
-    }
-
-    void hideAndClearOutputWindow(EventObject evt = null) {
-        clearOutput()
-        hideOutputWindow()
-    }
-
-    void smallerFont(EventObject evt = null){
-        updateFontSize(inputArea.font.size - 2)
-    }
-
-    void smartHighlighter(EventObject evt = null) {
-        inputEditor.enableHighLighter(evt.source.selected ? SmartDocumentFilter : GroovyFilter)
-        inputEditor.textEditor.setText(inputEditor.textEditor.getText()) // enable the highlighter immediately
-        prefs.putBoolean('smartHighlighter', evt.source.selected)
-    }
-
-    void updateTitle() {
-        if (frame.title) {
-            String title = 'GroovyConsole'
-            if (indy) {
-                title += ' (Indy)'
-            }
-            if (scriptFile != null) {
-                frame.title = scriptFile.name + (dirty?' * ':'') + ' - ' + title
-            } else {
-                frame.title = title
-            }
-        }
-    }
-
-    private updateFontSize(newFontSize) {
-        if (newFontSize > 40) {
-            newFontSize = 40
-        } else if (newFontSize < 4) {
-            newFontSize = 4
-        }
-
-        prefs.putInt('fontSize', newFontSize)
-
-        // don't worry, the fonts won't be changed to this family, the styles will only derive from this
-        def newFont = new Font(inputEditor.defaultFamily, Font.PLAIN, newFontSize)
-        inputArea.font = newFont
-        outputArea.font = newFont
-    }
-
-    void invokeTextAction(evt, closure, area = inputArea) {
-        def source = evt.getSource()
-        if (source != null) {
-            closure(area)
-        }
-    }
-
-    void cut(EventObject evt = null) {
-        invokeTextAction(evt, { source -> source.cut() })
-    }
-
-    void copy(EventObject evt = null) {
-        invokeTextAction(evt, { source -> source.copy() }, copyFromComponent ?: inputArea)
-    }
-
-    void paste(EventObject evt = null) {
-        invokeTextAction(evt, { source -> source.paste() })
-    }
-
-    void selectAll(EventObject evt = null) {
-        invokeTextAction(evt, { source -> source.selectAll() }, copyFromComponent ?: inputArea)
-    }
-
-    void setRowNumAndColNum() {
-        cursorPos = inputArea.getCaretPosition()
-        rowNum = rootElement.getElementIndex(cursorPos) + 1
-
-        def rowElement = rootElement.getElement(rowNum - 1)
-        colNum = cursorPos - rowElement.getStartOffset() + 1
-
-        rowNumAndColNum.setText("$rowNum:$colNum")
-    }
-
-    void print(EventObject evt = null) {
-        inputEditor.printAction.actionPerformed(evt)
-    }
-
-    void undo(EventObject evt = null) {
-        inputEditor.undoAction.actionPerformed(evt)
-    }
-
-    void redo(EventObject evt = null) {
-        inputEditor.redoAction.actionPerformed(evt)
-    }
-
-    void hyperlinkUpdate(HyperlinkEvent e) {
-        if (e.eventType == HyperlinkEvent.EventType.ACTIVATED) {
-            // URL of the form: file://myscript.groovy:32
-            String url = e.getURL()
-            int lineNumber = url[(url.lastIndexOf(':') + 1)..-1].toInteger()
-
-            def editor = inputEditor.textEditor
-            def text = editor.text
-
-            int newlineBefore = 0
-            int newlineAfter = 0
-            int currentLineNumber = 1
-
-            // let's find the previous and next newline surrounding the offending line
-            int i = 0
-            for (ch in text) {
-                if (ch == '\n') {
-                    currentLineNumber++
-                }
-                if (currentLineNumber == lineNumber) {
-                    newlineBefore = i
-                    def nextNewline = text.indexOf('\n', i + 1)
-                    newlineAfter = nextNewline > -1 ? nextNewline : text.length()
-                    break
-                }
-                i++
-            }
-
-            // highlight / select the whole line
-            editor.setCaretPosition(newlineBefore)
-            editor.moveCaretPosition(newlineAfter)
-        }
-    }
-
-    void componentHidden(ComponentEvent e) { }
-
-    void componentMoved(ComponentEvent e) { }
-
-    void componentResized(ComponentEvent e) {
-        def component = e.getComponent()
-        if (component == outputArea || component == inputArea) {
-            def rect = component.getVisibleRect()
-            prefs.putInt("${component.name}Width", rect.getWidth().intValue())
-            prefs.putInt("${component.name}Height", rect.getHeight().intValue())
-        } else {
-            prefs.putInt("${component.name}Width", component.width)
-            prefs.putInt("${component.name}Height", component.height)
-        }
-    }
-
-    void componentShown(ComponentEvent e) { }
-
-    void focusGained(FocusEvent e) {
-        // remember component with focus for text-copy functionality
-        if (e.component == outputArea || e.component == inputArea) {
-            copyFromComponent = e.component
-        }
-    }
-
-    void focusLost(FocusEvent e) { }
-
-    private static boolean isWindows() {
-        return getOsName().startsWith("windows")
-    }
-    private static String getOsName() {
-        return System.getProperty("os.name").toLowerCase()
-    }
-}
-
-@CompileStatic
-@Deprecated
-class GroovyFileFilter extends FileFilter {
-    private static final List GROOVY_SOURCE_EXTENSIONS = ['*.groovy', '*.gvy', '*.gy', '*.gsh', '*.story', '*.gpp', '*.grunit']
-    private static final GROOVY_SOURCE_EXT_DESC = GROOVY_SOURCE_EXTENSIONS.join(',')
-
-    boolean accept(File f) {
-        if (f.isDirectory()) {
-            return true
-        }
-        GROOVY_SOURCE_EXTENSIONS.find {it == getExtension(f)} ? true : false
-    }
-
-    String getDescription() {
-        "Groovy Source Files ($GROOVY_SOURCE_EXT_DESC)"
-    }
-
-    static String getExtension(File f) {
-        def ext = null
-        def s = f.getName()
-        def i = s.lastIndexOf('.')
-        if (i > 0 &&  i < s.length() - 1) {
-            ext = s.substring(i).toLowerCase()
-        }
-        "*$ext"
-    }
-}
diff --git a/subprojects/groovy-console/src/main/groovy/groovy/ui/ConsoleActions.groovy b/subprojects/groovy-console/src/main/groovy/groovy/ui/ConsoleActions.groovy
deleted file mode 100644
index 50b536e..0000000
--- a/subprojects/groovy-console/src/main/groovy/groovy/ui/ConsoleActions.groovy
+++ /dev/null
@@ -1,428 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package groovy.ui
-
-import javax.swing.*
-import java.awt.*
-import java.awt.event.InputEvent
-import java.awt.event.KeyEvent
-
-newFileAction = action(
-    name: 'New File',
-    closure: controller.&fileNewFile,
-    mnemonic: 'N',
-    accelerator: shortcut('N'),
-    smallIcon: imageIcon(resource:'icons/page.png', class:this),
-    shortDescription: 'New Groovy Script'
-)
-
-newWindowAction = action(
-    name: 'New Window',
-    closure: controller.&fileNewWindow,
-    mnemonic: 'W',
-    accelerator: shortcut('shift N')
-)
-
-openAction = action(
-    name: 'Open',
-    closure: controller.&fileOpen,
-    mnemonic: 'O',
-    accelerator: shortcut('O'),
-    smallIcon: imageIcon(resource:'icons/folder_page.png', class:this),
-    shortDescription: 'Open Groovy Script'
-)
-
-saveAction = action(
-    name: 'Save',
-    closure: controller.&fileSave,
-    mnemonic: 'S',
-    accelerator: shortcut('S'),
-    smallIcon: imageIcon(resource:'icons/disk.png', class:this),
-    shortDescription: 'Save Groovy Script',
-    enabled: false // controller will enable as needed
-)
-
-saveAsAction = action(
-    name: 'Save As...',
-    closure: controller.&fileSaveAs,
-    mnemonic: 'A',
-)
-
-printAction = action(
-    name: 'Print...',
-    closure: controller.&print,
-    mnemonic: 'P',
-    accelerator: shortcut('P')
-)
-
-exitAction = action(
-    name: 'Exit',
-    closure: controller.&exit,
-    mnemonic: 'X'
-// whether or not application exit should have an
-// accelerator is debatable in usability circles
-// at the very least a confirm dialog should dhow up
-//accelerator: shortcut('Q')
-)
-
-undoAction = action(
-    name: 'Undo',
-    closure: controller.&undo,
-    mnemonic: 'U',
-    accelerator: shortcut('Z'),
-    smallIcon: imageIcon(resource:'icons/arrow_undo.png', class:this),
-    shortDescription: 'Undo'
-)
-
-redoAction = action(
-    name: 'Redo',
-    closure: controller.&redo,
-    mnemonic: 'R',
-    accelerator: shortcut('shift Z'), // is control-shift-Z or control-Y more common?
-    smallIcon: imageIcon(resource:'icons/arrow_redo.png', class:this),
-    shortDescription: 'Redo'
-)
-
-findAction = action(
-    name: 'Find...',
-    closure: controller.&find,
-    mnemonic: 'F',
-    accelerator: shortcut('F'),
-    smallIcon: imageIcon(resource:'icons/find.png', class:this),
-    shortDescription: 'Find'
-)
-
-findNextAction = action(
-    name: 'Find Next',
-    closure: controller.&findNext,
-    mnemonic: 'N',
-    accelerator: KeyStroke.getKeyStroke(KeyEvent.VK_F3, 0)
-)
-
-findPreviousAction = action(
-    name: 'Find Previous',
-    closure: controller.&findPrevious,
-    mnemonic: 'V',
-    accelerator: KeyStroke.getKeyStroke(KeyEvent.VK_F3, InputEvent.SHIFT_DOWN_MASK)
-)
-
-replaceAction = action(
-    name: 'Replace...',
-    closure: controller.&replace,
-    mnemonic: 'E',
-    accelerator: shortcut('H'),
-    smallIcon: imageIcon(resource:'icons/text_replace.png', class:this),
-    shortDescription: 'Replace'
-)
-
-cutAction = action(
-    name: 'Cut',
-    closure: controller.&cut,
-    mnemonic: 'T',
-    accelerator: shortcut('X'),
-    smallIcon: imageIcon(resource:'icons/cut.png', class:this),
-    shortDescription: 'Cut'
-)
-
-copyAction = action(
-    name: 'Copy',
-    closure: controller.&copy,
-    mnemonic: 'C',
-    accelerator: shortcut('C'),
-    smallIcon: imageIcon(resource:'icons/page_copy.png', class:this),
-    shortDescription: 'Copy'
-)
-
-pasteAction = action(
-    name: 'Paste',
-    closure: controller.&paste,
-    mnemonic: 'P',
-    accelerator: shortcut('V'),
-    smallIcon: imageIcon(resource:'icons/page_paste.png', class:this),
-    shortDescription: 'Paste'
-)
-
-selectAllAction = action(
-    name: 'Select All',
-    closure: controller.&selectAll,
-    mnemonic: 'A',
-    accelerator: shortcut('A')
-)
-
-historyPrevAction = action(
-    name: 'Previous',
-    closure: controller.&historyPrev,
-    mnemonic: 'P',
-    accelerator: shortcut(KeyEvent.VK_COMMA),
-    smallIcon: imageIcon(resource:'icons/book_previous.png', class:this),
-    shortDescription: 'Previous Groovy Script',
-    enabled: false // controller will enable as needed
-)
-
-historyNextAction = action(
-    name: 'Next',
-    closure: controller.&historyNext,
-    mnemonic: 'N',
-    accelerator: shortcut(KeyEvent.VK_PERIOD),
-    smallIcon: imageIcon(resource:'icons/book_next.png', class:this),
-    shortDescription: 'Next Groovy Script',
-    enabled: false // controller will enable as needed
-)
-
-clearOutputAction = action(
-    name: 'Clear Output',
-    closure: controller.&clearOutput,
-    mnemonic: 'C',
-    accelerator: shortcut('W'),
-    smallIcon: imageIcon(resource:'icons/clear.png', class:this),
-    shortDescription: 'Clear Output Area'
-)
-
-runAction = action(
-    name: 'Run',
-    closure: controller.&runScript,
-    mnemonic: 'R',
-    keyStroke: shortcut('ENTER'),
-    accelerator: shortcut('R'),
-    smallIcon: imageIcon(resource:'icons/script_go.png', class:this),
-    shortDescription: 'Execute Groovy Script'
-)
-
-runSelectionAction = action(
-    name: 'Run Selection',
-    closure: controller.&runSelectedScript,
-    mnemonic: 'E',
-    keyStroke: shortcut('shift ENTER'),
-    accelerator: shortcut('shift R')
-)
-
-addClasspathJar = action(
-    name: 'Add Jar(s) to ClassPath',
-    closure: controller.&addClasspathJar,
-    mnemonic: 'J',
-)
-
-addClasspathDir = action(
-    name: 'Add Directory to ClassPath',
-    closure: controller.&addClasspathDir,
-    mnemonic: 'D',
-)
-
-listClasspath = action(
-    name: 'List Classpath',
-    closure: controller.&listClasspath
-)
-
-clearClassloader = action(
-    name: 'Clear Script Context',
-    closure: controller.&clearContext,
-    mnemonic: 'C',
-)
-
-inspectLastAction = action(
-    name: 'Inspect Last',
-    closure: controller.&inspectLast,
-    mnemonic: 'I',
-    accelerator: shortcut('I')
-)
-
-inspectVariablesAction = action(
-    name: 'Inspect Variables',
-    closure: controller.&inspectVariables,
-    mnemonic: 'V',
-    accelerator: shortcut('J')
-)
-
-inspectAstAction = action(
-    name: 'Inspect Ast',
-    closure: controller.&inspectAst,
-    mnemonic: 'A',
-    accelerator: shortcut('T'),
-)
-
-inspectTokensAction = action(
-    name: 'Inspect Tokens',
-    closure: controller.&inspectTokens,
-    mnemonic: 'T',
-    accelerator: shortcut('K'),
-)
-
-captureStdOutAction = action(
-    name: 'Capture Standard Output',
-    closure: controller.&captureStdOut,
-    mnemonic: 'O'
-)
-
-captureStdErrAction = action(
-    name: 'Capture Standard Error Output',
-    closure: controller.&captureStdErr,
-    mnemonic: 'E'
-)
-
-fullStackTracesAction = action(
-    name: 'Show Full Stack Traces',
-    closure: controller.&fullStackTraces,
-    mnemonic: 'F'
-)
-
-showScriptInOutputAction = action(
-    name: 'Show Script in Output',
-    closure: controller.&showScriptInOutput,
-    mnemonic: 'R'
-)
-
-visualizeScriptResultsAction = action(
-    name: 'Visualize Script Results',
-    closure: controller.&visualizeScriptResults,
-    mnemonic: 'V'
-)
-
-showToolbarAction = action(
-    name: 'Show Toolbar',
-    closure: controller.&showToolbar,
-    mnemonic: 'T'
-)
-
-detachedOutputAction = action(
-    name: 'Detached Output',
-    closure: controller.&detachedOutput,
-    mnemonic: 'D'
-)
-
-orientationVerticalAction = action(
-    name: 'Vertical Orientation',
-    closure: controller.&orientationVertical,
-    mnemonic: 'n'
-)
-
-showOutputWindowAction = action(
-    closure: controller.&showOutputWindow,
-    keyStroke: shortcut('shift O'),
-)
-
-hideOutputWindowAction1 = action(
-    closure: controller.&hideOutputWindow,
-    keyStroke: 'SPACE',
-)
-
-hideOutputWindowAction2 = action(
-    closure: controller.&hideOutputWindow,
-    keyStroke: 'ENTER',
-)
-
-hideOutputWindowAction3 = action(
-    closure: controller.&hideOutputWindow,
-    keyStroke: 'ESCAPE',
-)
-
-hideOutputWindowAction4 = action(
-    closure: controller.&hideAndClearOutputWindow,
-    keyStroke: shortcut('W'),
-)
-
-autoClearOutputAction = action(
-    name: 'Auto Clear Output On Run',
-    closure: controller.&autoClearOutput,
-    mnemonic: 'A'
-)
-
-saveOnRunAction = action(
-    name: 'Auto Save on Runs',
-    closure: controller.&saveOnRun,
-    mnemonic: 'A'
-)
-
-largerFontAction = action(
-    name: 'Larger Font',
-    closure: controller.&largerFont,
-    mnemonic: 'L',
-    accelerator: shortcut('shift L')
-)
-
-smallerFontAction = action(
-    name: 'Smaller Font',
-    closure: controller.&smallerFont,
-    mnemonic: 'S',
-    accelerator: shortcut('shift S')
-)
-
-smartHighlighterAction = action(
-        name: 'Enable Smart Highlighter',
-        closure: controller.&smartHighlighter
-)
-
-aboutAction = action(
-    name: 'About',
-    closure: controller.&showAbout,
-    mnemonic: 'A'
-)
-
-threadInterruptAction = action(
-    name: 'Allow Interruption',
-    closure: controller.&threadInterruption,
-    mnemonic: 'O'
-)
-
-interruptAction = action(
-    name: 'Interrupt',
-    closure: controller.&doInterrupt,
-    mnemonic: 'T',
-    smallIcon: imageIcon(resource:'icons/cross.png', class:this),
-    shortDescription: 'Interrupt Running Script',
-    enabled: false // controller will enable as needed
-)
-
-compileAction = action(
-    name: 'Compile',
-    closure: controller.&compileScript,
-    mnemonic: 'L',
-    accelerator: shortcut('L'),
-    shortDescription: 'Compile Groovy Script'
-)
-
-commentAction = action(
-    name: 'Comment',
-    closure: controller.&comment,
-    mnemonic: 'C',
-    // Ctrl or Command + /
-    accelerator: KeyStroke.getKeyStroke(KeyEvent.VK_SLASH, Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()),
-    shortDescription: 'Comment/Uncomment Selected Script'
-)
-
-selectBlockAction = action(
-    name: 'Select Block',
-    closure: controller.&selectBlock,
-    mnemonic: 'B',
-    accelerator: shortcut('B'),
-    shortDescription: 'Selects current Word, Line or Block in Script'
-)
-
-indyAction = action(
-    name: 'Enable Indy Compilation',
-    closure: controller.&indy,
-    mnemonic: 'I',
-    shortDescription: 'Enable InvokeDynamic (Indy) compilation for scripts'
-)
-
-preferencesAction = action(
-    name: 'Preferences',
-    closure: controller.&preferences,
-    mnemonic: 'S',
-    shortDescription: 'Preference Settings'
-)
\ No newline at end of file
diff --git a/subprojects/groovy-console/src/main/groovy/groovy/ui/ConsoleApplet.groovy b/subprojects/groovy-console/src/main/groovy/groovy/ui/ConsoleApplet.groovy
deleted file mode 100644
index 5147d2e..0000000
--- a/subprojects/groovy-console/src/main/groovy/groovy/ui/ConsoleApplet.groovy
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package groovy.ui
-
-import groovy.transform.CompileStatic
-
-import javax.swing.JApplet
-
-/**
- * ConsoleApplet
- */
-@CompileStatic
-@Deprecated
-class ConsoleApplet extends JApplet {
-
-    Console console
-
-    void start() {
-        console = new Console()
-        console.run this
-    }
-
-    void stop() {
-        console.exit()
-    }
-}
diff --git a/subprojects/groovy-console/src/main/groovy/groovy/ui/ConsoleIvyPlugin.groovy b/subprojects/groovy-console/src/main/groovy/groovy/ui/ConsoleIvyPlugin.groovy
deleted file mode 100644
index 787da0e..0000000
--- a/subprojects/groovy-console/src/main/groovy/groovy/ui/ConsoleIvyPlugin.groovy
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package groovy.ui
-
-import groovy.grape.Grape
-import groovy.grape.GrapeIvy
-import org.apache.ivy.core.event.IvyListener
-import org.apache.ivy.core.event.download.PrepareDownloadEvent
-import org.apache.ivy.core.event.resolve.StartResolveEvent
-
-/**
- * Groovy Swing console.
- *
- * Adds Groovy Grape feedback (via an Ivy listener).
- */
-@Deprecated
-class ConsoleIvyPlugin {
-    Console savedConsole
-    Set<String> resolvedDependencies = []
-    Set<String> downloadedArtifacts = []
-
-    def addListener(Console console) {
-        savedConsole = console
-
-        ((GrapeIvy) Grape.instance).ivyInstance.eventManager.addIvyListener([progress: { ivyEvent ->
-            switch (ivyEvent) {
-                case StartResolveEvent:
-                    ivyEvent.moduleDescriptor.dependencies.each { it ->
-                        def name = it.toString()
-                        if (!resolvedDependencies.contains(name)) {
-                            resolvedDependencies << name
-                            savedConsole.showMessage "Resolving ${name} ..."
-                        }
-                    }
-                    break
-                case PrepareDownloadEvent:
-                    ivyEvent.artifacts.each { it ->
-                        def name = it.toString()
-                        if (!downloadedArtifacts.contains(name)) {
-                            downloadedArtifacts << name
-                            savedConsole.showMessage "Downloading artifact ${name} ..."
-                        }
-                    }
-                    break
-            }
-        }] as IvyListener)
-
-    }
-}
diff --git a/subprojects/groovy-console/src/main/groovy/groovy/ui/ConsolePreferences.groovy b/subprojects/groovy-console/src/main/groovy/groovy/ui/ConsolePreferences.groovy
deleted file mode 100644
index 577f20a..0000000
--- a/subprojects/groovy-console/src/main/groovy/groovy/ui/ConsolePreferences.groovy
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package groovy.ui
-
-import groovy.beans.Bindable
-import groovy.swing.SwingBuilder
-import org.codehaus.groovy.tools.shell.util.MessageSource
-
-import javax.swing.*
-import java.awt.*
-
-@Deprecated
-class ConsolePreferences {
-
-    // Default maximum number of characters to show on console at any time
-    static int DEFAULT_MAX_OUTPUT_CHARS = 20000
-
-    @Bindable int maxOutputChars
-
-    private final console
-    private final MessageSource T
-
-    private JDialog dialog
-    File outputFile
-
-    ConsolePreferences(console) {
-        this.console = console
-        T = new MessageSource(Console)
-
-        maxOutputChars = console.loadMaxOutputChars()
-        console.maxOutputChars = maxOutputChars
-    }
-
-    void show() {
-        console.swing.edt {
-            if (!dialog) {
-                buildDialog()
-            }
-            dialog.setLocationRelativeTo(console.frame)
-            dialog.pack()
-            dialog.getRootPane().setDefaultButton(console.swing.closePrefsButton)
-            console.swing.doLater console.swing.closePrefsButton.&requestFocusInWindow
-            dialog.setVisible(true)
-        }
-    }
-
-    private void buildDialog() {
-        dialog = console.swing.dialog(
-                title: T['prefs.dialog.title'], owner: console.frame, modal: true
-        ) {
-            vbox {
-                vbox(border: titledBorder(T['prefs.output.settings.title'])) {
-                    hbox {
-                        label "${T['prefs.max.characters.output']}:"
-
-                        formattedTextField value: maxOutputChars, id: 'txtMaxOutputChars',
-                                text:
-                                        bind(target: this, targetProperty: 'maxOutputChars',
-                                                validator: this.&isInteger, converter: Integer.&parseInt),
-                                columns: 6
-                    }
-
-                    hbox {
-                        checkBox T['prefs.output.file'], id: 'outputFileCheckBox', selected: false
-                        hglue()
-                        label T['prefs.output.file.name'], id: 'outputFileName',
-                                enabled: bind(source: outputFileCheckBox, sourceProperty: 'selected')
-                        button T['prefs.output.file.select'], id: 'outputFileNameButton',
-                                enabled: bind(source: outputFileCheckBox, sourceProperty: 'selected'),
-                                actionPerformed: this.&onChooseFile
-                    }
-                }
-
-                vglue()
-
-                hbox {
-                    button T['prefs.reset.defaults'], id: 'resetPrefsButton', actionPerformed: this.&onReset
-                    hglue()
-                    button T['prefs.close'], id: 'closePrefsButton', actionPerformed: this.&onClose
-                }
-
-            }
-        }
-
-        console.swing.txtMaxOutputChars.maximumSize = new Dimension(Integer.MAX_VALUE, (int) console.swing.txtMaxOutputChars.preferredSize.height)
-
-        def outputLogFileName = console.prefs.get('outputLogFileName', null)
-        if (outputLogFileName != null) {
-            console.swing.outputFileCheckBox.selected = true
-            console.swing.outputFileName.text = outputLogFileName
-        }
-    }
-
-    private boolean isInteger(value) {
-        try {
-            Integer.parseInt(value)
-            return true
-        } catch (NumberFormatException ignore) {
-            return false
-        }
-    }
-
-    private void onReset(EventObject event) {
-        console.swing.txtMaxOutputChars.text = DEFAULT_MAX_OUTPUT_CHARS
-    }
-
-    private void onClose(EventObject event) {
-        console.prefs.putInt('maxOutputChars', maxOutputChars)
-        // For backwards compatibility 'maxOutputChars' remains defined in the Console class
-        // and so we update the value to keep it in sync.
-        if (maxOutputChars != console.maxOutputChars) {
-            console.maxOutputChars = maxOutputChars
-        }
-
-        console.setOutputPreferences(console.swing.outputFileCheckBox.enabled, outputFile)
-
-        dialog.dispose()
-    }
-
-    private void onChooseFile(EventObject event) {
-        JFileChooser fileChooser = console.swing.fileChooser()
-
-        if (console.prefs.get('outputLogFileName', null) != null) {
-            fileChooser.setSelectedFile(new File(console.prefs.get('outputLogFileName', null)))
-        }
-
-        if (fileChooser.showOpenDialog(dialog) == JFileChooser.APPROVE_OPTION) {
-            outputFile = fileChooser.selectedFile
-        }
-        console.swing.outputFileName.text = outputFile.path
-    }
-
-    // Useful for testing gui
-    static void main(args) {
-        javax.swing.UIManager.setLookAndFeel(javax.swing.UIManager.getSystemLookAndFeelClassName())
-        def c = new Expando().with {
-            swing = new SwingBuilder()
-            frame = swing.frame(title: 'foo', size:[800, 800])
-            DEFAULT_MAX_OUTPUT_CHARS = 25000
-            maxOutputChars = 25000
-            loadMaxOutputChars = { 20000 }
-            prefs = [putInt: { s, t -> }, getInt: { s, t -> t }]
-            it
-        }
-        ConsolePreferences cp = new ConsolePreferences(c)
-        cp.show()
-        c.frame.dispose()
-        println "maxOutputChars==${cp.maxOutputChars}"
-        println "console.maxOutputChars==${c.maxOutputChars}"
-        println 'done'
-    }
-}
\ No newline at end of file
diff --git a/subprojects/groovy-console/src/main/groovy/groovy/ui/ConsoleSupport.java b/subprojects/groovy-console/src/main/groovy/groovy/ui/ConsoleSupport.java
deleted file mode 100644
index 3086c46..0000000
--- a/subprojects/groovy-console/src/main/groovy/groovy/ui/ConsoleSupport.java
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package groovy.ui;
-
-import groovy.lang.GroovyShell;
-
-import javax.swing.*;
-import javax.swing.text.Style;
-import javax.swing.text.StyleConstants;
-import javax.swing.text.StyleContext;
-import javax.swing.text.StyledDocument;
-import java.awt.*;
-
-/**
- * Base class for console
- */
-@Deprecated
-public abstract class ConsoleSupport {
-
-    Style promptStyle;
-    Style commandStyle;
-    Style outputStyle;
-    private GroovyShell shell;
-    int counter;
-
-    protected void addStylesToDocument(JTextPane outputArea) {
-        StyledDocument doc = outputArea.getStyledDocument();
-
-        Style def = StyleContext.getDefaultStyleContext().getStyle(StyleContext.DEFAULT_STYLE);
-
-        Style regular = doc.addStyle("regular", def);
-        StyleConstants.setFontFamily(def, "Monospaced");
-
-        promptStyle = doc.addStyle("prompt", regular);
-        StyleConstants.setForeground(promptStyle, Color.BLUE);
-
-        commandStyle = doc.addStyle("command", regular);
-        StyleConstants.setForeground(commandStyle, Color.MAGENTA);
-
-        outputStyle = doc.addStyle("output", regular);
-        StyleConstants.setBold(outputStyle, true);
-    }
-
-    public Style getCommandStyle() {
-        return commandStyle;
-    }
-
-    public Style getOutputStyle() {
-        return outputStyle;
-    }
-
-    public Style getPromptStyle() {
-        return promptStyle;
-    }
-
-    public GroovyShell getShell() {
-        if (shell == null) {
-            shell = new GroovyShell();
-        }
-        return shell;
-    }
-
-    protected Object evaluate(String text) {
-        String name = "Script" + counter++;
-        try {
-            return getShell().evaluate(text, name);
-        }
-        catch (Exception e) {
-            handleException(text, e);
-            return null;
-        }
-    }
-    
-    protected abstract void handleException(String text, Exception e);
-}
\ No newline at end of file
diff --git a/subprojects/groovy-console/src/main/groovy/groovy/ui/ConsoleTextEditor.java b/subprojects/groovy-console/src/main/groovy/groovy/ui/ConsoleTextEditor.java
deleted file mode 100644
index 6356aa1..0000000
--- a/subprojects/groovy-console/src/main/groovy/groovy/ui/ConsoleTextEditor.java
+++ /dev/null
@@ -1,356 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package groovy.ui;
-
-import groovy.ui.text.GroovyFilter;
-import groovy.ui.text.MatchingHighlighter;
-import groovy.ui.text.SmartDocumentFilter;
-import groovy.ui.text.StructuredSyntaxResources;
-import groovy.ui.text.TextEditor;
-import groovy.ui.text.TextUndoManager;
-import org.codehaus.groovy.runtime.StringGroovyMethods;
-
-import javax.swing.AbstractAction;
-import javax.swing.Action;
-import javax.swing.ActionMap;
-import javax.swing.InputMap;
-import javax.swing.JComponent;
-import javax.swing.JPanel;
-import javax.swing.JScrollPane;
-import javax.swing.KeyStroke;
-import javax.swing.event.CaretListener;
-import javax.swing.event.DocumentEvent;
-import javax.swing.event.DocumentListener;
-import javax.swing.text.BadLocationException;
-import javax.swing.text.DefaultStyledDocument;
-import javax.swing.text.Document;
-import javax.swing.text.DocumentFilter;
-import java.awt.BorderLayout;
-import java.awt.Dimension;
-import java.awt.Font;
-import java.awt.Graphics;
-import java.awt.Point;
-import java.awt.datatransfer.DataFlavor;
-import java.awt.datatransfer.Transferable;
-import java.awt.event.ActionEvent;
-import java.awt.event.InputEvent;
-import java.awt.event.KeyEvent;
-import java.awt.print.PrinterJob;
-import java.beans.PropertyChangeEvent;
-import java.beans.PropertyChangeListener;
-import java.util.prefs.Preferences;
-
-/**
- * Component which provides a styled editor for the console.
- */
-@Deprecated
-public class ConsoleTextEditor extends JScrollPane {
-    public String getDefaultFamily() {
-        return defaultFamily;
-    }
-
-    public void setDefaultFamily(String defaultFamily) {
-        this.defaultFamily = defaultFamily;
-    }
-
-    private class LineNumbersPanel extends JPanel {
-
-        public LineNumbersPanel() {
-            int initialSize = 3 * Preferences.userNodeForPackage(Console.class).getInt("fontSize", 12);
-            setMinimumSize(new Dimension(initialSize, initialSize));
-            setPreferredSize(new Dimension(initialSize, initialSize));
-        }
-
-        @Override
-        public void paintComponent(Graphics g) {
-            super.paintComponent(g);
-            // starting position in document
-            int start = textEditor.viewToModel(getViewport().getViewPosition());
-            // end position in document
-            int end = textEditor.viewToModel(new Point(10,
-                    getViewport().getViewPosition().y +
-                            (int) textEditor.getVisibleRect().getHeight())
-            );
-
-            // translate offsets to lines
-            Document doc = textEditor.getDocument();
-            int startline = doc.getDefaultRootElement().getElementIndex(start) + 1;
-            int endline = doc.getDefaultRootElement().getElementIndex(end) + 1;
-            Font f = textEditor.getFont();
-            int fontHeight = g.getFontMetrics(f).getHeight();
-            int fontDesc = g.getFontMetrics(f).getDescent();
-            int startingY = -1;
-
-            try {
-                startingY = textEditor.modelToView(start).y + fontHeight - fontDesc;
-            } catch (BadLocationException e1) {
-                System.err.println(e1.getMessage());
-            }
-            g.setFont(f);
-            for (int line = startline, y = startingY; line <= endline; y += fontHeight, line++) {
-                String lineNumber = StringGroovyMethods.padLeft((CharSequence)Integer.toString(line), 4, " ");
-                g.drawString(lineNumber, 0, y);
-            }
-        }
-    }
-
-    private String defaultFamily = "Monospaced";
-
-    private static final PrinterJob PRINTER_JOB = PrinterJob.getPrinterJob();
-
-    private LineNumbersPanel numbersPanel = new LineNumbersPanel();
-
-    private boolean documentChangedSinceLastRepaint = false;
-
-    private TextEditor textEditor = new TextEditor(true, true, true) {
-
-        public void paintComponent(Graphics g) {
-            super.paintComponent(g);
-
-            // only repaint the line numbers in the gutter when the document has changed
-            // in case lines (hence line numbers) have been added or removed from the document
-            if (documentChangedSinceLastRepaint) {
-                numbersPanel.repaint();
-                documentChangedSinceLastRepaint = false;
-            }
-        }
-    };
-
-    private UndoAction undoAction = new UndoAction();
-    private RedoAction redoAction = new RedoAction();
-    private PrintAction printAction = new PrintAction();
-
-    private boolean editable = true;
-
-    private TextUndoManager undoManager;
-
-    /**
-     * Creates a new instance of ConsoleTextEditor
-     */
-    public ConsoleTextEditor() {
-        textEditor.setFont(new Font(defaultFamily, Font.PLAIN,
-		        Preferences.userNodeForPackage(Console.class).getInt("fontSize", 12)));
-
-        setViewportView(new JPanel(new BorderLayout()) {{
-            add(numbersPanel, BorderLayout.WEST);
-            add(textEditor, BorderLayout.CENTER);
-        }});
-
-        textEditor.setDragEnabled(editable);
-
-        getVerticalScrollBar().setUnitIncrement(10);
-
-        initActions();
-
-        DefaultStyledDocument doc = new DefaultStyledDocument();
-        doc.setDocumentFilter(new GroovyFilter(doc));
-        textEditor.setDocument(doc);
-
-        // add a document listener, to hint whether the line number gutter has to be repainted
-        // when the number of lines changes
-        doc.addDocumentListener(new DocumentListener() {
-            public void insertUpdate(DocumentEvent documentEvent) {
-                documentChangedSinceLastRepaint = true;
-            }
-
-            public void removeUpdate(DocumentEvent documentEvent) {
-                documentChangedSinceLastRepaint = true;
-            }
-
-            public void changedUpdate(DocumentEvent documentEvent) {
-                documentChangedSinceLastRepaint = true;
-                int width = 3 * Preferences.userNodeForPackage(Console.class).getInt("fontSize", 12);
-                numbersPanel.setPreferredSize(new Dimension(width, width));
-            }
-        });
-
-        // create and add the undo/redo manager
-        this.undoManager = new TextUndoManager();
-        doc.addUndoableEditListener(undoManager);
-
-        // add the undo actions
-        undoManager.addPropertyChangeListener(undoAction);
-        undoManager.addPropertyChangeListener(redoAction);
-
-        doc.addDocumentListener(undoAction);
-        doc.addDocumentListener(redoAction);
-
-        InputMap im = textEditor.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
-        KeyStroke ks = KeyStroke.getKeyStroke(KeyEvent.VK_Z, InputEvent.CTRL_MASK, false);
-        im.put(ks, StructuredSyntaxResources.UNDO);
-        ActionMap am = textEditor.getActionMap();
-        am.put(StructuredSyntaxResources.UNDO, undoAction);
-
-        ks = KeyStroke.getKeyStroke(KeyEvent.VK_Y, InputEvent.CTRL_MASK, false);
-        im.put(ks, StructuredSyntaxResources.REDO);
-        am.put(StructuredSyntaxResources.REDO, redoAction);
-
-        ks = KeyStroke.getKeyStroke(KeyEvent.VK_P, InputEvent.CTRL_MASK, false);
-        im.put(ks, StructuredSyntaxResources.PRINT);
-        am.put(StructuredSyntaxResources.PRINT, printAction);
-    }
-
-    public void setShowLineNumbers(boolean showLineNumbers) {
-        if (showLineNumbers) {
-            setViewportView(new JPanel(new BorderLayout()) {{
-                add(numbersPanel, BorderLayout.WEST);
-                add(textEditor, BorderLayout.CENTER);
-            }});
-        } else {
-            setViewportView(textEditor);
-        }
-    }
-
-    public void setEditable(boolean editable) {
-        textEditor.setEditable(editable); 
-    }
-
-    public boolean clipBoardAvailable() {
-        Transferable t = StructuredSyntaxResources.SYSTEM_CLIPBOARD.getContents(this);
-        return t.isDataFlavorSupported(DataFlavor.stringFlavor);
-    }
-
-    public TextEditor getTextEditor() {
-        return textEditor;
-    }
-
-    protected void initActions() {
-        ActionMap map = getActionMap();
-
-        PrintAction printAction = new PrintAction();
-        map.put(StructuredSyntaxResources.PRINT, printAction);
-    }
-
-    private class PrintAction extends AbstractAction {
-
-        public PrintAction() {
-            setEnabled(true);
-        }
-
-        public void actionPerformed(ActionEvent ae) {
-            PRINTER_JOB.setPageable(textEditor);
-
-            try {
-                if (PRINTER_JOB.printDialog()) {
-                    PRINTER_JOB.print();
-                }
-            }
-            catch (Exception e) {
-                e.printStackTrace();
-            }
-        }
-    } // end ConsoleTextEditor.PrintAction
-
-    private class RedoAction extends UpdateCaretListener implements PropertyChangeListener {
-
-        public RedoAction() {
-            setEnabled(false);
-        }
-
-        public void actionPerformed(ActionEvent ae) {
-            undoManager.redo();
-            setEnabled(undoManager.canRedo());
-            undoAction.setEnabled(undoManager.canUndo());
-            super.actionPerformed(ae);
-        }
-
-        public void propertyChange(PropertyChangeEvent pce) {
-            setEnabled(undoManager.canRedo());
-        }
-    } // end ConsoleTextEditor.RedoAction
-
-    private abstract class UpdateCaretListener extends AbstractAction implements DocumentListener {
-
-        protected int lastUpdate;
-
-        public void changedUpdate(DocumentEvent de) {
-        }
-
-        public void insertUpdate(DocumentEvent de) {
-            lastUpdate = de.getOffset() + de.getLength();
-        }
-
-        public void removeUpdate(DocumentEvent de) {
-            lastUpdate = de.getOffset();
-        }
-
-        public void actionPerformed(ActionEvent ae) {
-            textEditor.setCaretPosition(lastUpdate);
-        }
-    }
-
-    private class UndoAction extends UpdateCaretListener implements PropertyChangeListener {
-
-        public UndoAction() {
-            setEnabled(false);
-        }
-
-        public void actionPerformed(ActionEvent ae) {
-            undoManager.undo();
-            setEnabled(undoManager.canUndo());
-            redoAction.setEnabled(undoManager.canRedo());
-            super.actionPerformed(ae);
-        }
-
-        public void propertyChange(PropertyChangeEvent pce) {
-            setEnabled(undoManager.canUndo());
-        }
-    }
-
-    public Action getUndoAction() {
-        return undoAction;
-    }
-
-    public Action getRedoAction() {
-        return redoAction;
-    }
-
-    public Action getPrintAction() {
-        return printAction;
-    }
-
-    public void enableHighLighter(Class clazz) {
-        DefaultStyledDocument doc = (DefaultStyledDocument) textEditor.getDocument();
-
-        try {
-            DocumentFilter documentFilter = (DocumentFilter) clazz.getConstructor(doc.getClass()).newInstance(doc);
-            doc.setDocumentFilter(documentFilter);
-
-            disableMatchingHighlighter();
-            if (documentFilter instanceof SmartDocumentFilter) {
-                final SmartDocumentFilter smartDocumentFilter = (SmartDocumentFilter) documentFilter;
-                enableMatchingHighlighter(smartDocumentFilter);
-            }
-        } catch (ReflectiveOperationException e) {
-            e.printStackTrace();
-        }
-    }
-
-    private void enableMatchingHighlighter(SmartDocumentFilter smartDocumentFilter) {
-        textEditor.addCaretListener(new MatchingHighlighter(smartDocumentFilter, textEditor));
-    }
-
-    private void disableMatchingHighlighter() {
-        for (CaretListener cl : textEditor.getCaretListeners()) {
-            if (cl instanceof MatchingHighlighter) {
-                textEditor.removeCaretListener(cl);
-            }
-        }
-    }
-}
diff --git a/subprojects/groovy-console/src/main/groovy/groovy/ui/ConsoleView.groovy b/subprojects/groovy-console/src/main/groovy/groovy/ui/ConsoleView.groovy
deleted file mode 100644
index b70cf00..0000000
--- a/subprojects/groovy-console/src/main/groovy/groovy/ui/ConsoleView.groovy
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package groovy.ui
-
-import groovy.ui.view.Defaults
-import groovy.ui.view.GTKDefaults
-import groovy.ui.view.MacOSXDefaults
-import groovy.ui.view.WindowsDefaults
-
-import javax.swing.*
-import javax.swing.event.DocumentListener
-import javax.swing.text.DefaultEditorKit
-import java.awt.datatransfer.DataFlavor
-import java.awt.dnd.DnDConstants
-import java.awt.dnd.DropTarget
-import java.awt.dnd.DropTargetDragEvent
-import java.awt.dnd.DropTargetDropEvent
-import java.awt.dnd.DropTargetEvent
-import java.awt.dnd.DropTargetListener
-
-switch (UIManager.getSystemLookAndFeelClassName()) {
-    case 'com.sun.java.swing.plaf.windows.WindowsLookAndFeel':
-    case 'com.sun.java.swing.plaf.windows.WindowsClassicLookAndFeel':
-        build(WindowsDefaults)
-        break
-
-    case 'apple.laf.AquaLookAndFeel':
-    case 'com.apple.laf.AquaLookAndFeel':
-        build(MacOSXDefaults)
-        break
-
-    case 'com.sun.java.swing.plaf.gtk.GTKLookAndFeel':
-        build(GTKDefaults)
-        break
-
-    default:
-        build(Defaults)
-        break
-}
-
-binding.rootContainerDelegate.delegate = this
-
-consoleFrame = binding['rootContainerDelegate']()
-container(consoleFrame) {
-
-    binding.menuBarDelegate.delegate = delegate
-    binding['menuBarDelegate'](menuBarClass)
-
-    build(contentPaneClass)
-
-    build(toolBarClass)
-
-    build(statusBarClass)
-}
-
-inputEditor.textEditor.componentPopupMenu = popupMenu {
-    menuItem(cutAction)
-    menuItem(copyAction)
-    menuItem(pasteAction)
-    menuItem(selectAllAction)
-    separator()
-    menuItem(undoAction)
-    menuItem(redoAction)
-    separator()
-    menuItem(runAction)
-    menuItem(runSelectionAction)
-}
-
-outputArea.componentPopupMenu = popupMenu {
-    menuItem(copyAction)
-    menuItem(selectAllAction)
-    menuItem(clearOutputAction)
-}
-
-controller.promptStyle = promptStyle
-controller.commandStyle = commandStyle
-controller.outputStyle = outputStyle
-controller.stacktraceStyle = stacktraceStyle
-controller.hyperlinkStyle = hyperlinkStyle
-controller.resultStyle = resultStyle
-
-// add the window close handler
-if (consoleFrame instanceof java.awt.Window) {
-    consoleFrame.windowClosing = controller.&exit
-}
-
-// link in references to the controller
-controller.inputEditor = inputEditor
-controller.inputArea = inputEditor.textEditor
-controller.outputArea = outputArea
-controller.outputWindow = outputWindow
-controller.statusLabel = status
-controller.frame = consoleFrame
-controller.rowNumAndColNum = rowNumAndColNum
-controller.toolbar = toolbar
-
-// link actions
-controller.saveAction = saveAction
-controller.prevHistoryAction = historyPrevAction
-controller.nextHistoryAction = historyNextAction
-controller.fullStackTracesAction = fullStackTracesAction
-controller.showToolbarAction = showToolbarAction
-controller.detachedOutputAction = detachedOutputAction
-controller.autoClearOutputAction = autoClearOutputAction
-controller.saveOnRunAction = saveOnRunAction
-controller.threadInterruptAction = threadInterruptAction
-controller.showOutputWindowAction = showOutputWindowAction
-controller.hideOutputWindowAction1 = hideOutputWindowAction1
-controller.hideOutputWindowAction2 = hideOutputWindowAction2
-controller.hideOutputWindowAction3 = hideOutputWindowAction3
-controller.hideOutputWindowAction4 = hideOutputWindowAction4
-controller.interruptAction = interruptAction
-controller.origDividerSize = origDividerSize
-controller.splitPane = splitPane
-controller.blank = blank
-controller.scrollArea = scrollArea
-controller.selectWordAction = inputArea.getActions().find {
-    DefaultEditorKit.selectWordAction.equals(it.getValue(Action.NAME))
-}
-controller.selectPreviousWordAction = inputArea.getActions().find {
-    DefaultEditorKit.selectionPreviousWordAction.equals(it.getValue(Action.NAME))
-}
-
-// some more UI linkage
-controller.outputArea.addComponentListener(controller)
-controller.inputArea.addComponentListener(controller)
-controller.outputArea.addHyperlinkListener(controller)
-controller.outputArea.addHyperlinkListener(controller)
-controller.outputArea.addFocusListener(controller)
-controller.inputArea.addCaretListener(controller)
-controller.inputArea.document.addDocumentListener({ controller.setDirty(true) } as DocumentListener)
-controller.rootElement = inputArea.document.defaultRootElement
-
-
-def dtListener =  [
-    dragEnter:{DropTargetDragEvent evt ->
-        if (evt.dropTargetContext.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
-            evt.acceptDrag(DnDConstants.ACTION_COPY)
-        } else {
-            evt.rejectDrag()
-        }
-    },
-    dragOver:{DropTargetDragEvent evt ->
-        //dragEnter(evt)
-    },
-    dropActionChanged:{DropTargetDragEvent evt ->
-        //dragEnter(evt)
-    },
-    dragExit:{DropTargetEvent evt  ->
-    },
-    drop:{DropTargetDropEvent evt  ->
-        evt.acceptDrop DnDConstants.ACTION_COPY
-        //println "Dropping! ${evt.transferable.getTransferData(DataFlavor.javaFileListFlavor)}"
-        if (controller.askToSaveFile()) {
-            controller.loadScriptFile(evt.transferable.getTransferData(DataFlavor.javaFileListFlavor)[0])
-        }
-    },
-] as DropTargetListener
-
-[consoleFrame, inputArea, outputArea].each {
-    new DropTarget(it, DnDConstants.ACTION_COPY, dtListener)
-}
-
-// don't send any return value from the view, all items should be referenced via the bindings
-return null
diff --git a/subprojects/groovy-console/src/main/groovy/groovy/ui/HistoryRecord.groovy b/subprojects/groovy-console/src/main/groovy/groovy/ui/HistoryRecord.groovy
deleted file mode 100644
index 8035ddc..0000000
--- a/subprojects/groovy-console/src/main/groovy/groovy/ui/HistoryRecord.groovy
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package groovy.ui
-
-import groovy.transform.CompileStatic
-
-@CompileStatic
-@Deprecated
-class HistoryRecord {
-    String allText
-    int selectionStart
-    int selectionEnd
-    String scriptName
-    Object result
-    Throwable exception
-
-    public String getTextToRun(boolean useSelection) {
-        if (useSelection && selectionStart != selectionEnd) {
-            // Retrieve all the imports included in the script before the current selection
-            def before = allText[0 ..< selectionStart].split("\n")
-            def importLines = before.findAll { it.trim().startsWith("import") }
-            def imports = importLines.join("\n")
-            def code = imports + "\n" + allText[selectionStart ..< selectionEnd]
-            return code
-        }
-        return allText
-    }
-
-    public Object getValue() {
-        return exception ? exception : result
-    }
-}
diff --git a/subprojects/groovy-console/src/main/groovy/groovy/ui/OutputTransforms.groovy b/subprojects/groovy-console/src/main/groovy/groovy/ui/OutputTransforms.groovy
deleted file mode 100644
index 19609c7..0000000
--- a/subprojects/groovy-console/src/main/groovy/groovy/ui/OutputTransforms.groovy
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package groovy.ui
-
-import groovy.transform.CompileStatic
-import org.codehaus.groovy.runtime.InvokerHelper
-
-import javax.swing.Icon
-import javax.swing.ImageIcon
-import javax.swing.JComponent
-import java.awt.Component
-import java.awt.Dimension
-import java.awt.Graphics2D
-import java.awt.GraphicsConfiguration
-import java.awt.GraphicsDevice
-import java.awt.GraphicsEnvironment
-import java.awt.Image
-import java.awt.Transparency
-import java.awt.Window
-import java.awt.image.BufferedImage
-
-@CompileStatic
-@Deprecated
-class OutputTransforms {
-
-    @Lazy static List<Closure> localTransforms = loadOutputTransforms()
-
-    static List<Closure> loadOutputTransforms() {
-        def transforms = []
-
-        //
-        // load user local transforms
-        //
-        def userHome = new File(System.getProperty('user.home'))
-        def groovyDir = new File(userHome, '.groovy')
-        def userTransforms = new File(groovyDir, "OutputTransforms.groovy")
-        if (userTransforms.exists()) {
-            GroovyShell shell = new GroovyShell()
-            shell.setVariable('transforms', transforms)
-            shell.evaluate(userTransforms)
-        }
-
-        //
-        // built-in transforms
-        //
-
-        // any non-window GUI components, such as  a heavyweight button or a
-        // Swing component, gets passed if it has no parent set (the parent
-        // clause is to keep buttons from disappearing from user shown forms)
-        transforms << { it -> if ((it instanceof Component) && !(it instanceof Window) && (it.parent == null)) it }
-
-        // remaining components get printed to an image
-        transforms << { it ->
-            if (it instanceof JComponent) {
-                Dimension d = it.size
-                if (d.width == 0) {
-                    d = it.preferredSize
-                    it.size = d
-                }
-
-                GraphicsEnvironment ge = GraphicsEnvironment.localGraphicsEnvironment
-                GraphicsDevice gs = ge.defaultScreenDevice
-                GraphicsConfiguration gc = gs.defaultConfiguration
-
-                BufferedImage image = gc.createCompatibleImage(d.width as int, d.height as int, Transparency.TRANSLUCENT)
-                Graphics2D g2 = image.createGraphics()
-                it.print(g2)
-                g2.dispose()
-                new ImageIcon(image)
-            }
-        }
-
-        // icons get passed, they can be rendered multiple times so no parent check
-        transforms << { it -> if (it instanceof Icon) it }
-
-        // Images become ImageIcons
-        transforms << { it -> if (it instanceof Image) new ImageIcon(it)}
-
-        // final case, non-nulls just get inspected as strings
-        transforms << { it -> if (it != null) "${InvokerHelper.inspect(it)}" }
-
-        return (List<Closure>) transforms
-    }
-
-    static transformResult(base, List<Closure> transforms = localTransforms) {
-        for (Closure c : transforms) {
-            def result = c(base as Object)
-            if (result != null)  {
-                return result
-            }
-        }
-        return base
-    }
-}
diff --git a/subprojects/groovy-console/src/main/groovy/groovy/ui/SystemOutputInterceptor.java b/subprojects/groovy-console/src/main/groovy/groovy/ui/SystemOutputInterceptor.java
deleted file mode 100644
index 1ff8efb..0000000
--- a/subprojects/groovy-console/src/main/groovy/groovy/ui/SystemOutputInterceptor.java
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package groovy.ui;
-
-import groovy.lang.Closure;
-
-import java.io.FilterOutputStream;
-import java.io.IOException;
-import java.io.PrintStream;
-
-/**
- * Intercepts System.out/System.err. Implementation helper for Console.groovy.
- */
-@Deprecated
-public class SystemOutputInterceptor extends FilterOutputStream {
-
-    private Closure callback;
-    private boolean output;
-
-    private static final ThreadLocal<Integer> consoleId = new InheritableThreadLocal<Integer>() {
-        @Override
-        protected Integer initialValue() {
-            return 0;
-        }
-    };
-
-    /**
-     * Constructor
-     *
-     * @param callback accepts the id of the target Console instance and a
-     *                 string to be sent to std out and returns a Boolean.
-     *                 If the return value is true, output will be sent to
-     *                 System.out, otherwise it will not.
-     */
-    public SystemOutputInterceptor(final Closure callback) {
-        this(callback, true);
-    }
-
-    /**
-     * Constructor
-     *
-     * @param callback accepts the id of the target Console instance and a
-     *                 string to be sent to std out and returns a Boolean.
-     *                 If the return value is true, output will be sent to
-     *                 System.out/System.err, otherwise it will not.
-     * @param output   flag that tells whether System.out needs capturing ot System.err
-     */
-    public SystemOutputInterceptor(final Closure callback, boolean output) {
-        super(output ? System.out : System.err);
-
-        assert callback != null;
-
-        this.callback = callback;
-        this.output = output;
-    }
-
-    /**
-     * Starts intercepting System.out/System.err
-     */
-    public void start() {
-        if (output) {
-            System.setOut(new PrintStream(this));
-        } else {
-            System.setErr(new PrintStream(this));
-        }
-    }
-
-    /**
-     * Stops intercepting System.out/System.err, sending output to wherever it was
-     * going when this interceptor was created.
-     */
-    public void stop() {
-        if (output) {
-            System.setOut((PrintStream) out);
-        } else {
-            System.setErr((PrintStream) out);
-        }
-    }
-
-    /**
-     * Intercepts output - more common case of byte[]
-     */
-    public void write(byte[] b, int off, int len) throws IOException {
-        Boolean result = (Boolean) callback.call(consoleId.get(), new String(b, off, len));
-        if (result) {
-            out.write(b, off, len);
-        }
-    }
-
-    /**
-     * Intercepts output - single characters
-     */
-    public void write(int b) throws IOException {
-        Boolean result = (Boolean) callback.call(consoleId.get(), String.valueOf((char) b));
-        if (result) {
-            out.write(b);
-        }
-    }
-
-    /**
-     * Threads executing a script should call this method at the start of execution
-     * in order to set the id of the console that is hosting the thread of execution.  This
-     * should be called prior to any output that is generated.  The consoleId will
-     * be passed to the callback.
-     *
-     * @param consoleId id of the Console instance executing the script
-     */
-    public void setConsoleId(int consoleId) {
-        this.consoleId.set(consoleId);
-    }
-
-    /**
-     * Threads executing a script should call this method after
-     * execution completes in order to unregister the consoleId.
-     */
-    public void removeConsoleId() {
-        this.consoleId.remove();
-    }
-}
diff --git a/subprojects/groovy-console/src/main/groovy/groovy/ui/package.html b/subprojects/groovy-console/src/main/groovy/groovy/ui/package.html
deleted file mode 100644
index ce90d36..0000000
--- a/subprojects/groovy-console/src/main/groovy/groovy/ui/package.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<!--
-
-     Licensed to the Apache Software Foundation (ASF) under one
-     or more contributor license agreements.  See the NOTICE file
-     distributed with this work for additional information
-     regarding copyright ownership.  The ASF licenses this file
-     to you under the Apache License, Version 2.0 (the
-     "License"); you may not use this file except in compliance
-     with the License.  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing,
-     software distributed under the License is distributed on an
-     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-     KIND, either express or implied.  See the License for the
-     specific language governing permissions and limitations
-     under the License.
-
--->
-<html>
-  <head>
-    <title>package groovy.ui.*</title>
-  </head>
-  <body>
-    <p>An interactive command line terminal along with a Swing console for evaluating Groovy scripts.</p>
-  </body>
-</html>
diff --git a/subprojects/groovy-console/src/main/groovy/groovy/ui/text/AutoIndentAction.groovy b/subprojects/groovy-console/src/main/groovy/groovy/ui/text/AutoIndentAction.groovy
deleted file mode 100644
index d2be1ea..0000000
--- a/subprojects/groovy-console/src/main/groovy/groovy/ui/text/AutoIndentAction.groovy
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package groovy.ui.text
-
-import groovy.transform.CompileStatic
-
-import javax.swing.*
-import javax.swing.text.AttributeSet
-import javax.swing.text.SimpleAttributeSet
-import java.awt.event.ActionEvent
-
-@CompileStatic
-@Deprecated
-class AutoIndentAction extends AbstractAction {
-    AttributeSet simpleAttributeSet = new SimpleAttributeSet()
-
-    void actionPerformed(ActionEvent evt) {
-        JTextPane inputArea = (JTextPane) evt.source
-        def rootElement = inputArea.document.defaultRootElement
-        def cursorPos = inputArea.getCaretPosition()
-        int rowNum = rootElement.getElementIndex(cursorPos)
-        def rowElement = rootElement.getElement(rowNum)
-        int startOffset = rowElement.getStartOffset()
-        int endOffset = rowElement.getEndOffset()
-        String rowContent = inputArea.document.getText(startOffset, endOffset - startOffset);
-        String contentBeforeCursor = inputArea.document.getText(startOffset, cursorPos - startOffset);
-        String whitespaceStr = ''
-        def matcher = (rowContent =~ /(?m)^(\s*).*\n$/)
-        matcher.each { all, ws ->
-            whitespaceStr = ws
-        }
-
-        if (contentBeforeCursor ==~ /(\s)*/) {
-            whitespaceStr = contentBeforeCursor
-        }
-
-        inputArea.document.insertString(cursorPos, '\n' + whitespaceStr, simpleAttributeSet)
-    }
-}
diff --git a/subprojects/groovy-console/src/main/groovy/groovy/ui/text/FindReplaceUtility.java b/subprojects/groovy-console/src/main/groovy/groovy/ui/text/FindReplaceUtility.java
deleted file mode 100644
index 574934d..0000000
--- a/subprojects/groovy-console/src/main/groovy/groovy/ui/text/FindReplaceUtility.java
+++ /dev/null
@@ -1,544 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package groovy.ui.text;
-
-import javax.swing.*;
-import javax.swing.event.EventListenerList;
-import javax.swing.text.AttributeSet;
-import javax.swing.text.BadLocationException;
-import javax.swing.text.Document;
-import javax.swing.text.JTextComponent;
-import javax.swing.text.Segment;
-import java.awt.*;
-import java.awt.event.ActionEvent;
-import java.awt.event.FocusAdapter;
-import java.awt.event.FocusEvent;
-import java.awt.event.KeyAdapter;
-import java.awt.event.KeyEvent;
-import java.awt.event.TextEvent;
-import java.awt.event.TextListener;
-import java.util.EventListener;
-
-@Deprecated
-public final class FindReplaceUtility {
-
-    public static final String FIND_ACTION_COMMAND = "Find";
-
-    public static final String REPLACE_ACTION_COMMAND = "Replace";
-
-    public static final String REPLACE_ALL_ACTION_COMMAND = "Replace All";
-
-    public static final String CLOSE_ACTION_COMMAND = "Close";
-
-    public static final Action FIND_ACTION = new FindAction();
-
-    private static final JDialog FIND_REPLACE_DIALOG = new JDialog();
-
-    private static final JPanel TEXT_FIELD_PANEL = new JPanel(new GridLayout(2, 1));
-
-    private static final JPanel ENTRY_PANEL = new JPanel();
-
-    private static final JPanel FIND_PANEL = new JPanel();
-    private static final JLabel FIND_LABEL = new JLabel("Find What:    ");
-    private static final JComboBox FIND_FIELD = new JComboBox();
-
-    private static final JPanel REPLACE_PANEL = new JPanel();
-    private static final JLabel REPLACE_LABEL = new JLabel("Replace With:");
-    private static final JComboBox REPLACE_FIELD = new JComboBox();
-
-    private static final JPanel BUTTON_PANEL = new JPanel();
-    private static final JButton FIND_BUTTON = new JButton();
-    private static final JButton REPLACE_BUTTON = new JButton();
-    private static final JButton REPLACE_ALL_BUTTON = new JButton();
-    private static final JButton CLOSE_BUTTON = new JButton();
-
-    private static final Action CLOSE_ACTION = new CloseAction();
-    private static final Action REPLACE_ACTION = new ReplaceAction();
-
-    private static final JPanel CHECK_BOX_PANEL = new JPanel(new GridLayout(3, 1));
-    private static final JCheckBox MATCH_CASE_CHECKBOX = new JCheckBox("Match Case      ");
-    private static final JCheckBox IS_BACKWARDS_CHECKBOX = new JCheckBox("Search Backwards");
-    private static final JCheckBox WRAP_SEARCH_CHECKBOX = new JCheckBox("Wrap Search     ");
-
-    private static JTextComponent textComponent;
-    private static AttributeSet attributeSet;
-
-    private static int findReplaceCount;
-    private static String lastAction;
-
-    private static final EventListenerList EVENT_LISTENER_LIST = new EventListenerList();
-
-    // the document segment
-    private static final Segment SEGMENT = new Segment();
-
-    private static final FocusAdapter TEXT_FOCUS_LISTENER = new FocusAdapter() {
-        public void focusGained(FocusEvent fe) {
-            textComponent = (JTextComponent) fe.getSource();
-            attributeSet =
-                    textComponent.getDocument().getDefaultRootElement().getAttributes();
-        }
-    };
-
-    static {
-        FIND_REPLACE_DIALOG.setResizable(false);
-        FIND_REPLACE_DIALOG.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
-        // is next line needed at all?
-        /* KeyStroke keyStroke = */
-        KeyStroke.getKeyStroke("enter");
-        KeyAdapter keyAdapter = new KeyAdapter() {
-            public void keyTyped(KeyEvent ke) {
-                if (ke.getKeyChar() == KeyEvent.VK_ENTER) {
-                    FIND_BUTTON.doClick();
-                }
-            }
-        };
-        FIND_PANEL.setLayout(new FlowLayout(FlowLayout.RIGHT));
-        FIND_PANEL.add(FIND_LABEL);
-        FIND_PANEL.add(FIND_FIELD);
-        FIND_FIELD.addItem("");
-        FIND_FIELD.setEditable(true);
-        FIND_FIELD.getEditor().getEditorComponent().addKeyListener(keyAdapter);
-        Dimension d = FIND_FIELD.getPreferredSize();
-        d.width = 225;
-        FIND_FIELD.setPreferredSize(d);
-
-        REPLACE_PANEL.add(REPLACE_LABEL);
-        REPLACE_PANEL.add(REPLACE_FIELD);
-        REPLACE_FIELD.setEditable(true);
-        REPLACE_FIELD.getEditor().getEditorComponent().addKeyListener(keyAdapter);
-        REPLACE_FIELD.setPreferredSize(d);
-
-        TEXT_FIELD_PANEL.setLayout(new BoxLayout(TEXT_FIELD_PANEL, BoxLayout.Y_AXIS));
-        TEXT_FIELD_PANEL.add(FIND_PANEL);
-        TEXT_FIELD_PANEL.add(REPLACE_PANEL);
-
-        ENTRY_PANEL.add(TEXT_FIELD_PANEL);
-        FIND_REPLACE_DIALOG.getContentPane().add(ENTRY_PANEL, BorderLayout.WEST);
-
-        CHECK_BOX_PANEL.add(MATCH_CASE_CHECKBOX);
-
-        CHECK_BOX_PANEL.add(IS_BACKWARDS_CHECKBOX);
-
-        CHECK_BOX_PANEL.add(WRAP_SEARCH_CHECKBOX);
-
-        ENTRY_PANEL.add(CHECK_BOX_PANEL);
-        ENTRY_PANEL.setLayout(new BoxLayout(ENTRY_PANEL, BoxLayout.Y_AXIS));
-
-        REPLACE_ALL_BUTTON.setAction(new ReplaceAllAction());
-        REPLACE_ALL_BUTTON.setHorizontalAlignment(JButton.CENTER);
-        d = REPLACE_ALL_BUTTON.getPreferredSize();
-
-        BUTTON_PANEL.setLayout(new BoxLayout(BUTTON_PANEL, BoxLayout.Y_AXIS));
-        FIND_BUTTON.setAction(FIND_ACTION);
-        FIND_BUTTON.setPreferredSize(d);
-        FIND_BUTTON.setHorizontalAlignment(JButton.CENTER);
-        JPanel panel = new JPanel();
-        panel.add(FIND_BUTTON);
-        BUTTON_PANEL.add(panel);
-        FIND_REPLACE_DIALOG.getRootPane().setDefaultButton(FIND_BUTTON);
-
-        REPLACE_BUTTON.setAction(REPLACE_ACTION);
-        REPLACE_BUTTON.setPreferredSize(d);
-        REPLACE_BUTTON.setHorizontalAlignment(JButton.CENTER);
-        panel = new JPanel();
-        panel.add(REPLACE_BUTTON);
-        BUTTON_PANEL.add(panel);
-
-        panel = new JPanel();
-        panel.add(REPLACE_ALL_BUTTON);
-        BUTTON_PANEL.add(panel);
-
-        CLOSE_BUTTON.setAction(CLOSE_ACTION);
-        CLOSE_BUTTON.setPreferredSize(d);
-        CLOSE_BUTTON.setHorizontalAlignment(JButton.CENTER);
-        panel = new JPanel();
-        panel.add(CLOSE_BUTTON);
-        BUTTON_PANEL.add(panel);
-        FIND_REPLACE_DIALOG.getContentPane().add(BUTTON_PANEL);
-
-        KeyStroke stroke = (KeyStroke) CLOSE_ACTION.getValue(Action.ACCELERATOR_KEY);
-        JRootPane rPane = FIND_REPLACE_DIALOG.getRootPane();
-        rPane.getInputMap(JButton.WHEN_IN_FOCUSED_WINDOW).put(stroke, "exit");
-        rPane.getActionMap().put("exit", CLOSE_ACTION);
-    }
-
-    // Singleton
-
-    private FindReplaceUtility() {
-    }
-
-    public static void addTextListener(TextListener tl) {
-        EVENT_LISTENER_LIST.add(TextListener.class, tl);
-    }
-
-    private static void fireTextEvent() {
-        EventListener[] lstrs =
-                EVENT_LISTENER_LIST.getListeners(TextListener.class);
-        if (lstrs != null && lstrs.length > 0) {
-            TextEvent te =
-                    new TextEvent(FIND_REPLACE_DIALOG, TextEvent.TEXT_VALUE_CHANGED);
-            for (int i = 0; i < lstrs.length; i++) {
-                ((TextListener) lstrs[i]).textValueChanged(te);
-            }
-        }
-    }
-
-    /**
-     * @return the last action
-     */
-    public static String getLastAction() {
-        return lastAction;
-    }
-
-    /**
-     * @return the replacement count
-     */
-    public static int getReplacementCount() {
-        return findReplaceCount;
-    }
-
-    /**
-     * @return the search text
-     */
-    public static String getSearchText() {
-        return (String) FIND_FIELD.getSelectedItem();
-    }
-
-    /**
-     * @param textComponent the text component to listen to
-     */
-    public static void registerTextComponent(JTextComponent textComponent) {
-        textComponent.addFocusListener(TEXT_FOCUS_LISTENER);
-    }
-
-    public static void removeTextListener(TextListener tl) {
-        EVENT_LISTENER_LIST.remove(TextListener.class, tl);
-    }
-
-    /**
-     * Find and select the next searchable matching text.
-     *
-     * @param reverse look forwards or backwards
-     * @param pos     the starting index to start finding from
-     * @return the location of the next selected, or -1 if not found
-     */
-    private static int findNext(boolean reverse, int pos) {
-        boolean backwards = IS_BACKWARDS_CHECKBOX.isSelected();
-        backwards = backwards ? !reverse : reverse;
-
-        String pattern = (String) FIND_FIELD.getSelectedItem();
-        if (pattern != null && pattern.length() > 0) {
-            try {
-                Document doc = textComponent.getDocument();
-                doc.getText(0, doc.getLength(), SEGMENT);
-            }
-            catch (Exception e) {
-                // should NEVER reach here
-                e.printStackTrace();
-            }
-
-            pos += textComponent.getSelectedText() == null ?
-                    (backwards ? -1 : 1) : 0;
-
-            char first = backwards ?
-                    pattern.charAt(pattern.length() - 1) : pattern.charAt(0);
-            char oppFirst = Character.isUpperCase(first) ?
-                    Character.toLowerCase(first) : Character.toUpperCase(first);
-            int start = pos;
-            boolean wrapped = WRAP_SEARCH_CHECKBOX.isSelected();
-            int end = backwards ? 0 : SEGMENT.getEndIndex();
-            pos += backwards ? -1 : 1;
-
-            int length = textComponent.getDocument().getLength();
-            if (pos > length) {
-                pos = wrapped ? 0 : length;
-            }
-
-            boolean found = false;
-            while (!found && (backwards ? pos > end : pos < end)) {
-                found = !MATCH_CASE_CHECKBOX.isSelected() && SEGMENT.array[pos] == oppFirst;
-                found = found ? found : SEGMENT.array[pos] == first;
-
-                if (found) {
-                    pos += backwards ? -(pattern.length() - 1) : 0;
-                    for (int i = 0; found && i < pattern.length(); i++) {
-                        char c = pattern.charAt(i);
-                        found = SEGMENT.array[pos + i] == c;
-                        if (!MATCH_CASE_CHECKBOX.isSelected() && !found) {
-                            c = Character.isUpperCase(c) ?
-                                    Character.toLowerCase(c) :
-                                    Character.toUpperCase(c);
-                            found = SEGMENT.array[pos + i] == c;
-                        }
-                    }
-                }
-
-                if (!found) {
-                    pos += backwards ? -1 : 1;
-
-                    if (pos == end && wrapped) {
-                        pos = backwards ? SEGMENT.getEndIndex() : 0;
-                        end = start;
-                        wrapped = false;
-                    }
-                }
-            }
-            pos = found ? pos : -1;
-        }
-
-        return pos;
-    }
-
-    private static void setListStrings() {
-        Object findObject = FIND_FIELD.getSelectedItem();
-        Object replaceObject = REPLACE_FIELD.isShowing() ?
-                (String) REPLACE_FIELD.getSelectedItem() : "";
-
-        if (findObject != null && replaceObject != null) {
-            boolean found = false;
-            for (int i = 0; !found && i < FIND_FIELD.getItemCount(); i++) {
-                found = FIND_FIELD.getItemAt(i).equals(findObject);
-            }
-            if (!found) {
-                FIND_FIELD.insertItemAt(findObject, 0);
-                if (FIND_FIELD.getItemCount() > 7) {
-                    FIND_FIELD.removeItemAt(7);
-                }
-            }
-
-            if (REPLACE_FIELD.isShowing()) {
-                found = false;
-                for (int i = 0; !found && i < REPLACE_FIELD.getItemCount(); i++) {
-                    found = REPLACE_FIELD.getItemAt(i).equals(findObject);
-                }
-                if (!found) {
-                    REPLACE_FIELD.insertItemAt(replaceObject, 0);
-                    if (REPLACE_FIELD.getItemCount() > 7) {
-                        REPLACE_FIELD.removeItemAt(7);
-                    }
-                }
-            }
-        }
-
-    }
-
-    public static void showDialog() {
-        showDialog(false);
-    }
-
-    /**
-     * @param isReplace show a replace dialog rather than a find dialog if true
-     */
-    public static void showDialog(boolean isReplace) {
-        String title = isReplace ? REPLACE_ACTION_COMMAND : FIND_ACTION_COMMAND;
-        FIND_REPLACE_DIALOG.setTitle(title);
-
-        String text = textComponent.getSelectedText();
-        if (text == null) {
-            text = "";
-        }
-        FIND_FIELD.getEditor().setItem(text);
-        FIND_FIELD.getEditor().selectAll();
-
-        REPLACE_PANEL.setVisible(isReplace);
-        REPLACE_ALL_BUTTON.setVisible(isReplace);
-        CLOSE_BUTTON.setVisible(isReplace);
-
-        Action action = isReplace ?
-                REPLACE_ACTION : CLOSE_ACTION;
-        REPLACE_BUTTON.setAction(action);
-
-        REPLACE_BUTTON.setPreferredSize(null);
-        Dimension d = isReplace ?
-                REPLACE_ALL_BUTTON.getPreferredSize() :
-                REPLACE_BUTTON.getPreferredSize();
-        FIND_BUTTON.setPreferredSize(d);
-        REPLACE_BUTTON.setPreferredSize(d);
-        CLOSE_BUTTON.setPreferredSize(d);
-
-        FIND_REPLACE_DIALOG.invalidate();
-        FIND_REPLACE_DIALOG.repaint();
-        FIND_REPLACE_DIALOG.pack();
-
-        java.awt.Frame[] frames = java.awt.Frame.getFrames();
-        for (int i = 0; i < frames.length; i++) {
-            if (frames[i].isFocused()) {
-                FIND_REPLACE_DIALOG.setLocationRelativeTo(frames[i]);
-            }
-        }
-
-        FIND_REPLACE_DIALOG.setVisible(true);
-        FIND_FIELD.requestFocusInWindow();
-    }
-
-    /**
-     * @param textComponent the text component to stop listening to
-     */
-    public static void unregisterTextComponent(JTextComponent textComponent) {
-        textComponent.removeFocusListener(TEXT_FOCUS_LISTENER);
-    }
-
-    private static class FindAction extends AbstractAction {
-
-        public FindAction() {
-            putValue(Action.NAME, FIND_ACTION_COMMAND);
-            putValue(Action.ACTION_COMMAND_KEY, FIND_ACTION_COMMAND);
-            putValue(Action.MNEMONIC_KEY, KeyEvent.VK_F);
-        }
-
-        public void actionPerformed(ActionEvent ae) {
-            lastAction = FIND_ACTION_COMMAND;
-            findReplaceCount = 0;
-
-            if (FIND_REPLACE_DIALOG.isVisible() &&
-                    FIND_REPLACE_DIALOG.getTitle().equals(FIND_ACTION_COMMAND)) {
-            }
-
-            int pos = textComponent.getSelectedText() == null ?
-                    textComponent.getCaretPosition() :
-                    textComponent.getSelectionStart();
-
-            boolean reverse = (ae.getModifiers() & ActionEvent.SHIFT_MASK) != 0;
-            pos = findNext(reverse, pos);
-
-            if (pos > -1) {
-                String pattern = (String) FIND_FIELD.getSelectedItem();
-                textComponent.select(pos, pos + pattern.length());
-                findReplaceCount = 1;
-            }
-
-            setListStrings();
-
-            fireTextEvent();
-        }
-    }
-
-    private static class ReplaceAction extends AbstractAction {
-
-        public ReplaceAction() {
-            putValue(Action.NAME, REPLACE_ACTION_COMMAND);
-            putValue(Action.ACTION_COMMAND_KEY, REPLACE_ACTION_COMMAND);
-            putValue(Action.MNEMONIC_KEY, KeyEvent.VK_R);
-        }
-
-        public void actionPerformed(ActionEvent ae) {
-            lastAction = ae.getActionCommand();
-            findReplaceCount = 0;
-
-            int pos = textComponent.getSelectedText() == null ?
-                    textComponent.getCaretPosition() :
-                    textComponent.getSelectionStart();
-
-            pos = findNext(false, pos - 1);
-
-            if (pos > -1) {
-                String find = (String) FIND_FIELD.getSelectedItem();
-                String replace = (String) REPLACE_FIELD.getSelectedItem();
-                replace = replace == null ? "" : replace;
-                Document doc = textComponent.getDocument();
-                try {
-                    doc.remove(pos, find.length());
-                    doc.insertString(pos, replace, attributeSet);
-
-                    int last = pos;
-                    pos = findNext(false, pos);
-                    if (pos > -1) {
-                        textComponent.select(pos, pos + find.length());
-                    } else {
-                        textComponent.setCaretPosition(last + replace.length());
-                    }
-                }
-                catch (BadLocationException ble) {
-                    ble.printStackTrace();
-                }
-
-                findReplaceCount = 1;
-            }
-            setListStrings();
-
-            fireTextEvent();
-        }
-    }
-
-    private static class ReplaceAllAction extends AbstractAction {
-
-        public ReplaceAllAction() {
-            putValue(Action.NAME, REPLACE_ALL_ACTION_COMMAND);
-            putValue(Action.ACTION_COMMAND_KEY, REPLACE_ALL_ACTION_COMMAND);
-            putValue(Action.MNEMONIC_KEY, KeyEvent.VK_A);
-        }
-
-        public void actionPerformed(ActionEvent ae) {
-            lastAction = ae.getActionCommand();
-            findReplaceCount = 0;
-
-            int last = textComponent.getSelectedText() == null ?
-                    textComponent.getCaretPosition() :
-                    textComponent.getSelectionStart();
-
-            int pos = findNext(false, last - 1);
-
-            String find = (String) FIND_FIELD.getSelectedItem();
-            String replace = (String) REPLACE_FIELD.getSelectedItem();
-            replace = replace == null ? "" : replace;
-            while (pos > -1) {
-                Document doc = textComponent.getDocument();
-                try {
-                    doc.remove(pos, find.length());
-                    doc.insertString(pos, replace, attributeSet);
-
-                    last = pos;
-                    pos = findNext(false, pos);
-                }
-                catch (BadLocationException ble) {
-                    ble.printStackTrace();
-                }
-
-                findReplaceCount++;
-            }
-
-            if (pos > -1) {
-                textComponent.select(pos, pos + find.length());
-            } else {
-                textComponent.setCaretPosition(last + replace.length());
-            }
-            setListStrings();
-
-            fireTextEvent();
-        }
-    }
-
-    private static class CloseAction extends AbstractAction {
-
-        public CloseAction() {
-            putValue(Action.NAME, CLOSE_ACTION_COMMAND);
-            putValue(Action.ACTION_COMMAND_KEY, CLOSE_ACTION_COMMAND);
-            putValue(Action.MNEMONIC_KEY, KeyEvent.VK_C);
-            putValue(Action.ACCELERATOR_KEY, KeyStroke.getKeyStroke("ESCAPE"));
-        }
-
-        public void actionPerformed(ActionEvent ae) {
-            FIND_REPLACE_DIALOG.dispose();
-        }
-    }
-
-    public static void dispose() {
-        FIND_REPLACE_DIALOG.dispose();
-    }
-}
diff --git a/subprojects/groovy-console/src/main/groovy/groovy/ui/text/GroovyFilter.java b/subprojects/groovy-console/src/main/groovy/groovy/ui/text/GroovyFilter.java
deleted file mode 100644
index 85a1e69..0000000
--- a/subprojects/groovy-console/src/main/groovy/groovy/ui/text/GroovyFilter.java
+++ /dev/null
@@ -1,271 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package groovy.ui.text;
-
-import javax.swing.*;
-import javax.swing.text.BadLocationException;
-import javax.swing.text.DefaultStyledDocument;
-import javax.swing.text.Element;
-import javax.swing.text.JTextComponent;
-import javax.swing.text.Segment;
-import javax.swing.text.Style;
-import javax.swing.text.StyleConstants;
-import javax.swing.text.StyleContext;
-import javax.swing.text.StyledDocument;
-import java.awt.*;
-import java.awt.event.ActionEvent;
-import java.awt.event.KeyEvent;
-
-@Deprecated
-public class GroovyFilter extends StructuredSyntaxDocumentFilter {
-
-    // java tab policy action
-    private static final Action AUTO_TAB_ACTION = new AutoTabAction();
-
-    // Style names
-    public static final String COMMENT = "comment";
-    public static final String SLASH_STAR_COMMENT = "/\\*(?s:.)*?(?:\\*/|\\z)";
-    public static final String SLASH_SLASH_COMMENT = "//.*";
-
-    public static final String QUOTES =
-            "(?ms:\"{3}.*?(?:\"{3}|\\z))|(?:\"{1}.*?(?:\"|\\Z))";
-
-    public static final String SINGLE_QUOTES =
-            "(?ms:'{3}(?!'{1,3}).*?(?:'{3}|\\z))|(?:'{1}.*?(?:'|\\z))";
-
-    public static final String SLASHY_QUOTES = "(?:/[^/*].*?(?<!\\\\)/|(?ms:\\$/.*?(?:/\\$|\\z)))";
-
-    public static final String DIGIT = "DIGIT";
-    public static final String DECIMAL_INTEGER_LITERAL = "(?:0|[1-9](?:[_0-9]*[0-9])?)[lL]?";
-    public static final String HEX_INTEGER_LITERAL = "0[xX][0-9a-fA-F](?:[0-9a-fA-F_]*[0-9a-fA-F])?";
-    public static final String OCTAL_INTEGER_LITERAL = "0[0-7](?:[_0-7]*[0-7])?";
-    public static final String BINARY_INTEGER_LITERAL = "0[bB][01](?:[_01]*[01])?";
-    public static final String DECIMAL_FLOATING_POINT_LITERAL = "(?:0|[1-9](?:[_0-9]*[0-9])?)?\\.?[0-9](?:[_0-9]*[0-9])?(?:[eE][+-]?[0-9]+(?:[_0-9]*[0-9])?)?[fFdD]?";
-    public static final String HEXADECIMAL_FLOATING_POINT_LITERAL = "0[xX](?:[0-9a-fA-F](?:[0-9a-fA-F_]*[0-9a-fA-F])?)?\\.?(?:[0-9a-fA-F_]*[0-9a-fA-F])?(?:[pP][+-]?[0-9]+(?:[_0-9]*[0-9])?)?[fFdD]?";
-
-    public static final String IDENT = "[\\w\\$&&[\\D]][\\w\\$]*";
-    public static final String OPERATION = "[\\w\\$&&[\\D]][\\w\\$]* *\\(";
-    public static final String LEFT_PARENS = "\\(";
-
-    private static final Color COMMENT_COLOR =
-            Color.LIGHT_GRAY.darker().darker();
-
-
-    public static final String RESERVED_WORD = "reserved";
-    public static final String[] RESERVED_WORDS = {"\\babstract\\b",
-            "\\bassert\\b",
-            "\\bdefault\\b",
-            "\\bif\\b",
-            "\\bprivate\\b",
-            "\\bthis\\b",
-            "\\bboolean\\b",
-            "\\bdo\\b",
-            "\\bimplements\\b",
-            "\\bprotected\\b",
-            "\\bthrow\\b",
-            "\\bbreak\\b",
-            "\\bdouble\\b",
-            "\\bimport\\b",
-            "\\bpublic\\b",
-            "\\bthrows\\b",
-            "\\bbyte\\b",
-            "\\belse\\b",
-            "\\binstanceof\\b",
-            "\\breturn\\b",
-            "\\btransient\\b",
-            "\\bcase\\b",
-            "\\bextends\\b",
-            "\\bint\\b",
-            "\\bshort\\b",
-            "\\btry\\b",
-            "\\bcatch\\b",
-            "\\bfinal\\b",
-            "\\binterface\\b",
-            "\\benum\\b",
-            "\\bstatic\\b",
-            "\\bvoid\\b",
-            "\\bchar\\b",
-            "\\bfinally\\b",
-            "\\blong\\b",
-            "\\bstrictfp\\b",
-            "\\bvolatile\\b",
-            "\\bclass\\b",
-            "\\bfloat\\b",
-            "\\bnative\\b",
-            "\\bsuper\\b",
-            "\\bwhile\\b",
-            "\\bconst\\b",
-            "\\bfor\\b",
-            "\\bnew\\b",
-            "\\bswitch\\b",
-            "\\bcontinue\\b",
-            "\\bgoto\\b",
-            "\\bpackage\\b",
-            "\\bdef\\b",
-            "\\bvar\\b",
-            "\\bas\\b",
-            "\\bin\\b",
-            "\\bsynchronized\\b",
-            "\\bnull\\b",
-            "\\btrait\\b"
-    };
-
-    /**
-     * Creates a new instance of GroovyFilter
-     */
-    public GroovyFilter(DefaultStyledDocument doc) {
-        super(doc);
-        init();
-    }
-
-    private void init() {
-        StyleContext styleContext = StyleContext.getDefaultStyleContext();
-        Style defaultStyle = styleContext.getStyle(StyleContext.DEFAULT_STYLE);
-
-        Style comment = styleContext.addStyle(COMMENT, defaultStyle);
-        StyleConstants.setForeground(comment, COMMENT_COLOR);
-        StyleConstants.setItalic(comment, true);
-
-        Style quotes = styleContext.addStyle(QUOTES, defaultStyle);
-        StyleConstants.setForeground(quotes, Color.MAGENTA.darker().darker());
-
-        Style charQuotes = styleContext.addStyle(SINGLE_QUOTES, defaultStyle);
-        StyleConstants.setForeground(charQuotes, Color.GREEN.darker().darker());
-
-        Style slashyQuotes = styleContext.addStyle(SLASHY_QUOTES, defaultStyle);
-        StyleConstants.setForeground(slashyQuotes, Color.ORANGE.darker());
-
-        Style digit = styleContext.addStyle(DIGIT, defaultStyle);
-        StyleConstants.setForeground(digit, Color.RED.darker());
-
-        Style operation = styleContext.addStyle(OPERATION, defaultStyle);
-        StyleConstants.setBold(operation, true);
-
-        Style ident = styleContext.addStyle(IDENT, defaultStyle);
-
-        Style reservedWords = styleContext.addStyle(RESERVED_WORD, defaultStyle);
-        StyleConstants.setBold(reservedWords, true);
-        StyleConstants.setForeground(reservedWords, Color.BLUE.darker().darker());
-
-        Style leftParens = styleContext.addStyle(IDENT, defaultStyle);
-
-        getRootNode().putStyle(SLASH_STAR_COMMENT, comment);
-        getRootNode().putStyle(SLASH_SLASH_COMMENT, comment);
-        getRootNode().putStyle(QUOTES, quotes);
-        getRootNode().putStyle(SINGLE_QUOTES, charQuotes);
-        getRootNode().putStyle(SLASHY_QUOTES, slashyQuotes);
-
-        getRootNode().putStyle(new String[] {
-            HEX_INTEGER_LITERAL,
-            OCTAL_INTEGER_LITERAL,
-            BINARY_INTEGER_LITERAL,
-            DECIMAL_FLOATING_POINT_LITERAL,
-            HEXADECIMAL_FLOATING_POINT_LITERAL,
-            DECIMAL_INTEGER_LITERAL,
-        }, digit);
-
-        getRootNode().putStyle(OPERATION, operation);
-        StructuredSyntaxDocumentFilter.LexerNode node = createLexerNode();
-        node.putStyle(RESERVED_WORDS, reservedWords);
-        node.putStyle(LEFT_PARENS, leftParens);
-        getRootNode().putChild(OPERATION, node);
-
-        getRootNode().putStyle(IDENT, ident);
-        node = createLexerNode();
-        node.putStyle(RESERVED_WORDS, reservedWords);
-        getRootNode().putChild(IDENT, node);
-    }
-
-    public static void installAutoTabAction(JTextComponent tComp) {
-        tComp.getActionMap().put("GroovyFilter-autoTab", AUTO_TAB_ACTION);
-        KeyStroke keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0, false);
-        tComp.getInputMap().put(keyStroke, "GroovyFilter-autoTab");
-    }
-
-    private static class AutoTabAction extends AbstractAction {
-
-        private StyledDocument doc;
-        private final Segment segment = new Segment();
-        private final StringBuilder buffer = new StringBuilder();
-
-        public void actionPerformed(ActionEvent ae) {
-            JTextComponent tComp = (JTextComponent) ae.getSource();
-            if (tComp.getDocument() instanceof StyledDocument) {
-                doc = (StyledDocument) tComp.getDocument();
-                try {
-                    doc.getText(0, doc.getLength(), segment);
-                }
-                catch (Exception e) {
-                    // should NEVER reach here
-                    e.printStackTrace();
-                }
-                int offset = tComp.getCaretPosition();
-                int index = findTabLocation(offset);
-                buffer.delete(0, buffer.length());
-                buffer.append('\n');
-                if (index > -1) {
-                    for (int i = 0; i < index + 4; i++) {
-                        buffer.append(' ');
-                    }
-                }
-                try {
-                    doc.insertString(offset, buffer.toString(),
-                            doc.getDefaultRootElement().getAttributes());
-                }
-                catch (BadLocationException ble) {
-                    ble.printStackTrace();
-                }
-            }
-        }
-
-        public int findTabLocation(int offset) {
-
-            // find first {
-            boolean cont = true;
-            while (offset > -1 && cont) {
-                Element el = doc.getCharacterElement(offset);
-                Object color =
-                        el.getAttributes().getAttribute(StyleConstants.Foreground);
-                if (!COMMENT_COLOR.equals(color)) {
-                    cont = segment.array[offset] != '{' &&
-                            segment.array[offset] != '}';
-                }
-                offset -= cont ? 1 : 0;
-            }
-
-            if (offset > -1 && segment.array[offset] == '{') {
-                while (offset > -1 &&
-                        !Character.isWhitespace(segment.array[offset--])) {
-                }
-            }
-
-            int index = offset < 0 || segment.array[offset] == '}' ? -4 : 0;
-            if (offset > -1) {
-                Element top = doc.getDefaultRootElement();
-                offset = top.getElement(top.getElementIndex(offset)).getStartOffset();
-
-                while (Character.isWhitespace(segment.array[offset++])) {
-                    index++;
-                }
-            }
-
-            return index;
-        }
-    }
-}
diff --git a/subprojects/groovy-console/src/main/groovy/groovy/ui/text/MatchingHighlighter.java b/subprojects/groovy-console/src/main/groovy/groovy/ui/text/MatchingHighlighter.java
deleted file mode 100644
index 12e4a0c..0000000
--- a/subprojects/groovy-console/src/main/groovy/groovy/ui/text/MatchingHighlighter.java
+++ /dev/null
@@ -1,222 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package groovy.ui.text;
-
-import groovy.lang.Tuple2;
-import groovy.lang.Tuple3;
-import org.antlr.v4.runtime.Token;
-import org.apache.groovy.util.Maps;
-
-import javax.swing.JTextPane;
-import javax.swing.SwingUtilities;
-import javax.swing.event.CaretEvent;
-import javax.swing.event.CaretListener;
-import javax.swing.text.BadLocationException;
-import javax.swing.text.DefaultStyledDocument;
-import javax.swing.text.Position;
-import javax.swing.text.Style;
-import javax.swing.text.StyleConstants;
-import javax.swing.text.StyleContext;
-import java.awt.Color;
-import java.util.ArrayDeque;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Deque;
-import java.util.List;
-import java.util.ListIterator;
-import java.util.Map;
-
-import static groovy.lang.Tuple.tuple;
-import static org.apache.groovy.parser.antlr4.GroovyLexer.LBRACE;
-import static org.apache.groovy.parser.antlr4.GroovyLexer.LBRACK;
-import static org.apache.groovy.parser.antlr4.GroovyLexer.LPAREN;
-import static org.apache.groovy.parser.antlr4.GroovyLexer.RBRACE;
-import static org.apache.groovy.parser.antlr4.GroovyLexer.RBRACK;
-import static org.apache.groovy.parser.antlr4.GroovyLexer.RPAREN;
-
-/**
- * Represents highlighter to highlight matched parentheses, brackets and curly braces when caret touching them
- *
- * @since 3.0.0
- */
-@Deprecated
-public class MatchingHighlighter implements CaretListener {
-    private final SmartDocumentFilter smartDocumentFilter;
-    private final JTextPane textEditor;
-    private final DefaultStyledDocument doc;
-    private static final Map<String, Tuple3<Integer, Integer, Boolean>> PAREN_MAP = Maps.of(
-            "(", tuple(LPAREN, RPAREN, true),
-            ")", tuple(RPAREN, LPAREN, false),
-            "[", tuple(LBRACK, RBRACK, true),
-            "]", tuple(RBRACK, LBRACK, false),
-            "{", tuple(LBRACE, RBRACE, true),
-            "}", tuple(RBRACE, LBRACE, false)
-    );
-    private volatile List<Tuple2<Integer, Position>> highlightedTokenInfoList = Collections.emptyList();
-
-    public MatchingHighlighter(SmartDocumentFilter smartDocumentFilter, JTextPane textEditor) {
-        this.smartDocumentFilter = smartDocumentFilter;
-        this.textEditor = textEditor;
-        this.doc = (DefaultStyledDocument) textEditor.getStyledDocument();
-
-        initStyles();
-    }
-
-    @Override
-    public void caretUpdate(CaretEvent e) {
-        highlight();
-    }
-
-    public void highlight() {
-        // `SwingUtilities.invokeLater` is used to avoid "java.lang.IllegalStateException: Attempt to mutate in notification"
-        SwingUtilities.invokeLater(this::doHighlight);
-    }
-
-    private void doHighlight() {
-        clearHighlighted();
-
-        if (!smartDocumentFilter.isLatest()) {
-            return;
-        }
-
-        int caretPosition = textEditor.getCaretPosition();
-        int f = -1;
-        String c = null;
-        try {
-            f = caretPosition - 1;
-            c = doc.getText(f, 1);
-        } catch (BadLocationException e1) {
-            // ignore
-        }
-
-        if (!PAREN_MAP.containsKey(c)) {
-            try {
-                f = caretPosition;
-                c = doc.getText(f, 1);
-            } catch (BadLocationException e1) {
-                // ignore
-            }
-        }
-
-        if (!PAREN_MAP.containsKey(c)) {
-            return;
-        }
-
-        final int offset = f;
-        final String p = c;
-
-        highlightMatched(offset, p);
-    }
-
-    private void highlightMatched(int offset, String p) {
-        List<Token> latestTokenList = smartDocumentFilter.getLatestTokenList();
-        Tuple3<Integer, Integer, Boolean> tokenTypeTuple = PAREN_MAP.get(p);
-        int triggerTokenType = tokenTypeTuple.getV1();
-        int matchedTokenType = tokenTypeTuple.getV2();
-        boolean normalOrder = tokenTypeTuple.getV3();
-        Deque<Tuple2<Token, Boolean>> stack = new ArrayDeque<>();
-
-        Token triggerToken = null;
-        Token matchedToken = null;
-
-        for (ListIterator<Token> iterator = latestTokenList.listIterator(normalOrder ? 0 : latestTokenList.size());
-             normalOrder ? iterator.hasNext() : iterator.hasPrevious(); ) {
-            Token token = normalOrder ? iterator.next() : iterator.previous();
-
-            int tokenType = token.getType();
-            if (tokenType == triggerTokenType) {
-                Boolean triggerFlag = offset == token.getStartIndex();
-
-                stack.push(tuple(token, triggerFlag));
-            } else if (tokenType == matchedTokenType) {
-                Tuple2<Token, Boolean> tokenAndTriggerFlagTuple = stack.pop();
-                if (tokenAndTriggerFlagTuple.getV2()) {
-                    triggerToken = tokenAndTriggerFlagTuple.getV1();
-                    matchedToken = token;
-                    break;
-                }
-            }
-        }
-
-        if (null != triggerToken && null != matchedToken) {
-            highlightToken(p, triggerToken);
-            highlightToken(p, matchedToken);
-            try {
-                highlightedTokenInfoList = Arrays.asList(
-                        tuple(triggerToken.getType(), doc.createPosition(triggerToken.getStartIndex())),
-                        tuple(matchedToken.getType(), doc.createPosition(matchedToken.getStartIndex()))
-                );
-            } catch (BadLocationException e) {
-                e.printStackTrace();
-            }
-        }
-    }
-
-    private void initStyles() {
-        PAREN_MAP.keySet().forEach(e -> createHighlightedStyleByParen(e));
-    }
-
-    private final StyleContext styleContext = StyleContext.getDefaultStyleContext();
-    private final Style defaultStyle = styleContext.getStyle(StyleContext.DEFAULT_STYLE);
-
-    private void createHighlightedStyleByParen(String p) {
-        Style style = StyleContext.getDefaultStyleContext().addStyle(highlightedStyleName(p), findStyleByTokenType(PAREN_MAP.get(p).getV1()));
-        StyleConstants.setForeground(style, Color.YELLOW.darker());
-        StyleConstants.setBold(style, true);
-    }
-
-    private static String highlightedStyleName(String p) {
-        return "highlighted" + p;
-    }
-
-    private Style findHighlightedStyleByParen(String p) {
-        Style style = styleContext.getStyle(highlightedStyleName(p));
-
-        return null == style ? defaultStyle : style;
-    }
-
-    private Style findStyleByTokenType(int tokenType) {
-        Style style = styleContext.getStyle(String.valueOf(tokenType));
-
-        return null == style ? defaultStyle : style;
-    }
-
-    private void highlightToken(String p, final Token tokenToHighlight) {
-        Style style = findHighlightedStyleByParen(p);
-        doc.setCharacterAttributes(tokenToHighlight.getStartIndex(),
-                1,
-                style,
-                true);
-    }
-
-    private void clearHighlighted() {
-        if (!highlightedTokenInfoList.isEmpty()) {
-            for (Tuple2<Integer, Position> highlightedTokenInfo : highlightedTokenInfoList) {
-                doc.setCharacterAttributes(
-                        highlightedTokenInfo.getV2().getOffset(),
-                        1,
-                        findStyleByTokenType(highlightedTokenInfo.getV1()),
-                        true
-                );
-            }
-
-            highlightedTokenInfoList = Collections.emptyList();
-        }
-    }
-}
diff --git a/subprojects/groovy-console/src/main/groovy/groovy/ui/text/SmartDocumentFilter.java b/subprojects/groovy-console/src/main/groovy/groovy/ui/text/SmartDocumentFilter.java
deleted file mode 100644
index 7802c3d..0000000
--- a/subprojects/groovy-console/src/main/groovy/groovy/ui/text/SmartDocumentFilter.java
+++ /dev/null
@@ -1,361 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package groovy.ui.text;
-
-import org.antlr.v4.runtime.CharStream;
-import org.antlr.v4.runtime.CharStreams;
-import org.antlr.v4.runtime.CommonTokenStream;
-import org.antlr.v4.runtime.ConsoleErrorListener;
-import org.antlr.v4.runtime.LexerNoViableAltException;
-import org.antlr.v4.runtime.Token;
-import org.apache.groovy.parser.antlr4.GroovyLangLexer;
-import org.apache.groovy.parser.antlr4.GroovySyntaxError;
-
-import javax.swing.text.AttributeSet;
-import javax.swing.text.BadLocationException;
-import javax.swing.text.DefaultStyledDocument;
-import javax.swing.text.DocumentFilter;
-import javax.swing.text.Style;
-import javax.swing.text.StyleConstants;
-import javax.swing.text.StyleContext;
-import java.awt.Color;
-import java.io.IOException;
-import java.io.StringReader;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.List;
-
-import static org.apache.groovy.parser.antlr4.GroovyLexer.ABSTRACT;
-import static org.apache.groovy.parser.antlr4.GroovyLexer.AS;
-import static org.apache.groovy.parser.antlr4.GroovyLexer.ASSERT;
-import static org.apache.groovy.parser.antlr4.GroovyLexer.BREAK;
-import static org.apache.groovy.parser.antlr4.GroovyLexer.BooleanLiteral;
-import static org.apache.groovy.parser.antlr4.GroovyLexer.BuiltInPrimitiveType;
-import static org.apache.groovy.parser.antlr4.GroovyLexer.CASE;
-import static org.apache.groovy.parser.antlr4.GroovyLexer.CATCH;
-import static org.apache.groovy.parser.antlr4.GroovyLexer.CLASS;
-import static org.apache.groovy.parser.antlr4.GroovyLexer.COMMA;
-import static org.apache.groovy.parser.antlr4.GroovyLexer.CONST;
-import static org.apache.groovy.parser.antlr4.GroovyLexer.CONTINUE;
-import static org.apache.groovy.parser.antlr4.GroovyLexer.DEF;
-import static org.apache.groovy.parser.antlr4.GroovyLexer.DEFAULT;
-import static org.apache.groovy.parser.antlr4.GroovyLexer.DO;
-import static org.apache.groovy.parser.antlr4.GroovyLexer.ELSE;
-import static org.apache.groovy.parser.antlr4.GroovyLexer.ENUM;
-import static org.apache.groovy.parser.antlr4.GroovyLexer.EOF;
-import static org.apache.groovy.parser.antlr4.GroovyLexer.EXTENDS;
-import static org.apache.groovy.parser.antlr4.GroovyLexer.FINAL;
-import static org.apache.groovy.parser.antlr4.GroovyLexer.FINALLY;
-import static org.apache.groovy.parser.antlr4.GroovyLexer.FOR;
-import static org.apache.groovy.parser.antlr4.GroovyLexer.FloatingPointLiteral;
-import static org.apache.groovy.parser.antlr4.GroovyLexer.GOTO;
-import static org.apache.groovy.parser.antlr4.GroovyLexer.GStringBegin;
-import static org.apache.groovy.parser.antlr4.GroovyLexer.GStringEnd;
-import static org.apache.groovy.parser.antlr4.GroovyLexer.GStringPart;
-import static org.apache.groovy.parser.antlr4.GroovyLexer.IF;
-import static org.apache.groovy.parser.antlr4.GroovyLexer.IMPLEMENTS;
-import static org.apache.groovy.parser.antlr4.GroovyLexer.IMPORT;
-import static org.apache.groovy.parser.antlr4.GroovyLexer.IN;
-import static org.apache.groovy.parser.antlr4.GroovyLexer.INSTANCEOF;
-import static org.apache.groovy.parser.antlr4.GroovyLexer.INTERFACE;
-import static org.apache.groovy.parser.antlr4.GroovyLexer.IntegerLiteral;
-import static org.apache.groovy.parser.antlr4.GroovyLexer.NATIVE;
-import static org.apache.groovy.parser.antlr4.GroovyLexer.NEW;
-import static org.apache.groovy.parser.antlr4.GroovyLexer.NL;
-import static org.apache.groovy.parser.antlr4.GroovyLexer.NullLiteral;
-import static org.apache.groovy.parser.antlr4.GroovyLexer.PACKAGE;
-import static org.apache.groovy.parser.antlr4.GroovyLexer.PRIVATE;
-import static org.apache.groovy.parser.antlr4.GroovyLexer.PROTECTED;
-import static org.apache.groovy.parser.antlr4.GroovyLexer.PUBLIC;
-import static org.apache.groovy.parser.antlr4.GroovyLexer.RETURN;
-import static org.apache.groovy.parser.antlr4.GroovyLexer.SEMI;
-import static org.apache.groovy.parser.antlr4.GroovyLexer.STATIC;
-import static org.apache.groovy.parser.antlr4.GroovyLexer.STRICTFP;
-import static org.apache.groovy.parser.antlr4.GroovyLexer.SUPER;
-import static org.apache.groovy.parser.antlr4.GroovyLexer.SWITCH;
-import static org.apache.groovy.parser.antlr4.GroovyLexer.SYNCHRONIZED;
-import static org.apache.groovy.parser.antlr4.GroovyLexer.StringLiteral;
-import static org.apache.groovy.parser.antlr4.GroovyLexer.THIS;
-import static org.apache.groovy.parser.antlr4.GroovyLexer.THREADSAFE;
-import static org.apache.groovy.parser.antlr4.GroovyLexer.THROW;
-import static org.apache.groovy.parser.antlr4.GroovyLexer.THROWS;
-import static org.apache.groovy.parser.antlr4.GroovyLexer.TRAIT;
-import static org.apache.groovy.parser.antlr4.GroovyLexer.TRANSIENT;
-import static org.apache.groovy.parser.antlr4.GroovyLexer.TRY;
-import static org.apache.groovy.parser.antlr4.GroovyLexer.UNEXPECTED_CHAR;
-import static org.apache.groovy.parser.antlr4.GroovyLexer.VAR;
-import static org.apache.groovy.parser.antlr4.GroovyLexer.VOID;
-import static org.apache.groovy.parser.antlr4.GroovyLexer.VOLATILE;
-import static org.apache.groovy.parser.antlr4.GroovyLexer.WHILE;
-
-
-/**
- * The document filter based on Parrot's lexer is for highlighting the content of text editor
- *
- * @since 3.0.0
- */
-@Deprecated
-public class SmartDocumentFilter extends DocumentFilter {
-    private static final String MONOSPACED = "Monospaced";
-    private final DefaultStyledDocument styledDocument;
-    private final StyleContext styleContext;
-    private final Style defaultStyle;
-
-    public SmartDocumentFilter(DefaultStyledDocument styledDocument) {
-        this.styledDocument = styledDocument;
-
-        this.styleContext = StyleContext.getDefaultStyleContext();
-        this.defaultStyle = this.styleContext.getStyle(StyleContext.DEFAULT_STYLE);
-        StyleConstants.setFontFamily(this.defaultStyle, MONOSPACED);
-
-        initStyles();
-    }
-
-    @Override
-    public void insertString(DocumentFilter.FilterBypass fb, int offset,
-                             String text, AttributeSet attrs) throws BadLocationException {
-        // remove problem meta characters returns
-        text = replaceMetaCharacters(text);
-
-        fb.insertString(offset, text, attrs);
-        parseDocument();
-    }
-
-    @Override
-    public void remove(DocumentFilter.FilterBypass fb, int offset, int length)
-            throws BadLocationException {
-
-        fb.remove(offset, length);
-        parseDocument();
-    }
-
-    @Override
-    public void replace(DocumentFilter.FilterBypass fb, int offset,
-                        int length, String text, AttributeSet attrs)
-            throws BadLocationException {
-
-        // text might be null and indicates no replacement text
-        if (text == null) text = "";
-
-        // remove problem meta characters returns
-        text = replaceMetaCharacters(text);
-
-        fb.replace(offset, length, text, attrs);
-
-        parseDocument();
-    }
-
-    private String replaceMetaCharacters(String string) {
-        // just in case remove carriage returns
-        string = string.replaceAll("\\t", TAB_REPLACEMENT);
-        return string;
-    }
-
-    private void parseDocument() throws BadLocationException {
-        GroovyLangLexer lexer;
-        try {
-            lexer = createLexer(styledDocument.getText(0, styledDocument.getLength()));
-        } catch (IOException e) {
-            e.printStackTrace();
-            this.latest = false;
-            return;
-        }
-
-        CommonTokenStream tokenStream = new CommonTokenStream(lexer);
-
-        try {
-            tokenStream.fill();
-        } catch (LexerNoViableAltException | GroovySyntaxError e) {
-            // ignore
-            this.latest = false;
-            return;
-        } catch (Exception e) {
-            e.printStackTrace();
-            this.latest = false;
-            return;
-        }
-
-        List<Token> tokenList = tokenStream.getTokens();
-        List<Token> tokenListToRender = findTokensToRender(tokenList);
-
-        for (Token token : tokenListToRender) {
-            int tokenType = token.getType();
-
-//                if (token instanceof CommonToken) {
-//                    System.out.println(((CommonToken) token).toString(lexer));
-//                }
-
-            if (EOF == tokenType) {
-                continue;
-            }
-
-            int tokenStartIndex = token.getStartIndex();
-            int tokenStopIndex = token.getStopIndex();
-            int tokenLength = tokenStopIndex - tokenStartIndex + 1;
-
-            styledDocument.setCharacterAttributes(tokenStartIndex,
-                    tokenLength,
-                    findStyleByTokenType(tokenType),
-                    true);
-
-            if (GStringBegin == tokenType || GStringPart == tokenType) {
-                styledDocument.setCharacterAttributes(
-                        tokenStartIndex + tokenLength - 1,
-                        1,
-                        defaultStyle,
-                        true);
-            }
-        }
-
-        this.latestTokenList = tokenList;
-        this.latest = true;
-    }
-
-    private List<Token> findTokensToRender(List<Token> tokenList) {
-        int tokenListSize = tokenList.size();
-        int latestTokenListSize = latestTokenList.size();
-
-        if (0 == tokenListSize || 0 == latestTokenListSize) {
-            return tokenList;
-        }
-
-        int startTokenIndex = 0;
-        int minSize = Math.min(tokenListSize, latestTokenListSize);
-        for (int i = 0; i < minSize; i++) {
-            Token token = tokenList.get(i);
-            Token latestToken = latestTokenList.get(i);
-
-            if (token.getType() == latestToken.getType()
-                    && token.getStartIndex() == latestToken.getStartIndex()
-                    && token.getStopIndex() == latestToken.getStopIndex()) {
-                continue;
-            }
-
-            startTokenIndex = i;
-            break;
-        }
-
-        List<Token> newTokenList = new ArrayList<>(tokenList);
-        List<Token> newLatestTokenList = new ArrayList<>(latestTokenList);
-
-        Collections.reverse(newTokenList);
-        Collections.reverse(newLatestTokenList);
-
-        int stopTokenIndex = tokenListSize;
-
-        Token lastToken = newTokenList.get(0);
-        Token lastLatestToken = newLatestTokenList.get(0);
-
-        for (int i = 0; i < minSize; i++) {
-            Token token = newTokenList.get(i);
-            Token latestToken = newLatestTokenList.get(i);
-
-            if ((token.getType() == latestToken.getType())
-                    && (token.getStartIndex() - lastToken.getStartIndex()) == (latestToken.getStartIndex() - lastLatestToken.getStartIndex())
-                    && ((token.getStopIndex() - lastToken.getStopIndex()) == (latestToken.getStopIndex() - lastLatestToken.getStopIndex()))) {
-                continue;
-            }
-
-            stopTokenIndex = tokenListSize - i;
-            break;
-        }
-
-        if (startTokenIndex <= stopTokenIndex) {
-            return tokenList.subList(startTokenIndex, stopTokenIndex);
-        }
-
-        return Collections.emptyList();
-    }
-
-    private Style findStyleByTokenType(int tokenType) {
-        Style style = styleContext.getStyle(String.valueOf(tokenType));
-
-        return null == style ? defaultStyle : style;
-    }
-
-    private Style createDefaultStyleByTokenType(int tokenType) {
-        return styleContext.addStyle(String.valueOf(tokenType), defaultStyle);
-    }
-
-    private GroovyLangLexer createLexer(String text) throws IOException {
-        CharStream charStream = CharStreams.fromReader(new StringReader(text));
-        GroovyLangLexer lexer = new GroovyLangLexer(charStream);
-
-        lexer.removeErrorListener(ConsoleErrorListener.INSTANCE);
-
-        return lexer;
-    }
-
-    private void initStyles() {
-        Style comment = createDefaultStyleByTokenType(NL);
-        StyleConstants.setForeground(comment, Color.LIGHT_GRAY.darker().darker());
-        StyleConstants.setItalic(comment, true);
-
-        // gstrings, e.g. "${xxx}", /xxx/
-        for (int t : Arrays.asList(GStringBegin, GStringPart, GStringEnd)) {
-            Style style = createDefaultStyleByTokenType(t);
-            StyleConstants.setForeground(style, Color.MAGENTA.darker().darker());
-        }
-
-        // strings, e.g. 'xxx'
-        Style stringLiteral = createDefaultStyleByTokenType(StringLiteral);
-        StyleConstants.setForeground(stringLiteral, Color.GREEN.darker().darker());
-
-        // numbers, e.g. 123, 1.23
-        for (int t : Arrays.asList(IntegerLiteral, FloatingPointLiteral)) {
-            Style style = createDefaultStyleByTokenType(t);
-            StyleConstants.setForeground(style, Color.RED.darker());
-        }
-
-        // reserved keywords, null literals, boolean literals
-        for (int t : Arrays.asList(AS, DEF, IN, TRAIT, THREADSAFE,
-                VAR, BuiltInPrimitiveType, ABSTRACT, ASSERT, BREAK, CASE, CATCH, CLASS, CONST, CONTINUE, DEFAULT, DO,
-                ELSE, ENUM, EXTENDS, FINAL, FINALLY, FOR, IF, GOTO, IMPLEMENTS, IMPORT, INSTANCEOF, INTERFACE,
-                NATIVE, NEW, PACKAGE, PRIVATE, PROTECTED, PUBLIC, RETURN, STATIC, STRICTFP, SUPER, SWITCH, SYNCHRONIZED,
-                THIS, THROW, THROWS, TRANSIENT, TRY, VOID, VOLATILE, WHILE, NullLiteral, BooleanLiteral)) {
-            Style style = createDefaultStyleByTokenType(t);
-            StyleConstants.setBold(style, true);
-            StyleConstants.setForeground(style, Color.BLUE.darker().darker());
-        }
-
-        // commas, semicolons
-        for (int t : Arrays.asList(COMMA, SEMI)) {
-            Style style = createDefaultStyleByTokenType(t);
-            StyleConstants.setForeground(style, Color.BLUE.darker());
-        }
-
-        // unexpected char, e.g. `
-        Style unexpectedChar = createDefaultStyleByTokenType(UNEXPECTED_CHAR);
-        StyleConstants.setForeground(unexpectedChar, Color.CYAN.darker());
-    }
-
-    private volatile boolean latest = false;
-    private volatile List<Token> latestTokenList = Collections.emptyList();
-    private static final String TAB_REPLACEMENT = "    ";
-
-    public boolean isLatest() {
-        return latest;
-    }
-
-    public List<Token> getLatestTokenList() {
-        return latestTokenList;
-    }
-
-}
diff --git a/subprojects/groovy-console/src/main/groovy/groovy/ui/text/StructuredSyntaxDocumentFilter.java b/subprojects/groovy-console/src/main/groovy/groovy/ui/text/StructuredSyntaxDocumentFilter.java
deleted file mode 100644
index 848965e..0000000
--- a/subprojects/groovy-console/src/main/groovy/groovy/ui/text/StructuredSyntaxDocumentFilter.java
+++ /dev/null
@@ -1,574 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package groovy.ui.text;
-
-import javax.swing.text.AttributeSet;
-import javax.swing.text.BadLocationException;
-import javax.swing.text.DefaultStyledDocument;
-import javax.swing.text.DocumentFilter;
-import javax.swing.text.Position;
-import javax.swing.text.Segment;
-import javax.swing.text.Style;
-import javax.swing.text.StyleContext;
-import java.io.Serializable;
-import java.nio.CharBuffer;
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.SortedSet;
-import java.util.TreeSet;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-@Deprecated
-public class StructuredSyntaxDocumentFilter extends DocumentFilter {
-    
-    public static final String TAB_REPLACEMENT = "    ";
-    
-    private static final MLComparator ML_COMPARATOR = new MLComparator();
-
-    /**
-     * The root of the lexical parsing tree.
-     */
-    protected LexerNode lexer = new LexerNode(true);
-    
-    // The styled document the filter parses
-    protected DefaultStyledDocument styledDocument; 
-    
-    // the document buffer and segment
-    private Segment segment = new Segment();
-    private CharBuffer buffer;
-    
-    /**
-     * The position tree of multi-line comments.
-     */ 
-    protected SortedSet mlTextRunSet = new TreeSet(ML_COMPARATOR);
-    
-    // Ensures not adding any regexp with capturing groups
-    private static void checkRegexp(String regexp) {
-        String checking = regexp.replaceAll("\\\\\\(", "X").replaceAll("\\(\\?", "X");
-        int checked = checking.indexOf('(');
-        if (checked > -1) {
-            StringBuilder msg = new StringBuilder("Only non-capturing groups allowed:\r\n" +
-                    regexp + "\r\n");
-            for (int i = 0; i < checked; i++) {
-                msg.append(" ");
-            }
-            msg.append("^");
-            throw new IllegalArgumentException(msg.toString());
-        }
-    }
-    
-    /**
-     * Creates a new instance of StructuredSyntaxDocumentFilter
-     * @param document the styled document to parse
-     */
-    public StructuredSyntaxDocumentFilter(DefaultStyledDocument document) {
-        this.styledDocument = document;
-    }
-    
-    private int calcBeginParse(int offset) {
-        MultiLineRun mlr = getMultiLineRun(offset);
-        if (mlr != null) {
-            // means we're in middle of mlr, so start at beginning of mlr
-            offset = mlr.start();
-        }
-        else {
-            // otherwise, earliest position in line not part of mlr
-            offset = styledDocument.getParagraphElement(offset).getStartOffset();
-            mlr = getMultiLineRun(offset);
-            offset = mlr == null ? offset : mlr.end() + 1;
-        }
-        
-        return offset;
-    }
-    
-    private int calcEndParse(int offset) {
-        MultiLineRun mlr = getMultiLineRun(offset);
-        if (mlr != null) {
-            // means we're in middle of mlr, so end is at end of mlr
-            offset = mlr.end();
-        }
-        else {
-            // otherwise, latest position in line not part of mlr
-            offset = styledDocument.getParagraphElement(offset).getEndOffset();
-            mlr = getMultiLineRun(offset);
-            offset = mlr == null ? offset : mlr.end();
-        }
-        
-        return offset;
-    }
-    
-    /**
-     * Create a new LexerNode for adding to root.
-     *
-     * @return a new LexerNode
-     */
-    public LexerNode createLexerNode() {
-        return new LexerNode(false);
-    }
-    
-    // given an offset, return the mlr it resides in
-    private MultiLineRun getMultiLineRun(int offset) {
-        MultiLineRun ml = null;
-        if (offset > 0) {
-            Integer os = offset;
-
-            SortedSet set = mlTextRunSet.headSet(os);
-            if (!set.isEmpty()) {
-                ml = (MultiLineRun)set.last();
-                ml = ml.end() >= offset ? ml : null;
-            }
-        }
-
-        return ml;
-    }
-    
-    /**
-     * Get the root node for lexing the document.   Children can be added such
-     * that matching patterns can be further parsed if required.
-     *
-     * @return the root lexing node.  
-     */
-    public LexerNode getRootNode() {
-        return lexer;
-    }
-    
-    /**
-     * Insert a string into the document, and then parse it if the parser has been
-     * set.
-     *
-     * @param fb
-     * @param offset
-     * @param text
-     * @param attrs
-     * @throws BadLocationException
-     */    
-    public void insertString(DocumentFilter.FilterBypass fb, int offset,
-                             String text, AttributeSet attrs)
-        throws BadLocationException {
-        // remove problem meta characters returns
-        text = replaceMetaCharacters(text);
-        
-        fb.insertString(offset, text, attrs);
-        
-        // start on the string that was inserted
-        parseDocument(offset, text.length());
-    }
-    
-    /**
-     * Parse the Document to update the character styles given an initial start
-     * position.  Called by the filter after it has updated the text. 
-     *
-     * @param offset
-     * @param length
-     * @throws BadLocationException
-     */
-    protected void parseDocument(int offset, int length) throws BadLocationException {
-        // initialize the segment with the complete document so the segment doesn't
-        // have an underlying gap in the buffer
-        styledDocument.getText(0, styledDocument.getLength(), segment);
-        
-        buffer = CharBuffer.wrap(segment.array).asReadOnlyBuffer();
-        
-        // initialize the lexer if necessary
-        if (!lexer.isInitialized()) {
-            // prime the parser and reparse whole document
-            lexer.initialize();
-            offset = 0;
-            length = styledDocument.getLength();
-        }
-        else {
-            int end = offset + length;
-            offset = calcBeginParse(offset);
-            length = calcEndParse(end) - offset;
-            
-            // clean the tree by ensuring multi line styles are reset in area
-            // of parsing
-            SortedSet set = mlTextRunSet.subSet(offset,
-                    offset + length);
-            if (set != null) {
-                set.clear();
-            }
-        }
-        
-        // parse the document
-        lexer.parse(buffer, offset, length);
-    }
-
-    /**
-     * Remove a string from the document, and then parse it if the parser has been
-     * set.
-     *
-     * @param fb
-     * @param offset
-     * @param length
-     * @throws BadLocationException
-     */    
-    public void remove(DocumentFilter.FilterBypass fb, int offset, int length)
-        throws BadLocationException {
-        // FRICKIN' HACK!!!!! For some reason, deleting a string at offset 0
-        // does not get done properly, so first replace and remove after parsing
-        if (offset == 0 && length != fb.getDocument().getLength()) {
-            fb.replace(0, length, "\n", lexer.defaultStyle);
-            
-            // start on either side of the removed text
-            parseDocument(offset, 2);
-            fb.remove(offset, 1);
-        }
-        else {
-            fb.remove(offset, length);
-            
-            // start on either side of the removed text
-            if (offset + 1 < fb.getDocument().getLength()) {
-                parseDocument(offset, 1);
-            }
-            else if (offset - 1 > 0) {
-                parseDocument(offset - 1, 1);
-            }
-            else {
-                // empty text
-                mlTextRunSet.clear();
-            }
-        }
-
-    }
-
-    /**
-     * Replace a string in the document, and then parse it if the parser has been
-     * set.
-     *
-     * @param fb
-     * @param offset
-     * @param length
-     * @param text
-     * @param attrs
-     * @throws BadLocationException
-     */    
-    public void replace(DocumentFilter.FilterBypass fb, int offset, 
-                        int length, String text, AttributeSet attrs)
-        throws BadLocationException
-    {
-        // text might be null and indicates no replacement text
-        if (text == null) text = "";
-        
-        // remove problem meta characters returns
-        text = replaceMetaCharacters(text);
-        
-        fb.replace(offset, length, text, attrs);
-        
-        // start on the text that was replaced
-        parseDocument(offset, text.length());
-    }
-    
-    // tabs with spaces (I hate tabs)
-    private String replaceMetaCharacters(String string) {
-        // just in case remove carriage returns
-        string = string.replaceAll("\\t", TAB_REPLACEMENT);
-        return string;
-    }
-    
-    public final class LexerNode {
-        
-        private Style defaultStyle;
-    
-        private Map styleMap = new LinkedHashMap();
-        private Map children = new HashMap();
-
-        private Matcher matcher;
-        private List groupList = new ArrayList();
-        
-        private boolean initialized;
-        
-        private CharBuffer lastBuffer;
-
-        /*
-         * Creates a new instance of LexerNode 
-         */
-        LexerNode(boolean isParent) {
-            StyleContext sc = StyleContext.getDefaultStyleContext();
-            defaultStyle = sc.getStyle(StyleContext.DEFAULT_STYLE);
-        }
-    
-        private String buildRegexp(String[] regexps) {
-            StringBuilder regexp = new StringBuilder();
-
-            for (int i = 0; i < regexps.length; i++) {
-                regexp.append("|").append(regexps[i]);
-            }
-
-            // ensure leading '|' is removed
-            return regexp.substring(1);
-        }
-        
-        public Style getDefaultStyle() {
-            return defaultStyle;
-        }
-
-        private void initialize() {
-            matcher = null;
-            groupList.clear();
-            groupList.add(null);
-            
-            Iterator iter = styleMap.keySet().iterator();
-            StringBuilder regexp = new StringBuilder();
-            while (iter.hasNext()) {
-                String nextRegexp = (String)iter.next();
-                regexp.append("|(").append(nextRegexp).append(")");
-                // have to compile regexp first so that it will match
-                groupList.add(Pattern.compile(nextRegexp).pattern());
-            }
-            if (!regexp.toString().equals("")) {
-                matcher = Pattern.compile(regexp.substring(1)).matcher("");
-                
-                iter = children.values().iterator();
-                while (iter.hasNext()) {
-                    ((LexerNode)iter.next()).initialize();
-                }
-            }
-            initialized = true;
-        }
-        
-        /**
-         * @return true if initialised
-         */        
-        public boolean isInitialized() {
-            return initialized;
-        }
-
-        /**
-         * @param buffer
-         * @param offset
-         * @param length
-         * @throws BadLocationException
-         */        
-        public void parse(CharBuffer buffer, int offset, int length)
-            throws BadLocationException {
-            // get the index of where we can start to look for an exit:
-            // i.e. after the end of the length of the segment, when we find 
-            // that text in question already is set properly, we can stop
-            // parsing
-            int checkPoint = offset + length;
-            
-            // reset the matcher and start parsing string
-            if (lastBuffer != buffer) {
-                matcher.reset(buffer);
-                lastBuffer = buffer;
-            }
-            
-            // the start and end indices of a match in the Matcher looking
-            int matchEnd = offset;
-            Style style = null;
-            while (matchEnd < checkPoint && matcher.find(offset)) {
-                // when we get something other than -1, we know which regexp
-                // matched; the 0 group is the complete expression of the 
-                // matcher, which would always return a hit based on the above
-                // while condition
-                int groupNum = 0;
-                while ((offset = matcher.start(++groupNum)) == -1){
-                }
-                
-                // if the matching offset is not the same as the end of the 
-                // previous match, we have extra text not matched, so set to 
-                // the default style of this lexer node
-                if (offset != matchEnd) {
-                    offset = offset > checkPoint ? checkPoint : offset; 
-                    styledDocument.setCharacterAttributes(matchEnd,
-                                                          offset - matchEnd,
-                                                          defaultStyle,
-                                                          true);
-                    if (offset >= checkPoint) {
-                        return;
-                    }
-                }
-
-                // track the end of the matching string 
-                matchEnd = matcher.end(groupNum);
-
-                // retrieve the proper style from groupNum of the groupList and
-                // styleMap, then set the attributes of the matching string
-                style = (Style)styleMap.get((String)groupList.get(groupNum));
-                styledDocument.setCharacterAttributes(offset,
-                                                      matchEnd - offset,
-                                                      style, true);
-
-                // if the match was multiline, which we'll know if they span
-                // multiple paragraph elements, the mark it (this list was cleaned
-                // above in parseDocument())
-                if (styledDocument.getParagraphElement(offset).getStartOffset() !=
-                    styledDocument.getParagraphElement(matchEnd).getStartOffset()) {
-                    // mark a ml run
-                    MultiLineRun mlr = new MultiLineRun(offset, matchEnd);
-                    mlTextRunSet.add(mlr);
-                }
-                
-                // parse the child regexps, if any, within a matched block
-                LexerNode node = (LexerNode)children.get(groupList.get(groupNum));
-                if (node != null) {
-                    node.parse(buffer, offset, matchEnd - offset);
-                }
-                
-                // set the offset to start where we left off
-                offset = matchEnd;
-            }
-            if (matchEnd < checkPoint) {
-                // if we finished before hitting the end of the checkpoint from
-                // no mroe matches, then set ensure the text is reset to the
-                // defaultStyle
-                styledDocument.setCharacterAttributes(matchEnd,
-                                                      checkPoint - matchEnd,
-                                                      defaultStyle,
-                                                      true);
-            }
-        }
-
-        /**
-         *
-         * @param regexp
-         * @param node
-         */        
-        public void putChild(String regexp, LexerNode node) {
-            node.defaultStyle = (Style)styleMap.get(regexp);
-            
-            // have to compile regexp first so that it will match
-            children.put(Pattern.compile(regexp).pattern(), node);
-            initialized = false;
-        }
-
-        /**
-         * @param regexps
-         * @param node
-         */        
-        public void putChild(String[] regexps, LexerNode node) {
-            putChild(buildRegexp(regexps), node);
-        }
-
-        /**
-         * @param regexp
-         * @param style
-         */        
-        public void putStyle(String regexp, Style style) {
-            checkRegexp(regexp);
-            styleMap.put(regexp, style);
-            initialized = false;
-        }
-
-        /**
-         * @param regexps
-         * @param style
-         */        
-        public void putStyle(String regexps[], Style style) {
-            putStyle(buildRegexp(regexps), style);
-        }
-
-        /**
-         * @param regexp
-         */        
-        public void removeChild(String regexp) {
-            children.remove(regexp);
-        }
-
-        /**
-         * @param regexp
-         */        
-        public void removeStyle(String regexp) {
-            styleMap.remove(regexp);
-            children.remove(regexp);
-        }
-
-        /**
-         * @param regexps
-         */        
-        public void removeStyle(String regexps[]) {
-            removeStyle(buildRegexp(regexps));
-        }
-        
-        public void setDefaultStyle(Style style) {
-            defaultStyle = style;
-        }
-    }
-    
-    protected class MultiLineRun {
-        
-        private Position start;
-        private Position end;
-        private int delimeterSize;
-        
-        public MultiLineRun(int start, int end) throws BadLocationException {
-            this(start, end, 2);
-        }
-        
-        public MultiLineRun(int start, int end, int delimeterSize) throws BadLocationException {
-            if (start > end) {
-                String msg = "Start offset is after end: ";
-                throw new BadLocationException(msg, start);
-            }
-            if (delimeterSize < 1) {
-                String msg = "Delimiters be at least size 1: " + 
-                              delimeterSize;
-                throw new IllegalArgumentException(msg);
-            }
-            this.start = styledDocument.createPosition(start);
-            this.end = styledDocument.createPosition(end);
-            this.delimeterSize = delimeterSize;
-        }
-        
-        public int getDelimeterSize() {
-            return delimeterSize;
-        }
-        
-        public int end() {
-            return end.getOffset();
-        }
-        
-        public int length() {
-            return end.getOffset() - start.getOffset();
-        }
-        
-        public int start() {
-            return start.getOffset();
-        }
-        
-        public String toString() {
-            return start.toString() + " " + end.toString();
-        }
-        
-    }
-
-    private static class MLComparator implements Comparator, Serializable {
-
-        private static final long serialVersionUID = -4210196728719411217L;
-
-        public int compare(Object obj, Object obj1) {
-            return valueOf(obj) - valueOf(obj1);
-        }
-        
-        private int valueOf(Object obj) {
-            return obj instanceof Integer ?
-                    (Integer) obj :
-                    (obj instanceof MultiLineRun) ?
-                        ((MultiLineRun)obj).start() :
-                        ((Position)obj).getOffset();
-        }
-    }
-}
diff --git a/subprojects/groovy-console/src/main/groovy/groovy/ui/text/StructuredSyntaxHandler.java b/subprojects/groovy-console/src/main/groovy/groovy/ui/text/StructuredSyntaxHandler.java
deleted file mode 100644
index 00f7e90..0000000
--- a/subprojects/groovy-console/src/main/groovy/groovy/ui/text/StructuredSyntaxHandler.java
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package groovy.ui.text;
-
-import org.xml.sax.Attributes;
-import org.xml.sax.SAXException;
-import org.xml.sax.SAXParseException;
-import org.xml.sax.helpers.DefaultHandler;
-
-@Deprecated
-public class StructuredSyntaxHandler extends DefaultHandler {
-
-    //StyleConstants.
-    public static final String REGEXP = "regexp";
-    public static final String STYLE = "style";
-
-    public static final String ALIGN_CENTER = "ALIGN_CENTER";
-    public static final String ALIGN_JUSTIFIED = "ALIGN_JUSTIFIED";
-    public static final String ALIGN_LEFT = "ALIGN_LEFT";
-    public static final String ALIGN_RIGHT = "ALIGN_RIGHT";
-
-    public static final String ALIGNMENT = "alignment";
-    public static final String BACKGROUND = "background";
-    public static final String BIDI_LEVEL = "bidiLevel";
-    public static final String BOLD = "bold";
-    public static final String COMPONENT_ATTRIBUTE = "componentAttribute";
-    public static final String COMPONENT_ELEMENT_NAME = "componentElementName";
-    public static final String COMPOSED_TEXT_ATTRIBUTE = "composedTextAttribute";
-    public static final String FIRST_LINE_INDENT = "firstLineIndent";
-    public static final String FONT_FAMILY = "fontFamily";
-    public static final String FONT_SIZE = "fontSize";
-    public static final String FOREGROUND = "foreground";
-    public static final String ICON_ATTRIBUTE = "iconAttribute";
-    public static final String ICON_ELEMENT_NAME = "iconElementName";
-    public static final String ITALIC = "italic";
-    public static final String LEFT_INDENT = "leftIndent";
-    public static final String LINE_SPACING = "lineSpacing";
-    public static final String MODEL_ATTRIBUTE = "modelAttribute";
-    public static final String NAME_ATTRIBUTE = "nameAttribute";
-    public static final String ORIENTATION = "orientation";
-    public static final String RESOLVE_ATTRIBUTE = "resolveAttribute";
-    public static final String RIGHT_INDENT = "rightIndent";
-    public static final String SPACE_ABOVE = "spaceAbove";
-    public static final String SPACE_BELOW = "spaceBelow";
-    public static final String STRIKE_THROUGH = "strikeThrough";
-    public static final String SUBSCRIPT = "subscript";
-    public static final String SUPERSCRIPT = "superscript";
-    public static final String TAB_SET = "tabSet";
-    public static final String UNDERLINE = "underline";
-
-    private StructuredSyntaxDocumentFilter.LexerNode currentNode;
-
-    private final StructuredSyntaxDocumentFilter filter;
-
-    /**
-     * Creates a new instance of MasterFrameHandler
-     *
-     * @param filter
-     */
-    public StructuredSyntaxHandler(StructuredSyntaxDocumentFilter filter) {
-        this.filter = filter;
-    }
-
-    public void characters(char[] ch, int start, int length) {
-    }
-
-    public void endDocument() throws SAXException {
-        super.endDocument();
-    }
-
-    public void endElement(String uri,
-                           String localName,
-                           String qName) throws SAXException {
-    }
-
-    public void error(SAXParseException e) throws SAXException {
-        throw new SAXException("Line: " + e.getLineNumber() + " message: " + e.getMessage());
-    }
-
-    public void startDocument() throws SAXException {
-        super.startDocument();
-        currentNode = filter.getRootNode();
-    }
-
-    public void startElement(String uri,
-                             String localName,
-                             String qName,
-                             Attributes attributes) throws SAXException {
-        super.startElement(uri, localName, qName, attributes);
-    }
-}
diff --git a/subprojects/groovy-console/src/main/groovy/groovy/ui/text/StructuredSyntaxResources.java b/subprojects/groovy-console/src/main/groovy/groovy/ui/text/StructuredSyntaxResources.java
deleted file mode 100644
index 2c060c1..0000000
--- a/subprojects/groovy-console/src/main/groovy/groovy/ui/text/StructuredSyntaxResources.java
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package groovy.ui.text;
-
-import java.awt.*;
-import java.awt.datatransfer.Clipboard;
-
-/**
- * Contains all the basic resources and values used by the utility frame work
- * framework.
- */
-@Deprecated
-public final class StructuredSyntaxResources {
-
-    // ==================================================
-    // ClipBoard
-    // ==================================================
-    
-    public static final Clipboard SYSTEM_CLIPBOARD;
-    static {
-        Clipboard systemClipboard = null;
-        try {
-            // if we don't have access to the system clipboard, will throw
-            // a security exception
-            SecurityManager mgr = System.getSecurityManager();
-            if (mgr != null) {
-                mgr.checkPermission(new AWTPermission("accessClipboard"));
-            }
-            systemClipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
-        }
-        catch (SecurityException e) {
-            // means we can't get to system clipboard, so create app level one
-            systemClipboard = new Clipboard("UIResourceMgr");
-        }
-        catch (Exception e) {
-            e.printStackTrace();               
-        }
-        SYSTEM_CLIPBOARD = systemClipboard;
-    }
-
-    // =====================================================
-    // STANDARD FONTS
-    // =====================================================
-
-    public static final Font LARGE_FONT = Font.decode("Arial-24");
-    public static final Font MEDIUM_FONT = Font.decode("Arial-18");
-    public static final Font SMALL_FONT = Font.decode("Arial-12");
-    
-    public static final Font EDITOR_FONT = Font.decode("Monospaced-12");
-
-    // =====================================================
-    // UNDO/REDO NAMES
-    // =====================================================
-
-    public static final String UNDO = "Undo";
-    public static final String REDO = "Redo";
-    public static final String PRINT = "Print";
-    public static final String FIND = "Find";
-    public static final String FIND_NEXT = "Find Next";
-    public static final String REPLACE = "Replace";
-        
-    // singleton
-    private StructuredSyntaxResources() {
-    }
-}
diff --git a/subprojects/groovy-console/src/main/groovy/groovy/ui/text/TextEditor.java b/subprojects/groovy-console/src/main/groovy/groovy/ui/text/TextEditor.java
deleted file mode 100644
index 371096b..0000000
--- a/subprojects/groovy-console/src/main/groovy/groovy/ui/text/TextEditor.java
+++ /dev/null
@@ -1,500 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package groovy.ui.text;
-
-import javax.swing.*;
-import javax.swing.plaf.ComponentUI;
-import javax.swing.text.BadLocationException;
-import javax.swing.text.Caret;
-import javax.swing.text.DefaultCaret;
-import javax.swing.text.DefaultEditorKit;
-import javax.swing.text.Document;
-import javax.swing.text.Element;
-import javax.swing.text.JTextComponent;
-import javax.swing.text.Utilities;
-import java.awt.*;
-import java.awt.event.ActionEvent;
-import java.awt.event.KeyEvent;
-import java.awt.event.MouseAdapter;
-import java.awt.event.MouseEvent;
-import java.awt.print.PageFormat;
-import java.awt.print.Pageable;
-import java.awt.print.Paper;
-import java.awt.print.Printable;
-import java.awt.print.PrinterException;
-import java.awt.print.PrinterJob;
-import java.util.Calendar;
-import java.util.regex.Pattern;
-
-/**
- * A simple text pane that is printable and wrapping is optional.
- */
-@Deprecated
-public class TextEditor extends JTextPane implements Pageable, Printable {
-
-    public static final String FIND = "Find...";
-    public static final String FIND_NEXT = "Find Next";
-    public static final String FIND_PREVIOUS = "Find Previous";
-    public static final String REPLACE = "Replace...";
-    public static final String AUTO_INDENT = "AutoIndent";
-
-    private static final String TABBED_SPACES = "    ";
-    private static final Pattern TAB_BACK_PATTERN =
-            Pattern.compile("^(([\t])|(    )|(   )|(  )|( ))", Pattern.MULTILINE);
-    private static final Pattern LINE_START =
-            Pattern.compile("^", Pattern.MULTILINE);
-
-    private static final JTextPane PRINT_PANE = new JTextPane();
-    private static final Dimension PRINT_SIZE = new Dimension();
-    private static boolean isOvertypeMode;
-
-    private Caret defaultCaret;
-    private Caret overtypeCaret;
-
-    private static final PageFormat PAGE_FORMAT;
-
-    static {
-        PrinterJob job = PrinterJob.getPrinterJob();
-        PAGE_FORMAT = job.defaultPage();
-    }
-
-    private int numPages;
-
-    private MouseAdapter mouseAdapter =
-            new MouseAdapter() {
-                Cursor cursor;
-
-                public void mouseEntered(MouseEvent me) {
-                    if (contains(me.getPoint())) {
-                        cursor = getCursor();
-                        Cursor curs = Cursor.getPredefinedCursor(Cursor.TEXT_CURSOR);
-                        getRootPane().getLayeredPane().setCursor(curs);
-                    } else {
-                        getRootPane().getLayeredPane().setCursor(cursor);
-                    }
-                }
-
-                public void mouseExited(MouseEvent me) {
-                    getRootPane().getLayeredPane().setCursor(null);
-                }
-            };
-
-    private boolean unwrapped;
-    private boolean tabsAsSpaces;
-    private boolean multiLineTab;
-
-    /**
-     * Creates a new instance of TextEditor
-     */
-    public TextEditor() {
-        this(false);
-    }
-
-    /**
-     * Creates a new instance of TextEditor
-     */
-    public TextEditor(boolean tabsAsSpaces) {
-        this(tabsAsSpaces, false);
-    }
-
-    /**
-     * Creates a new instance of TextEditor
-     */
-    public TextEditor(boolean tabsAsSpaces, boolean multiLineTab) {
-        this(multiLineTab, tabsAsSpaces, false);
-    }
-
-    /**
-     * Creates a new instance of TextEditor
-     */
-    public TextEditor(boolean tabsAsSpaces, boolean multiLineTab, boolean unwrapped) {
-        this.tabsAsSpaces = tabsAsSpaces;
-        this.multiLineTab = multiLineTab;
-        this.unwrapped = unwrapped;
-
-        // remove and replace the delete action to another spot so ctrl H later
-        // on is strictly for showing the find & replace dialog
-        ActionMap aMap = getActionMap();
-        Action action = null;
-        do {
-            action = action == null ? aMap.get(DefaultEditorKit.deletePrevCharAction) : null;
-            aMap.remove(DefaultEditorKit.deletePrevCharAction);
-            aMap = aMap.getParent();
-        } while (aMap != null);
-        aMap = getActionMap();
-        InputMap iMap = getInputMap();
-        KeyStroke keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_BACK_SPACE, 0, false);
-        iMap.put(keyStroke, "delete");
-        keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_BACK_SPACE, KeyEvent.SHIFT_MASK, false);
-        iMap.put(keyStroke, "delete");
-        aMap.put("delete", action);
-
-        // set all the actions
-        action = new FindAction();
-        aMap.put(FIND, action);
-        keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_F, KeyEvent.CTRL_MASK, false);
-        iMap.put(keyStroke, FIND);
-
-        aMap.put(FIND_NEXT, FindReplaceUtility.FIND_ACTION);
-        keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_F3, 0, false);
-        iMap.put(keyStroke, FIND_NEXT);
-
-        aMap.put(FIND_PREVIOUS, FindReplaceUtility.FIND_ACTION);
-        keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_F3, KeyEvent.SHIFT_MASK, false);
-        iMap.put(keyStroke, FIND_PREVIOUS);
-
-        action = new TabAction();
-        aMap.put("TextEditor-tabAction", action);
-        keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_TAB, 0, false);
-        iMap.put(keyStroke, "TextEditor-tabAction");
-
-        action = new ShiftTabAction();
-        aMap.put("TextEditor-shiftTabAction", action);
-        keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_TAB, KeyEvent.SHIFT_MASK, false);
-        iMap.put(keyStroke, "TextEditor-shiftTabAction");
-
-        action = new ReplaceAction();
-        getActionMap().put(REPLACE, action);
-        keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_H, KeyEvent.CTRL_MASK, false);
-        do {
-            iMap.remove(keyStroke);
-            iMap = iMap.getParent();
-        } while (iMap != null);
-        getInputMap().put(keyStroke, REPLACE);
-
-        action = new AutoIndentAction();
-        getActionMap().put(AUTO_INDENT, action);
-        keyStroke = KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0, false);
-        getInputMap().put(keyStroke, AUTO_INDENT);
-
-        setAutoscrolls(true);
-
-        defaultCaret = getCaret();
-        overtypeCaret = new OvertypeCaret();
-        overtypeCaret.setBlinkRate(defaultCaret.getBlinkRate());
-    }
-
-    public void addNotify() {
-        super.addNotify();
-        addMouseListener(mouseAdapter);
-        FindReplaceUtility.registerTextComponent(this);
-    }
-
-    public int getNumberOfPages() {
-        Paper paper = PAGE_FORMAT.getPaper();
-        numPages = (int) Math.ceil(getSize().getHeight() / paper.getImageableHeight());
-        return numPages;
-    }
-
-    public PageFormat getPageFormat(int pageIndex) throws IndexOutOfBoundsException {
-        return PAGE_FORMAT;
-    }
-
-    public Printable getPrintable(int param) throws IndexOutOfBoundsException {
-        return this;
-    }
-
-    public int print(Graphics graphics, PageFormat pageFormat, int page)
-            throws PrinterException {
-        if (page < numPages) {
-            Paper paper = pageFormat.getPaper();
-
-            // initialize the PRINT_PANE (need this so that wrapping
-            // can take place)
-            PRINT_PANE.setDocument(getDocument());
-
-            PRINT_PANE.setFont(getFont());
-            PRINT_SIZE.setSize(paper.getImageableWidth(),
-                    getSize().getHeight());
-            PRINT_PANE.setSize(PRINT_SIZE);
-
-            // translate the graphics origin upwards so the area of the page we
-            // want to print is in the origin; the clipping region auto set
-            // will take care of the rest
-            double y = -(page * paper.getImageableHeight()) + paper.getImageableY();
-
-            ((Graphics2D) graphics).translate(paper.getImageableX(), y);
-
-            // print the text with its own routines
-            PRINT_PANE.print(graphics);
-
-            // translate the graphics object back to reality in the y dimension
-            // so we can print a page number
-            ((Graphics2D) graphics).translate(0, -y);
-            Rectangle rect = graphics.getClipBounds();
-            graphics.setClip(rect.x, 0, rect.width, (int) paper.getHeight() + 100);
-
-            // get the name of the pane (or user name) and the time for the header
-            Calendar cal = Calendar.getInstance();
-            String header = cal.getTime().toString().trim();
-            String name = getName() == null ?
-                    System.getProperty("user.name").trim() : getName().trim();
-            String pageStr = String.valueOf(page + 1);
-
-            Font font = Font.decode("Monospaced 8");
-            graphics.setFont(font);
-            FontMetrics fm = graphics.getFontMetrics(font);
-            int width = SwingUtilities.computeStringWidth(fm, header);
-            ((Graphics2D) graphics).drawString(header,
-                    (float) (paper.getImageableWidth() / 2 - width / 2),
-                    (float) paper.getImageableY() / 2 + fm.getHeight());
-
-            ((Graphics2D) graphics).translate(0, paper.getImageableY() - fm.getHeight());
-            double height = paper.getImageableHeight() + paper.getImageableY() / 2;
-            width = SwingUtilities.computeStringWidth(fm, name);
-            ((Graphics2D) graphics).drawString(name,
-                    (float) (paper.getImageableWidth() / 2 - width / 2),
-                    (float) height - fm.getHeight() / 2);
-
-            ((Graphics2D) graphics).translate(0, fm.getHeight());
-            width = SwingUtilities.computeStringWidth(fm, pageStr);
-            ((Graphics2D) graphics).drawString(pageStr,
-                    (float) (paper.getImageableWidth() / 2 - width / 2),
-                    (float) height - fm.getHeight() / 2);
-
-            return Printable.PAGE_EXISTS;
-        }
-        return Printable.NO_SUCH_PAGE;
-    }
-
-    public boolean getScrollableTracksViewportWidth() {
-        boolean bool = super.getScrollableTracksViewportWidth();
-        if (unwrapped) {
-            Component parent = this.getParent();
-            ComponentUI ui = this.getUI();
-            int uiWidth = ui.getPreferredSize(this).width;
-            bool = (parent == null) || (uiWidth < parent.getSize().width);
-        }
-        return bool;
-    }
-
-    /**
-     * Whether using the tab key indents the selected lines of code
-     *
-     * @return true if multiline tabbing is active
-     */
-    public boolean isMultiLineTabbed() {
-        return multiLineTab;
-    }
-
-    /**
-     * @return true if overtype mode is active, false for insert mode
-     */
-    public static boolean isOvertypeMode() {
-        return isOvertypeMode;
-    }
-
-    /**
-     * @return true if tabs are converted to spaces upon typing
-     */
-    public boolean isTabsAsSpaces() {
-        return tabsAsSpaces;
-    }
-
-    /**
-     * @return true if text wrapping is disabled
-     */
-    public boolean isUnwrapped() {
-        return unwrapped;
-    }
-
-    protected void processKeyEvent(KeyEvent e) {
-        super.processKeyEvent(e);
-
-        //  Handle release of Insert key to toggle overtype/insert mode
-        //  unless a modifier is active (eg Shift+Insert for paste or
-        //  Ctrl+Insert for Copy)
-        if (e.getID() == KeyEvent.KEY_RELEASED &&
-                e.getKeyCode() == KeyEvent.VK_INSERT &&
-                e.getModifiersEx() == 0) {
-            setOvertypeMode(!isOvertypeMode());
-        }
-    }
-
-    public void removeNotify() {
-        super.removeNotify();
-        removeMouseListener(mouseAdapter);
-        FindReplaceUtility.unregisterTextComponent(this);
-    }
-
-    public void replaceSelection(String text) {
-        //  Implement overtype mode by selecting the character at the current
-        //  caret position
-        if (isOvertypeMode()) {
-            int pos = getCaretPosition();
-            if (getSelectedText() == null && pos < getDocument().getLength()) {
-                moveCaretPosition(pos + 1);
-            }
-        }
-        super.replaceSelection(text);
-    }
-
-    public void setBounds(int x, int y, int width, int height) {
-        if (unwrapped) {
-            Dimension size = this.getPreferredSize();
-            super.setBounds(x, y,
-                    Math.max(size.width, width),
-                    Math.max(size.height, height));
-        } else {
-            super.setBounds(x, y, width, height);
-        }
-    }
-
-    /**
-     * @param multiLineTab the new multiLine tab value
-     */
-    public void isMultiLineTabbed(boolean multiLineTab) {
-        this.multiLineTab = multiLineTab;
-    }
-
-    /**
-     * @param tabsAsSpaces whether tabs are converted to spaces
-     */
-    public void isTabsAsSpaces(boolean tabsAsSpaces) {
-        this.tabsAsSpaces = tabsAsSpaces;
-    }
-
-    /**
-     * Set the caret to use depending on overtype/insert mode
-     *
-     * @param isOvertypeMode the new mode; true = overtype
-     */
-    public void setOvertypeMode(boolean isOvertypeMode) {
-        TextEditor.isOvertypeMode = isOvertypeMode;
-        int pos = getCaretPosition();
-        setCaret(isOvertypeMode() ? overtypeCaret : defaultCaret);
-        setCaretPosition(pos);
-    }
-
-    /**
-     * @param unwrapped the new unwrapped value
-     */
-    public void setUnwrapped(boolean unwrapped) {
-        this.unwrapped = unwrapped;
-    }
-
-    private static class FindAction extends AbstractAction {
-        public void actionPerformed(ActionEvent ae) {
-            FindReplaceUtility.showDialog();
-        }
-    }
-
-    private static class ReplaceAction extends AbstractAction {
-        public void actionPerformed(ActionEvent ae) {
-            FindReplaceUtility.showDialog(true);
-        }
-    }
-
-    private class ShiftTabAction extends AbstractAction {
-        public void actionPerformed(ActionEvent ae) {
-            try {
-                if (multiLineTab && TextEditor.this.getSelectedText() != null) {
-                    int end = Utilities.getRowEnd(TextEditor.this, getSelectionEnd());
-                    TextEditor.this.setSelectionEnd(end);
-
-                    Element el = Utilities.getParagraphElement(TextEditor.this, getSelectionStart());
-                    int start = el.getStartOffset();
-                    TextEditor.this.setSelectionStart(start);
-
-                    // remove text and reselect the text
-                    String text = tabsAsSpaces ?
-                            TAB_BACK_PATTERN.matcher(getSelectedText()).replaceAll("") :
-                            getSelectedText().replaceAll("^\t", "");
-
-                    TextEditor.this.replaceSelection(text);
-
-                    TextEditor.this.select(start, start + text.length());
-                }
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        }
-    }
-
-    private class TabAction extends AbstractAction {
-        public void actionPerformed(ActionEvent ae) {
-            try {
-                Document doc = TextEditor.this.getDocument();
-                String text = tabsAsSpaces ? TABBED_SPACES : "\t";
-                if (multiLineTab && getSelectedText() != null) {
-                    int end = Utilities.getRowEnd(TextEditor.this, getSelectionEnd());
-                    TextEditor.this.setSelectionEnd(end);
-
-                    Element el = Utilities.getParagraphElement(TextEditor.this, getSelectionStart());
-                    int start = el.getStartOffset();
-                    TextEditor.this.setSelectionStart(start);
-
-                    String toReplace = TextEditor.this.getSelectedText();
-                    toReplace = LINE_START.matcher(toReplace).replaceAll(text);
-                    TextEditor.this.replaceSelection(toReplace);
-                    TextEditor.this.select(start, start + toReplace.length());
-                } else {
-                    int pos = TextEditor.this.getCaretPosition();
-                    doc.insertString(pos, text, null);
-                }
-            } catch (Exception e) {
-                e.printStackTrace();
-            }
-        }
-    }
-
-    /**
-     * Paint a horizontal line the width of a column and 1 pixel high
-     */
-    private static class OvertypeCaret extends DefaultCaret {
-        //The overtype caret will simply be a horizontal line one pixel high
-        // (once we determine where to paint it)
-        public void paint(Graphics g) {
-            if (isVisible()) {
-                try {
-                    JTextComponent component = getComponent();
-                    Rectangle r = component.getUI().modelToView(component, getDot());
-                    Color c = g.getColor();
-                    g.setColor(component.getBackground());
-                    g.setXORMode(component.getCaretColor());
-                    r.setBounds(r.x, r.y,
-                            g.getFontMetrics().charWidth('w'),
-                            g.getFontMetrics().getHeight());
-                    g.fillRect(r.x, r.y, r.width, r.height);
-                    g.setPaintMode();
-                    g.setColor(c);
-                } catch (BadLocationException e) {
-                    e.printStackTrace();
-                }
-            }
-        }
-
-        /*
-         *  Damage must be overridden whenever the paint method is overridden
-         *  (The damaged area is the area the caret is painted in. We must
-         *  consider the area for the default caret and this caret)
-         */
-        protected synchronized void damage(Rectangle r) {
-            if (r != null) {
-                JTextComponent component = getComponent();
-                x = r.x;
-                y = r.y;
-                Font font = component.getFont();
-                width = component.getFontMetrics(font).charWidth('w');
-                height = r.height;
-                repaint();
-            }
-        }
-    }
-}
diff --git a/subprojects/groovy-console/src/main/groovy/groovy/ui/text/TextUndoManager.java b/subprojects/groovy-console/src/main/groovy/groovy/ui/text/TextUndoManager.java
deleted file mode 100644
index 4a32300..0000000
--- a/subprojects/groovy-console/src/main/groovy/groovy/ui/text/TextUndoManager.java
+++ /dev/null
@@ -1,201 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package groovy.ui.text;
-
-import javax.swing.event.SwingPropertyChangeSupport;
-import javax.swing.event.UndoableEditEvent;
-import javax.swing.undo.CompoundEdit;
-import javax.swing.undo.UndoManager;
-import javax.swing.undo.UndoableEdit;
-import java.beans.PropertyChangeListener;
-
-/**
- * To use this, simply drop this as an UndoableEditListener into your document,
- * and then create actions to call undo/redo as needed (checking can undo/redo
- * first, of course).
- */
-@Deprecated
-public class TextUndoManager extends UndoManager {
-
-    private SwingPropertyChangeSupport propChangeSupport =
-            new SwingPropertyChangeSupport(this);
-
-    private StructuredEdit compoundEdit = new StructuredEdit();
-
-    private long firstModified;
-
-    private UndoableEdit modificationMarker = editToBeUndone();
-
-    /**
-     * Creates a new instance of TextUndoManager.
-     */
-    public TextUndoManager() {
-    }
-
-    public void addPropertyChangeListener(PropertyChangeListener pcl) {
-        propChangeSupport.addPropertyChangeListener(pcl);
-    }
-
-    public void die() {
-        boolean undoable = canUndo();
-        super.die();
-        firePropertyChangeEvent(UndoManager.UndoName, undoable, canUndo());
-    }
-
-    public void discardAllEdits() {
-        boolean undoable = canUndo();
-        boolean redoable = canRedo();
-
-        boolean changed = hasChanged();
-        super.discardAllEdits();
-        modificationMarker = editToBeUndone();
-
-        firePropertyChangeEvent(UndoManager.UndoName, undoable, canUndo());
-        firePropertyChangeEvent(UndoManager.UndoName, redoable, canRedo());
-    }
-
-    protected void firePropertyChangeEvent(String name,
-                                           boolean oldValue,
-                                           boolean newValue) {
-        propChangeSupport.firePropertyChange(name, oldValue, newValue);
-    }
-
-    public boolean hasChanged() {
-        return modificationMarker != editToBeUndone();
-    }
-
-    public void redo() throws javax.swing.undo.CannotRedoException {
-        compoundEdit.end();
-
-        if (firstModified == 0) {
-            firstModified = ((StructuredEdit) editToBeRedone()).editedTime();
-        }
-
-        boolean undoable = canUndo();
-
-        boolean changed = hasChanged();
-        super.redo();
-
-        firePropertyChangeEvent(UndoManager.UndoName, undoable, canUndo());
-    }
-
-    protected void redoTo(UndoableEdit edit) {
-        compoundEdit.end();
-
-        if (firstModified == 0) {
-            firstModified = ((StructuredEdit) editToBeRedone()).editedTime();
-        }
-
-        boolean undoable = canUndo();
-
-        boolean changed = hasChanged();
-        super.redoTo(edit);
-
-        firePropertyChangeEvent(UndoManager.UndoName, undoable, canUndo());
-
-    }
-
-    public void removePropertyChangeListener(PropertyChangeListener pcl) {
-        propChangeSupport.removePropertyChangeListener(pcl);
-    }
-
-    public void reset() {
-        boolean changed = modificationMarker != editToBeUndone();
-        if (changed) {
-            modificationMarker = editToBeUndone();
-        }
-    }
-
-    protected void trimEdits(int from, int to) {
-        boolean undoable = canUndo();
-        boolean redoable = canRedo();
-
-        boolean changed = hasChanged();
-        super.trimEdits(from, to);
-
-        firePropertyChangeEvent(UndoManager.UndoName, undoable, canUndo());
-        firePropertyChangeEvent(UndoManager.RedoName, redoable, canRedo());
-    }
-
-    public void undo() throws javax.swing.undo.CannotUndoException {
-        compoundEdit.end();
-
-        UndoableEdit edit = editToBeUndone();
-        if (((StructuredEdit) editToBeUndone()).editedTime() ==
-                firstModified) {
-            firstModified = 0;
-        } else if (firstModified == 0) {
-            firstModified = ((StructuredEdit) editToBeUndone()).editedTime();
-        }
-
-        boolean redoable = canRedo();
-        boolean changed = hasChanged();
-        super.undo();
-        firePropertyChangeEvent(UndoManager.RedoName, redoable, canRedo());
-    }
-
-    public void undoableEditHappened(UndoableEditEvent uee) {
-        UndoableEdit edit = uee.getEdit();
-        boolean undoable = canUndo();
-
-        long editTime = System.currentTimeMillis();
-
-        if (firstModified == 0 ||
-                editTime - compoundEdit.editedTime() > 700) {
-            compoundEdit.end();
-            compoundEdit = new StructuredEdit();
-        }
-        compoundEdit.addEdit(edit);
-
-        firstModified = firstModified == 0 ?
-                compoundEdit.editedTime() : firstModified;
-
-        if (lastEdit() != compoundEdit) {
-            boolean changed = hasChanged();
-            addEdit(compoundEdit);
-            firePropertyChangeEvent(UndoManager.UndoName, undoable, canUndo());
-        }
-
-    }
-
-    private static class StructuredEdit extends CompoundEdit {
-
-        private long editedTime;
-
-        public boolean addEdit(UndoableEdit edit) {
-            boolean result = super.addEdit(edit);
-            if (result && editedTime == 0) {
-                editedTime = System.currentTimeMillis();
-            }
-            return result;
-        }
-
-        public boolean canUndo() {
-            return !edits.isEmpty();
-        }
-
-        protected long editedTime() {
-            return editedTime;
-        }
-
-        public boolean isInProgress() {
-            return false;
-        }
-    }
-}
diff --git a/subprojects/groovy-console/src/main/groovy/groovy/ui/text/package.html b/subprojects/groovy-console/src/main/groovy/groovy/ui/text/package.html
deleted file mode 100644
index 390544d..0000000
--- a/subprojects/groovy-console/src/main/groovy/groovy/ui/text/package.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<!--
-
-     Licensed to the Apache Software Foundation (ASF) under one
-     or more contributor license agreements.  See the NOTICE file
-     distributed with this work for additional information
-     regarding copyright ownership.  The ASF licenses this file
-     to you under the Apache License, Version 2.0 (the
-     "License"); you may not use this file except in compliance
-     with the License.  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing,
-     software distributed under the License is distributed on an
-     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-     KIND, either express or implied.  See the License for the
-     specific language governing permissions and limitations
-     under the License.
-
--->
-<html>
-  <head>
-    <title>package groovy.ui.text.*</title>
-  </head>
-  <body>
-    <p>Text processing helpers for the interactive command line terminal.</p>
-  </body>
-</html>
diff --git a/subprojects/groovy-console/src/main/groovy/groovy/ui/view/BasicContentPane.groovy b/subprojects/groovy-console/src/main/groovy/groovy/ui/view/BasicContentPane.groovy
deleted file mode 100644
index d7794b8..0000000
--- a/subprojects/groovy-console/src/main/groovy/groovy/ui/view/BasicContentPane.groovy
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package groovy.ui.view
-
-import groovy.ui.Console
-import groovy.ui.ConsoleTextEditor
-import groovy.ui.text.SmartDocumentFilter
-
-import javax.swing.JSplitPane
-import javax.swing.WindowConstants
-import javax.swing.text.Style
-import javax.swing.text.StyleConstants
-import javax.swing.text.StyleContext
-import javax.swing.text.StyledDocument
-import java.awt.BorderLayout
-import java.awt.Color
-import java.awt.Dimension
-import java.awt.Font
-import java.awt.FontMetrics
-import java.awt.Graphics
-import java.awt.GraphicsEnvironment
-import java.awt.image.BufferedImage
-import java.util.prefs.Preferences
-
-import static javax.swing.JSplitPane.HORIZONTAL_SPLIT
-import static javax.swing.JSplitPane.VERTICAL_SPLIT
-
-Preferences prefs = Preferences.userNodeForPackage(Console)
-def detachedOutputFlag = prefs.getBoolean('detachedOutput', false)
-outputWindow = frame(visible:false, defaultCloseOperation: WindowConstants.HIDE_ON_CLOSE) {
-    blank = glue()
-    blank.preferredSize = [0, 0] as Dimension
-}
-splitPane = splitPane(resizeWeight: 0.5, orientation:
-        prefs.getBoolean('orientationVertical', true) ? VERTICAL_SPLIT : HORIZONTAL_SPLIT) {
-    def editor = new ConsoleTextEditor()
-    boolean smartHighlighterEnabled = Console.smartHighlighter
-    if (smartHighlighterEnabled) {
-        editor.enableHighLighter(SmartDocumentFilter)
-    }
-    inputEditor = widget(editor, border:emptyBorder(0))
-    buildOutputArea(prefs)
-}
-
-private def buildOutputArea(prefs) {
-    scrollArea = scrollPane(border: emptyBorder(0)) {
-        outputArea = textPane(
-                editable: false,
-                name: 'outputArea',
-                contentType: 'text/html',
-                background: new Color(255, 255, 218),
-                font: new Font('Monospaced', Font.PLAIN, prefs.getInt('fontSize', 12)),
-                border: emptyBorder(4)
-        )
-    }
-}
-
-
-inputArea = inputEditor.textEditor
-// attach ctrl-enter to input area
-// need to wrap in actions to keep it from being added as a component
-actions {
-    container(inputArea, name: 'inputArea', font:new Font('Monospaced', Font.PLAIN, prefs.getInt('fontSize', 12)), border:emptyBorder(4)) {
-        action(runAction)
-        action(runSelectionAction)
-        action(showOutputWindowAction)
-    }
-    container(outputArea, name: 'outputArea') {
-        action(hideOutputWindowAction1)
-        action(hideOutputWindowAction2)
-        action(hideOutputWindowAction3)
-        action(hideOutputWindowAction4)
-    }
-}
-
-// add styles to the output area, should this be moved into SwingBuilder somehow?
-outputArea.font = new Font('Monospaced', outputArea.font.style, outputArea.font.size)
-StyledDocument doc = outputArea.styledDocument
-
-Style defStyle = StyleContext.defaultStyleContext.getStyle(StyleContext.DEFAULT_STYLE)
-
-def applyStyle = {Style style, values -> values.each{k, v -> style.addAttribute(k, v)}}
-
-Style regular = doc.addStyle('regular', defStyle)
-applyStyle(regular, styles.regular)
-
-promptStyle = doc.addStyle('prompt', regular)
-applyStyle(promptStyle, styles.prompt)
-
-commandStyle = doc.addStyle('command', regular)
-applyStyle(commandStyle, styles.command)
-
-outputStyle = doc.addStyle('output', regular)
-applyStyle(outputStyle, styles.output)
-
-resultStyle = doc.addStyle('result', regular)
-applyStyle(resultStyle, styles.result)
-
-stacktraceStyle = doc.addStyle('stacktrace', regular)
-applyStyle(stacktraceStyle, styles.stacktrace)
-
-hyperlinkStyle = doc.addStyle('hyperlink', regular)
-applyStyle(hyperlinkStyle, styles.hyperlink)
-
-// redo styles for editor
-doc = inputArea.styledDocument
-StyleContext styleContext = StyleContext.defaultStyleContext
-styles.each {styleName, defs ->
-    Style style = styleContext.getStyle(styleName)
-    if (style) {
-        applyStyle(style, defs)
-        String family = defs[StyleConstants.FontFamily]
-        if (style.name == 'default' && family) {
-            inputEditor.defaultFamily = family
-            inputArea.font = new Font(family, Font.PLAIN, inputArea.font.size)
-        }
-    }
-}
-
-// set the preferred size of the input and output areas
-// this is a good enough solution, there are margins and scrollbars and such to worry about for 80x12x2
-Graphics g = GraphicsEnvironment.localGraphicsEnvironment.createGraphics (new BufferedImage(100, 100, BufferedImage.TYPE_INT_RGB))
-FontMetrics fm = g.getFontMetrics(outputArea.font)
-
-outputArea.preferredSize = [
-    prefs.getInt('outputAreaWidth', fm.charWidth(0x77) * 81),
-    prefs.getInt('outputAreaHeight', (fm.getHeight() + fm.getLeading()) * 12)
-] as Dimension
-
-inputEditor.preferredSize = [
-    prefs.getInt('inputAreaWidth', fm.charWidth(0x77) * 81),
-    prefs.getInt('inputAreaHeight', (fm.getHeight() + fm.getLeading()) * 12)
-] as Dimension
-
-origDividerSize = -1
-if (detachedOutputFlag) {
-    splitPane.add(blank, JSplitPane.BOTTOM)
-    origDividerSize = splitPane.dividerSize
-    splitPane.dividerSize = 0
-    splitPane.resizeWeight = 1.0
-    outputWindow.add(scrollArea, BorderLayout.CENTER)
-}
diff --git a/subprojects/groovy-console/src/main/groovy/groovy/ui/view/BasicMenuBar.groovy b/subprojects/groovy-console/src/main/groovy/groovy/ui/view/BasicMenuBar.groovy
deleted file mode 100644
index 737c4a1..0000000
--- a/subprojects/groovy-console/src/main/groovy/groovy/ui/view/BasicMenuBar.groovy
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package groovy.ui.view
-
-menuBar {
-    menu(text: 'File', mnemonic: 'F') {
-        menuItem(newFileAction)
-        menuItem(newWindowAction)
-        menuItem(openAction)
-        separator()
-        menuItem(saveAction)
-        menuItem(saveAsAction)
-        separator()
-        menuItem(printAction)
-        separator()
-        menuItem(exitAction)
-    }
-
-    menu(text: 'Edit', mnemonic: 'E') {
-        menuItem(undoAction)
-        menuItem(redoAction)
-        separator()
-        menuItem(cutAction)
-        menuItem(copyAction)
-        menuItem(pasteAction)
-        separator()
-        menuItem(findAction)
-        menuItem(findNextAction)
-        menuItem(findPreviousAction)
-        menuItem(replaceAction)
-        separator()
-        menuItem(selectAllAction)
-	separator()
-	menuItem(commentAction)
-        menuItem(selectBlockAction)
-        separator()
-        menuItem(preferencesAction)
-    }
-
-    menu(text: 'View', mnemonic: 'V') {
-        menuItem(clearOutputAction)
-        separator()
-        menuItem(largerFontAction)
-        menuItem(smallerFontAction)
-        checkBoxMenuItem(smartHighlighterAction, selected: controller.smartHighlighter)
-        separator()
-        checkBoxMenuItem(captureStdOutAction, selected: controller.captureStdOut)
-        checkBoxMenuItem(captureStdErrAction, selected: controller.captureStdErr)
-        checkBoxMenuItem(fullStackTracesAction, selected: controller.fullStackTraces)
-        checkBoxMenuItem(showScriptInOutputAction, selected: controller.showScriptInOutput)
-        checkBoxMenuItem(visualizeScriptResultsAction, selected: controller.visualizeScriptResults)
-        checkBoxMenuItem(showToolbarAction, selected: controller.showToolbar)
-        checkBoxMenuItem(detachedOutputAction, selected: controller.detachedOutput)
-        checkBoxMenuItem(autoClearOutputAction, selected: controller.autoClearOutput)
-        checkBoxMenuItem(orientationVerticalAction, selected: controller.orientationVertical)
-    }
-
-    menu(text: 'History', mnemonic: 'I') {
-        menuItem(historyPrevAction)
-        menuItem(historyNextAction)
-    }
-
-    menu(text: 'Script', mnemonic: 'S') {
-        menuItem(runAction)
-        checkBoxMenuItem(saveOnRunAction, selected: controller.saveOnRun)
-        menuItem(runSelectionAction)
-        checkBoxMenuItem(threadInterruptAction, selected: controller.threadInterrupt)
-        menuItem(interruptAction)
-        menuItem(compileAction)
-        checkBoxMenuItem(indyAction, selected: controller.indy)
-        separator()
-        menuItem(addClasspathJar)
-        menuItem(addClasspathDir)
-        menuItem(listClasspath)
-        menuItem(clearClassloader)
-        separator()
-        menuItem(inspectLastAction)
-        menuItem(inspectVariablesAction)
-        menuItem(inspectAstAction)
-        menuItem(inspectTokensAction)
-    }
-
-    menu(text: 'Help', mnemonic: 'H') {
-        menuItem(aboutAction)
-    }
-}
diff --git a/subprojects/groovy-console/src/main/groovy/groovy/ui/view/BasicStatusBar.groovy b/subprojects/groovy-console/src/main/groovy/groovy/ui/view/BasicStatusBar.groovy
deleted file mode 100644
index 02048f1..0000000
--- a/subprojects/groovy-console/src/main/groovy/groovy/ui/view/BasicStatusBar.groovy
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package groovy.ui.view
-
-import javax.swing.*
-import java.awt.*
-
-statusPanel = panel(constraints: BorderLayout.SOUTH) {
-    gridBagLayout()
-    separator(gridwidth:GridBagConstraints.REMAINDER, fill:GridBagConstraints.HORIZONTAL)
-    status = label("Welcome to Groovy ${GroovySystem.version}.",
-        weightx:1.0,
-        anchor:GridBagConstraints.WEST,
-        fill:GridBagConstraints.HORIZONTAL,
-        insets: [1,3,1,3])
-    separator(orientation:SwingConstants.VERTICAL, fill:GridBagConstraints.VERTICAL)
-    rowNumAndColNum = label('1:1', insets: [1,3,1,3])
-}
diff --git a/subprojects/groovy-console/src/main/groovy/groovy/ui/view/BasicToolBar.groovy b/subprojects/groovy-console/src/main/groovy/groovy/ui/view/BasicToolBar.groovy
deleted file mode 100644
index 849ca16..0000000
--- a/subprojects/groovy-console/src/main/groovy/groovy/ui/view/BasicToolBar.groovy
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
... 784 lines suppressed ...


[groovy] 06/23: don't use deprecated version of class

Posted by pa...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

paulk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git

commit ae12a9140d05b99ea84299e7e3a3c51b10e1aa8e
Author: Paul King <pa...@asert.com.au>
AuthorDate: Wed Sep 18 13:02:43 2019 +1000

    don't use deprecated version of class
---
 .../groovy/org/apache/groovy/groovysh/commands/InspectCommand.groovy    | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/subprojects/groovy-groovysh/src/main/groovy/org/apache/groovy/groovysh/commands/InspectCommand.groovy b/subprojects/groovy-groovysh/src/main/groovy/org/apache/groovy/groovysh/commands/InspectCommand.groovy
index eee2a10..6fc947b 100644
--- a/subprojects/groovy-groovysh/src/main/groovy/org/apache/groovy/groovysh/commands/InspectCommand.groovy
+++ b/subprojects/groovy-groovysh/src/main/groovy/org/apache/groovy/groovysh/commands/InspectCommand.groovy
@@ -18,7 +18,7 @@
  */
 package org.apache.groovy.groovysh.commands
 
-import groovy.inspect.swingui.ObjectBrowser
+import groovy.console.ui.ObjectBrowser
 import jline.console.completer.Completer
 import org.apache.groovy.groovysh.CommandSupport
 import org.apache.groovy.groovysh.Groovysh


[groovy] 10/23: don't use deprecated version of resources

Posted by pa...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

paulk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git

commit 2f9351694aa408d5161978b6ee31b9df90491d57
Author: Paul King <pa...@asert.com.au>
AuthorDate: Wed Sep 18 19:28:30 2019 +1000

    don't use deprecated version of resources
---
 .../groovy-console/src/main/groovy/groovy/console/ui/Console.groovy | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/subprojects/groovy-console/src/main/groovy/groovy/console/ui/Console.groovy b/subprojects/groovy-console/src/main/groovy/groovy/console/ui/Console.groovy
index 712a449..c5a6473 100644
--- a/subprojects/groovy-console/src/main/groovy/groovy/console/ui/Console.groovy
+++ b/subprojects/groovy-console/src/main/groovy/groovy/console/ui/Console.groovy
@@ -217,9 +217,9 @@ class Console implements CaretListener, HyperlinkListener, ComponentListener, Fo
     Closure beforeExecution
     Closure afterExecution
 
-    public static URL ICON_PATH = Console.class.classLoader.getResource('groovy/ui/ConsoleIcon.png')
+    public static URL ICON_PATH = Console.class.classLoader.getResource('groovy/console/ui/ConsoleIcon.png')
     // used by ObjectBrowser and AST Viewer
-    public static URL NODE_ICON_PATH = Console.class.classLoader.getResource('groovy/ui/icons/bullet_green.png')
+    public static URL NODE_ICON_PATH = Console.class.classLoader.getResource('groovy/console/ui/icons/bullet_green.png')
     // used by AST Viewer
 
     static groovyFileFilter = new GroovyFileFilter()
@@ -394,7 +394,7 @@ class Console implements CaretListener, HyperlinkListener, ComponentListener, Fo
                 frame(
                         title: 'GroovyConsole',
                         //location: [100,100], // in groovy 2.0 use platform default location
-                        iconImage: imageIcon('/groovy/ui/ConsoleIcon.png').image,
+                        iconImage: imageIcon('/groovy/console/ui/ConsoleIcon.png').image,
                         defaultCloseOperation: JFrame.DO_NOTHING_ON_CLOSE,
                 ) {
                     try {


[groovy] 23/23: Merge branch 'master' of https://gitbox.apache.org/repos/asf/groovy

Posted by pa...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

paulk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git

commit 7f4fbef7a2bf15e15ca32a2cdf3f9991fdf60739
Merge: 8df8307 7f3675e
Author: Paul King <pa...@asert.com.au>
AuthorDate: Thu Sep 26 10:25:40 2019 +1000

    Merge branch 'master' of https://gitbox.apache.org/repos/asf/groovy



[groovy] 05/23: maven coords moved to apache for 4.0.x

Posted by pa...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

paulk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git

commit b86049146ef2d91f17506370bd5a865b724aac69
Author: Paul King <pa...@asert.com.au>
AuthorDate: Wed Sep 18 10:00:35 2019 +1000

    maven coords moved to apache for 4.0.x
---
 gradle/pomconfigurer.gradle | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/gradle/pomconfigurer.gradle b/gradle/pomconfigurer.gradle
index b9586cb..241fec6 100644
--- a/gradle/pomconfigurer.gradle
+++ b/gradle/pomconfigurer.gradle
@@ -17,7 +17,7 @@
  *  under the License.
  */
 
-group = 'org.codehaus.groovy'
+group = 'org.apache.groovy'
 
 project.ext.optionalDeps = []
 project.ext.providedDeps = []
@@ -28,7 +28,7 @@ project.ext.provided = { project.ext.providedDeps << it }
 project.ext.pomConfigureClosureWithoutTweaks = {
     project {
         name 'Apache Groovy'
-        description 'Groovy: A powerful, dynamic language for the JVM'
+        description 'Groovy: A powerful multi-faceted language for the JVM'
         url 'https://groovy-lang.org'
         inceptionYear '2003'
         organization {


[groovy] 04/23: master is now 4.0.x

Posted by pa...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

paulk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git

commit ecfeaecf4f8db9043f94292dfb1395105791902f
Author: Paul King <pa...@asert.com.au>
AuthorDate: Wed Sep 18 09:58:07 2019 +1000

    master is now 4.0.x
---
 gradle.properties | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/gradle.properties b/gradle.properties
index b1aa598..62d9a06 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -13,9 +13,9 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-groovyVersion = 3.0.0-SNAPSHOT
+groovyVersion = 4.0.0-SNAPSHOT
 # bundle version format: major('.'minor('.'micro('.'qualifier)?)?)? (first 3 only digits)
-groovyBundleVersion = 3.0.0.SNAPSHOT
+groovyBundleVersion = 4.0.0.SNAPSHOT
 
 gradle_version=5.6.2
 


[groovy] 14/23: don't use deprecated version of class

Posted by pa...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

paulk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git

commit 2e9922303334ecac1b8da67c8e63e00b0d260c91
Author: Paul King <pa...@asert.com.au>
AuthorDate: Thu Sep 19 16:34:09 2019 +1000

    don't use deprecated version of class
---
 .../groovy/org/apache/groovy/groovysh/util/XmlCommandRegistrar.groovy   | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/subprojects/groovy-groovysh/src/main/groovy/org/apache/groovy/groovysh/util/XmlCommandRegistrar.groovy b/subprojects/groovy-groovysh/src/main/groovy/org/apache/groovy/groovysh/util/XmlCommandRegistrar.groovy
index f0394e6..e77d66b 100644
--- a/subprojects/groovy-groovysh/src/main/groovy/org/apache/groovy/groovysh/util/XmlCommandRegistrar.groovy
+++ b/subprojects/groovy-groovysh/src/main/groovy/org/apache/groovy/groovysh/util/XmlCommandRegistrar.groovy
@@ -74,7 +74,7 @@ class XmlCommandRegistrar {
         }
 
         url.withReader { Reader reader ->
-            groovy.util.Node doc = new groovy.util.XmlParser().parse(reader)
+            groovy.util.Node doc = new groovy.xml.XmlParser().parse(reader)
 
             doc.children().each { groovy.util.Node element ->
                 String classname = element.text()


[groovy] 19/23: GROOVY-9254: Split package renaming second stage (remove violating packages)

Posted by pa...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

paulk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git

commit facdf032df6c6f29d93e88c24ed37544895b85fd
Author: Paul King <pa...@asert.com.au>
AuthorDate: Thu Sep 19 21:29:45 2019 +1000

    GROOVY-9254: Split package renaming second stage (remove violating packages)
---
 .../spec/test/groovy/util/CliBuilderTest.groovy    | 28 ----------------------
 1 file changed, 28 deletions(-)

diff --git a/subprojects/groovy-cli-commons/src/spec/test/groovy/util/CliBuilderTest.groovy b/subprojects/groovy-cli-commons/src/spec/test/groovy/util/CliBuilderTest.groovy
deleted file mode 100644
index a0d513c..0000000
--- a/subprojects/groovy-cli-commons/src/spec/test/groovy/util/CliBuilderTest.groovy
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package groovy.util
-
-import cli.CliBuilderTestCase
-
-// test groovy.util legacy delegate
-class CliBuilderTest extends CliBuilderTestCase {
-
-    String getImportCliBuilder() { '' }
-
-}


[groovy] 07/23: don't use deprecated version of class

Posted by pa...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

paulk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git

commit 0b84570f700d455f2565c25c74e081cb463da28a
Author: Paul King <pa...@asert.com.au>
AuthorDate: Wed Sep 18 18:31:59 2019 +1000

    don't use deprecated version of class
---
 .../test/groovy/groovy/console/ui/HistoryRecordGetTextToRunTests.groovy  | 1 -
 1 file changed, 1 deletion(-)

diff --git a/subprojects/groovy-console/src/test/groovy/groovy/console/ui/HistoryRecordGetTextToRunTests.groovy b/subprojects/groovy-console/src/test/groovy/groovy/console/ui/HistoryRecordGetTextToRunTests.groovy
index 2a9127e..7e3d583 100644
--- a/subprojects/groovy-console/src/test/groovy/groovy/console/ui/HistoryRecordGetTextToRunTests.groovy
+++ b/subprojects/groovy-console/src/test/groovy/groovy/console/ui/HistoryRecordGetTextToRunTests.groovy
@@ -18,7 +18,6 @@
  */
 package groovy.console.ui
 
-import groovy.ui.HistoryRecord
 import junit.framework.TestCase
 
 class HistoryRecordGetTextToRunTests extends TestCase {


[groovy] 17/23: don't use deprecated version of class

Posted by pa...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

paulk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git

commit d7abc6fcdc9dcb8ab6b9caf2a9cc3e74fc5953a7
Author: Paul King <pa...@asert.com.au>
AuthorDate: Thu Sep 19 19:01:34 2019 +1000

    don't use deprecated version of class
---
 src/test/DefaultPackageClassSupport.java                             | 2 +-
 src/test/gls/annotations/AnnotationsTestBase.java                    | 2 +-
 .../closures/AnnotationClosureExhaustiveTestSupport.groovy           | 2 ++
 src/test/gls/generics/GenericsTestBase.java                          | 2 +-
 src/test/groovy/bugs/Groovy2365Base.groovy                           | 2 ++
 src/test/groovy/bugs/Groovy2706Bug.groovy                            | 2 +-
 src/test/groovy/bugs/TestSupport.java                                | 2 +-
 src/test/groovy/lang/EmptyRangeTest.java                             | 2 +-
 src/test/groovy/lang/GStringTest.java                                | 2 +-
 src/test/groovy/lang/GroovyShellTest.java                            | 2 +-
 src/test/groovy/lang/MetaClassTest.java                              | 2 +-
 src/test/groovy/lang/SequenceTest.java                               | 2 +-
 src/test/groovy/lang/SpreadMapTest.java                              | 2 +-
 src/test/groovy/lang/TupleTest.java                                  | 2 +-
 src/test/groovy/security/SecurityTestSupport.java                    | 2 +-
 src/test/org/codehaus/groovy/antlr/GroovySourceASTTest.java          | 2 +-
 src/test/org/codehaus/groovy/antlr/SourceBufferTest.java             | 2 +-
 src/test/org/codehaus/groovy/antlr/SourceParserTest.java             | 2 +-
 src/test/org/codehaus/groovy/antlr/treewalker/Java2GroovyTest.java   | 2 +-
 src/test/org/codehaus/groovy/antlr/treewalker/SourcePrinterTest.java | 2 +-
 .../codehaus/groovy/antlr/treewalker/UnimplementedSyntaxTest.java    | 2 +-
 src/test/org/codehaus/groovy/ast/Groovy7826Bug.java                  | 2 +-
 src/test/org/codehaus/groovy/classgen/CapitalizeTest.java            | 2 +-
 src/test/org/codehaus/groovy/control/CompilerConfigurationTest.java  | 2 +-
 src/test/org/codehaus/groovy/reflection/SecurityTest.java            | 2 +-
 src/test/org/codehaus/groovy/runtime/InvokeConstructorTest.java      | 2 +-
 src/test/org/codehaus/groovy/runtime/InvokeGroovyMethodTest.java     | 2 +-
 src/test/org/codehaus/groovy/runtime/InvokeMethodTest.java           | 2 +-
 src/test/org/codehaus/groovy/runtime/InvokerTest.java                | 2 +-
 src/test/org/codehaus/groovy/runtime/JdkDynamicProxyTest.java        | 2 +-
 src/test/org/codehaus/groovy/runtime/MethodFailureTest.java          | 2 +-
 src/test/org/codehaus/groovy/runtime/PropertyTest.java               | 2 +-
 src/test/org/codehaus/groovy/runtime/StringGroovyMethodsTest.java    | 2 +-
 src/test/org/codehaus/groovy/runtime/TupleListTest.java              | 2 +-
 src/test/org/codehaus/groovy/syntax/TokenTest.java                   | 2 +-
 src/test/org/codehaus/groovy/syntax/parser/TestParserSupport.java    | 2 +-
 src/test/org/codehaus/groovy/tools/CompilerTest.java                 | 2 +-
 src/test/org/codehaus/groovy/tools/FileSystemCompilerTest.java       | 2 +-
 src/test/org/codehaus/groovy/tools/gse/DependencyTest.java           | 2 +-
 subprojects/groovy-sql/src/test/groovy/groovy/sql/SqlSTCTest.groovy  | 1 +
 .../groovy/test/transform/NotYetImplementedTransformTest.groovy      | 5 +++++
 .../groovy/org/apache/groovy/plugin/testng/TestNgRunnerTest.groovy   | 2 ++
 42 files changed, 49 insertions(+), 37 deletions(-)

diff --git a/src/test/DefaultPackageClassSupport.java b/src/test/DefaultPackageClassSupport.java
index 24c5350..8144bf5 100644
--- a/src/test/DefaultPackageClassSupport.java
+++ b/src/test/DefaultPackageClassSupport.java
@@ -16,7 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-import groovy.util.GroovyTestCase;
+import groovy.test.GroovyTestCase;
 
 public abstract class DefaultPackageClassSupport extends GroovyTestCase {
 }
diff --git a/src/test/gls/annotations/AnnotationsTestBase.java b/src/test/gls/annotations/AnnotationsTestBase.java
index 1fb6d43..b657424 100644
--- a/src/test/gls/annotations/AnnotationsTestBase.java
+++ b/src/test/gls/annotations/AnnotationsTestBase.java
@@ -20,7 +20,7 @@ package gls.annotations;
 
 import groovy.lang.GroovyClassLoader;
 import groovy.lang.GroovyClassLoader.InnerLoader;
-import groovy.util.GroovyTestCase;
+import groovy.test.GroovyTestCase;
 import org.codehaus.groovy.ast.ClassNode;
 import org.codehaus.groovy.control.CompilationFailedException;
 import org.codehaus.groovy.control.CompilationUnit;
diff --git a/src/test/gls/annotations/closures/AnnotationClosureExhaustiveTestSupport.groovy b/src/test/gls/annotations/closures/AnnotationClosureExhaustiveTestSupport.groovy
index a7db534..901799d 100644
--- a/src/test/gls/annotations/closures/AnnotationClosureExhaustiveTestSupport.groovy
+++ b/src/test/gls/annotations/closures/AnnotationClosureExhaustiveTestSupport.groovy
@@ -18,6 +18,8 @@
  */
 package gls.annotations.closures
 
+import groovy.test.GroovyTestCase
+
 abstract class AnnotationClosureExhaustiveTestSupport extends GroovyTestCase {
     abstract Class getAnnotationClass()
 
diff --git a/src/test/gls/generics/GenericsTestBase.java b/src/test/gls/generics/GenericsTestBase.java
index 5b91306..8b9a11d 100644
--- a/src/test/gls/generics/GenericsTestBase.java
+++ b/src/test/gls/generics/GenericsTestBase.java
@@ -20,7 +20,7 @@ package gls.generics;
 
 import groovy.lang.GroovyClassLoader;
 import groovy.lang.GroovyClassLoader.InnerLoader;
-import groovy.util.GroovyTestCase;
+import groovy.test.GroovyTestCase;
 import org.codehaus.groovy.ast.ClassNode;
 import org.codehaus.groovy.control.CompilationFailedException;
 import org.codehaus.groovy.control.CompilationUnit;
diff --git a/src/test/groovy/bugs/Groovy2365Base.groovy b/src/test/groovy/bugs/Groovy2365Base.groovy
index be56328..32c74dc 100644
--- a/src/test/groovy/bugs/Groovy2365Base.groovy
+++ b/src/test/groovy/bugs/Groovy2365Base.groovy
@@ -25,6 +25,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 abstract class Groovy2365Base extends GroovyTestCase {
 
     protected String createData () {
diff --git a/src/test/groovy/bugs/Groovy2706Bug.groovy b/src/test/groovy/bugs/Groovy2706Bug.groovy
index 64830ed..099d597 100644
--- a/src/test/groovy/bugs/Groovy2706Bug.groovy
+++ b/src/test/groovy/bugs/Groovy2706Bug.groovy
@@ -18,7 +18,7 @@
  */
 package groovy.bugs
 
-import groovy.util.GroovyTestCase
+import groovy.test.GroovyTestCase
 
 public class Groovy2706Bug extends GroovyTestCase {
     static counter = 0
diff --git a/src/test/groovy/bugs/TestSupport.java b/src/test/groovy/bugs/TestSupport.java
index 730a42b..87a05b1 100644
--- a/src/test/groovy/bugs/TestSupport.java
+++ b/src/test/groovy/bugs/TestSupport.java
@@ -18,7 +18,7 @@
  */
 package groovy.bugs;
 
-import groovy.util.GroovyTestCase;
+import groovy.test.GroovyTestCase;
 import org.junit.Ignore;
 
 import java.util.Arrays;
diff --git a/src/test/groovy/lang/EmptyRangeTest.java b/src/test/groovy/lang/EmptyRangeTest.java
index 05e3140..7f76839 100644
--- a/src/test/groovy/lang/EmptyRangeTest.java
+++ b/src/test/groovy/lang/EmptyRangeTest.java
@@ -18,7 +18,7 @@
  */
 package groovy.lang;
 
-import groovy.util.GroovyTestCase;
+import groovy.test.GroovyTestCase;
 
 import java.util.ArrayList;
 import java.util.Iterator;
diff --git a/src/test/groovy/lang/GStringTest.java b/src/test/groovy/lang/GStringTest.java
index a3222cf..1891bf0 100644
--- a/src/test/groovy/lang/GStringTest.java
+++ b/src/test/groovy/lang/GStringTest.java
@@ -18,7 +18,7 @@
  */
 package groovy.lang;
 
-import groovy.util.GroovyTestCase;
+import groovy.test.GroovyTestCase;
 import org.codehaus.groovy.runtime.InvokerHelper;
 
 /**
diff --git a/src/test/groovy/lang/GroovyShellTest.java b/src/test/groovy/lang/GroovyShellTest.java
index d254a74..65c77ff 100644
--- a/src/test/groovy/lang/GroovyShellTest.java
+++ b/src/test/groovy/lang/GroovyShellTest.java
@@ -18,7 +18,7 @@
  */
 package groovy.lang;
 
-import groovy.util.GroovyTestCase;
+import groovy.test.GroovyTestCase;
 import junit.framework.Test;
 import junit.framework.TestSuite;
 import junit.textui.TestRunner;
diff --git a/src/test/groovy/lang/MetaClassTest.java b/src/test/groovy/lang/MetaClassTest.java
index 571537b..f493fc7 100644
--- a/src/test/groovy/lang/MetaClassTest.java
+++ b/src/test/groovy/lang/MetaClassTest.java
@@ -18,7 +18,7 @@
  */
 package groovy.lang;
 
-import groovy.util.GroovyTestCase;
+import groovy.test.GroovyTestCase;
 import org.codehaus.groovy.runtime.InvokerHelper;
 
 import java.util.ArrayList;
diff --git a/src/test/groovy/lang/SequenceTest.java b/src/test/groovy/lang/SequenceTest.java
index 89c95af..70869f9 100644
--- a/src/test/groovy/lang/SequenceTest.java
+++ b/src/test/groovy/lang/SequenceTest.java
@@ -18,7 +18,7 @@
  */
 package groovy.lang;
 
-import groovy.util.GroovyTestCase;
+import groovy.test.GroovyTestCase;
 import org.codehaus.groovy.runtime.InvokerHelper;
 
 import java.util.List;
diff --git a/src/test/groovy/lang/SpreadMapTest.java b/src/test/groovy/lang/SpreadMapTest.java
index d7bfae7..906b3e3 100644
--- a/src/test/groovy/lang/SpreadMapTest.java
+++ b/src/test/groovy/lang/SpreadMapTest.java
@@ -18,7 +18,7 @@
  */
 package groovy.lang;
 
-import groovy.util.GroovyTestCase;
+import groovy.test.GroovyTestCase;
 
 import java.util.Map;
 
diff --git a/src/test/groovy/lang/TupleTest.java b/src/test/groovy/lang/TupleTest.java
index 7900fe0..dca17d0 100644
--- a/src/test/groovy/lang/TupleTest.java
+++ b/src/test/groovy/lang/TupleTest.java
@@ -18,7 +18,7 @@
  */
 package groovy.lang;
 
-import groovy.util.GroovyTestCase;
+import groovy.test.GroovyTestCase;
 import org.codehaus.groovy.runtime.DefaultGroovyMethods;
 
 import java.util.HashSet;
diff --git a/src/test/groovy/security/SecurityTestSupport.java b/src/test/groovy/security/SecurityTestSupport.java
index be407a6..a4e08c9 100644
--- a/src/test/groovy/security/SecurityTestSupport.java
+++ b/src/test/groovy/security/SecurityTestSupport.java
@@ -22,7 +22,7 @@ import groovy.lang.Binding;
 import groovy.lang.GroovyClassLoader;
 import groovy.lang.GroovyCodeSource;
 import groovy.lang.Script;
-import groovy.util.GroovyTestCase;
+import groovy.test.GroovyTestCase;
 import junit.framework.TestCase;
 import junit.framework.TestFailure;
 import junit.framework.TestResult;
diff --git a/src/test/org/codehaus/groovy/antlr/GroovySourceASTTest.java b/src/test/org/codehaus/groovy/antlr/GroovySourceASTTest.java
index bd5e169..57570db 100644
--- a/src/test/org/codehaus/groovy/antlr/GroovySourceASTTest.java
+++ b/src/test/org/codehaus/groovy/antlr/GroovySourceASTTest.java
@@ -18,7 +18,7 @@
  */
 package org.codehaus.groovy.antlr;
 
-import groovy.util.GroovyTestCase;
+import groovy.test.GroovyTestCase;
 
 public class GroovySourceASTTest extends GroovyTestCase {
     GroovySourceAST a;
diff --git a/src/test/org/codehaus/groovy/antlr/SourceBufferTest.java b/src/test/org/codehaus/groovy/antlr/SourceBufferTest.java
index 4c98a75..4d1a1d9 100644
--- a/src/test/org/codehaus/groovy/antlr/SourceBufferTest.java
+++ b/src/test/org/codehaus/groovy/antlr/SourceBufferTest.java
@@ -18,7 +18,7 @@
  */
 package org.codehaus.groovy.antlr;
 
-import groovy.util.GroovyTestCase;
+import groovy.test.GroovyTestCase;
 
 import java.io.Reader;
 import java.io.StringReader;
diff --git a/src/test/org/codehaus/groovy/antlr/SourceParserTest.java b/src/test/org/codehaus/groovy/antlr/SourceParserTest.java
index af4c8ce..caf5e7b 100644
--- a/src/test/org/codehaus/groovy/antlr/SourceParserTest.java
+++ b/src/test/org/codehaus/groovy/antlr/SourceParserTest.java
@@ -18,7 +18,7 @@
  */
 package org.codehaus.groovy.antlr;
 
-import groovy.util.GroovyTestCase;
+import groovy.test.GroovyTestCase;
 
 import java.io.PrintWriter;
 import java.io.Reader;
diff --git a/src/test/org/codehaus/groovy/antlr/treewalker/Java2GroovyTest.java b/src/test/org/codehaus/groovy/antlr/treewalker/Java2GroovyTest.java
index ec09094..2032be1 100644
--- a/src/test/org/codehaus/groovy/antlr/treewalker/Java2GroovyTest.java
+++ b/src/test/org/codehaus/groovy/antlr/treewalker/Java2GroovyTest.java
@@ -18,7 +18,7 @@
  */
 package org.codehaus.groovy.antlr.treewalker;
 
-import groovy.util.GroovyTestCase;
+import groovy.test.GroovyTestCase;
 import org.codehaus.groovy.antlr.java.Java2GroovyProcessor;
 
 public class Java2GroovyTest extends GroovyTestCase {
diff --git a/src/test/org/codehaus/groovy/antlr/treewalker/SourcePrinterTest.java b/src/test/org/codehaus/groovy/antlr/treewalker/SourcePrinterTest.java
index 8a8d961..78d267e 100644
--- a/src/test/org/codehaus/groovy/antlr/treewalker/SourcePrinterTest.java
+++ b/src/test/org/codehaus/groovy/antlr/treewalker/SourcePrinterTest.java
@@ -18,7 +18,7 @@
  */
 package org.codehaus.groovy.antlr.treewalker;
 
-import groovy.util.GroovyTestCase;
+import groovy.test.GroovyTestCase;
 
 /**
  * Testcases for the antlr AST visitor that prints groovy source code.
diff --git a/src/test/org/codehaus/groovy/antlr/treewalker/UnimplementedSyntaxTest.java b/src/test/org/codehaus/groovy/antlr/treewalker/UnimplementedSyntaxTest.java
index b8ecba8..c185ed1 100644
--- a/src/test/org/codehaus/groovy/antlr/treewalker/UnimplementedSyntaxTest.java
+++ b/src/test/org/codehaus/groovy/antlr/treewalker/UnimplementedSyntaxTest.java
@@ -20,7 +20,7 @@ package org.codehaus.groovy.antlr.treewalker;
 
 import groovy.lang.GroovyShell;
 import groovy.lang.Script;
-import groovy.util.GroovyTestCase;
+import groovy.test.GroovyTestCase;
 
 /**
  * This tests code that is valid in parser, but has issues further down the line.
diff --git a/src/test/org/codehaus/groovy/ast/Groovy7826Bug.java b/src/test/org/codehaus/groovy/ast/Groovy7826Bug.java
index 5acc693..ed6b4ab 100644
--- a/src/test/org/codehaus/groovy/ast/Groovy7826Bug.java
+++ b/src/test/org/codehaus/groovy/ast/Groovy7826Bug.java
@@ -19,7 +19,7 @@
 package org.codehaus.groovy.ast;
 
 import groovy.lang.GroovyShell;
-import groovy.util.GroovyTestCase;
+import groovy.test.GroovyTestCase;
 import org.codehaus.groovy.control.CompilerConfiguration;
 
 public class Groovy7826Bug extends GroovyTestCase {
diff --git a/src/test/org/codehaus/groovy/classgen/CapitalizeTest.java b/src/test/org/codehaus/groovy/classgen/CapitalizeTest.java
index 4905307..ed8bca6 100644
--- a/src/test/org/codehaus/groovy/classgen/CapitalizeTest.java
+++ b/src/test/org/codehaus/groovy/classgen/CapitalizeTest.java
@@ -18,7 +18,7 @@
  */
 package org.codehaus.groovy.classgen;
 
-import groovy.util.GroovyTestCase;
+import groovy.test.GroovyTestCase;
 
 public class CapitalizeTest extends GroovyTestCase {
 
diff --git a/src/test/org/codehaus/groovy/control/CompilerConfigurationTest.java b/src/test/org/codehaus/groovy/control/CompilerConfigurationTest.java
index 50816ab..fcc68a2 100644
--- a/src/test/org/codehaus/groovy/control/CompilerConfigurationTest.java
+++ b/src/test/org/codehaus/groovy/control/CompilerConfigurationTest.java
@@ -18,7 +18,7 @@
  */
 package org.codehaus.groovy.control;
 
-import groovy.util.GroovyTestCase;
+import groovy.test.GroovyTestCase;
 import org.codehaus.groovy.control.messages.WarningMessage;
 
 import java.io.File;
diff --git a/src/test/org/codehaus/groovy/reflection/SecurityTest.java b/src/test/org/codehaus/groovy/reflection/SecurityTest.java
index 229865e..41f7b03 100644
--- a/src/test/org/codehaus/groovy/reflection/SecurityTest.java
+++ b/src/test/org/codehaus/groovy/reflection/SecurityTest.java
@@ -19,7 +19,7 @@
 package org.codehaus.groovy.reflection;
 
 import groovy.lang.GroovyObjectSupport;
-import groovy.util.GroovyTestCase;
+import groovy.test.GroovyTestCase;
 import org.codehaus.groovy.runtime.InvokerInvocationException;
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
diff --git a/src/test/org/codehaus/groovy/runtime/InvokeConstructorTest.java b/src/test/org/codehaus/groovy/runtime/InvokeConstructorTest.java
index 1b543de..716d7c3 100644
--- a/src/test/org/codehaus/groovy/runtime/InvokeConstructorTest.java
+++ b/src/test/org/codehaus/groovy/runtime/InvokeConstructorTest.java
@@ -19,7 +19,7 @@
 package org.codehaus.groovy.runtime;
 
 import groovy.lang.GString;
-import groovy.util.GroovyTestCase;
+import groovy.test.GroovyTestCase;
 
 /**
  * Tests method invocation
diff --git a/src/test/org/codehaus/groovy/runtime/InvokeGroovyMethodTest.java b/src/test/org/codehaus/groovy/runtime/InvokeGroovyMethodTest.java
index 0ffb3ca..2f865aa 100644
--- a/src/test/org/codehaus/groovy/runtime/InvokeGroovyMethodTest.java
+++ b/src/test/org/codehaus/groovy/runtime/InvokeGroovyMethodTest.java
@@ -19,7 +19,7 @@
 package org.codehaus.groovy.runtime;
 
 import groovy.lang.Closure;
-import groovy.util.GroovyTestCase;
+import groovy.test.GroovyTestCase;
 
 import java.util.ArrayList;
 import java.util.Arrays;
diff --git a/src/test/org/codehaus/groovy/runtime/InvokeMethodTest.java b/src/test/org/codehaus/groovy/runtime/InvokeMethodTest.java
index 4be0243..60cd460 100644
--- a/src/test/org/codehaus/groovy/runtime/InvokeMethodTest.java
+++ b/src/test/org/codehaus/groovy/runtime/InvokeMethodTest.java
@@ -21,7 +21,7 @@ package org.codehaus.groovy.runtime;
 import groovy.lang.GString;
 import groovy.lang.GroovyRuntimeException;
 import groovy.lang.IntRange;
-import groovy.util.GroovyTestCase;
+import groovy.test.GroovyTestCase;
 import junit.framework.AssertionFailedError;
 import org.codehaus.groovy.control.CompilerConfiguration;
 import org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation;
diff --git a/src/test/org/codehaus/groovy/runtime/InvokerTest.java b/src/test/org/codehaus/groovy/runtime/InvokerTest.java
index d0744f8..354fba4 100644
--- a/src/test/org/codehaus/groovy/runtime/InvokerTest.java
+++ b/src/test/org/codehaus/groovy/runtime/InvokerTest.java
@@ -20,7 +20,7 @@ package org.codehaus.groovy.runtime;
 
 import groovy.lang.GString;
 import groovy.lang.GroovyRuntimeException;
-import groovy.util.GroovyTestCase;
+import groovy.test.GroovyTestCase;
 import org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation;
 
 import java.util.*;
diff --git a/src/test/org/codehaus/groovy/runtime/JdkDynamicProxyTest.java b/src/test/org/codehaus/groovy/runtime/JdkDynamicProxyTest.java
index 14c8658..65b4565 100644
--- a/src/test/org/codehaus/groovy/runtime/JdkDynamicProxyTest.java
+++ b/src/test/org/codehaus/groovy/runtime/JdkDynamicProxyTest.java
@@ -19,7 +19,7 @@
 package org.codehaus.groovy.runtime;
 
 import groovy.lang.GroovyClassLoader;
-import groovy.util.GroovyTestCase;
+import groovy.test.GroovyTestCase;
 
 public class JdkDynamicProxyTest extends GroovyTestCase {
 
diff --git a/src/test/org/codehaus/groovy/runtime/MethodFailureTest.java b/src/test/org/codehaus/groovy/runtime/MethodFailureTest.java
index 1197f96..e31c1b0 100644
--- a/src/test/org/codehaus/groovy/runtime/MethodFailureTest.java
+++ b/src/test/org/codehaus/groovy/runtime/MethodFailureTest.java
@@ -21,7 +21,7 @@ package org.codehaus.groovy.runtime;
 import groovy.lang.Closure;
 import groovy.lang.GroovyObject;
 import groovy.lang.GroovyRuntimeException;
-import groovy.util.GroovyTestCase;
+import groovy.test.GroovyTestCase;
 
 /**
  * Tests failing method invocations to ensure correct exceptions
diff --git a/src/test/org/codehaus/groovy/runtime/PropertyTest.java b/src/test/org/codehaus/groovy/runtime/PropertyTest.java
index 4839481..f812f42 100644
--- a/src/test/org/codehaus/groovy/runtime/PropertyTest.java
+++ b/src/test/org/codehaus/groovy/runtime/PropertyTest.java
@@ -19,7 +19,7 @@
 package org.codehaus.groovy.runtime;
 
 import groovy.lang.MissingMethodException;
-import groovy.util.GroovyTestCase;
+import groovy.test.GroovyTestCase;
 import groovy.util.HeadlessTestSupport;
 import groovy.util.Node;
 
diff --git a/src/test/org/codehaus/groovy/runtime/StringGroovyMethodsTest.java b/src/test/org/codehaus/groovy/runtime/StringGroovyMethodsTest.java
index a298e55..5e7fccd 100644
--- a/src/test/org/codehaus/groovy/runtime/StringGroovyMethodsTest.java
+++ b/src/test/org/codehaus/groovy/runtime/StringGroovyMethodsTest.java
@@ -19,7 +19,7 @@
 package org.codehaus.groovy.runtime;
 
 import groovy.lang.Closure;
-import groovy.util.GroovyTestCase;
+import groovy.test.GroovyTestCase;
 
 import java.math.BigDecimal;
 import java.math.BigInteger;
diff --git a/src/test/org/codehaus/groovy/runtime/TupleListTest.java b/src/test/org/codehaus/groovy/runtime/TupleListTest.java
index 0fe035c..259aa53 100644
--- a/src/test/org/codehaus/groovy/runtime/TupleListTest.java
+++ b/src/test/org/codehaus/groovy/runtime/TupleListTest.java
@@ -18,7 +18,7 @@
  */
 package org.codehaus.groovy.runtime;
 
-import groovy.util.GroovyTestCase;
+import groovy.test.GroovyTestCase;
 
 import java.util.Iterator;
 import java.util.Map;
diff --git a/src/test/org/codehaus/groovy/syntax/TokenTest.java b/src/test/org/codehaus/groovy/syntax/TokenTest.java
index 7ff99cb..d4add62 100644
--- a/src/test/org/codehaus/groovy/syntax/TokenTest.java
+++ b/src/test/org/codehaus/groovy/syntax/TokenTest.java
@@ -19,7 +19,7 @@
 package org.codehaus.groovy.syntax;
 
 
-import groovy.util.GroovyTestCase;
+import groovy.test.GroovyTestCase;
 
 public class TokenTest
         extends GroovyTestCase {
diff --git a/src/test/org/codehaus/groovy/syntax/parser/TestParserSupport.java b/src/test/org/codehaus/groovy/syntax/parser/TestParserSupport.java
index 0d80453..0f3f6d3 100644
--- a/src/test/org/codehaus/groovy/syntax/parser/TestParserSupport.java
+++ b/src/test/org/codehaus/groovy/syntax/parser/TestParserSupport.java
@@ -18,7 +18,7 @@
  */
 package org.codehaus.groovy.syntax.parser;
 
-import groovy.util.GroovyTestCase;
+import groovy.test.GroovyTestCase;
 import org.codehaus.groovy.ast.ModuleNode;
 import org.codehaus.groovy.control.SourceUnit;
 
diff --git a/src/test/org/codehaus/groovy/tools/CompilerTest.java b/src/test/org/codehaus/groovy/tools/CompilerTest.java
index ac621d8..d415b9a 100644
--- a/src/test/org/codehaus/groovy/tools/CompilerTest.java
+++ b/src/test/org/codehaus/groovy/tools/CompilerTest.java
@@ -18,7 +18,7 @@
  */
 package org.codehaus.groovy.tools;
 
-import groovy.util.GroovyTestCase;
+import groovy.test.GroovyTestCase;
 import org.codehaus.groovy.control.CompilerConfiguration;
 
 import java.io.File;
diff --git a/src/test/org/codehaus/groovy/tools/FileSystemCompilerTest.java b/src/test/org/codehaus/groovy/tools/FileSystemCompilerTest.java
index bf5d966..c472b69 100644
--- a/src/test/org/codehaus/groovy/tools/FileSystemCompilerTest.java
+++ b/src/test/org/codehaus/groovy/tools/FileSystemCompilerTest.java
@@ -18,7 +18,7 @@
  */
 package org.codehaus.groovy.tools;
 
-import groovy.util.GroovyTestCase;
+import groovy.test.GroovyTestCase;
 import org.codehaus.groovy.control.CompilerConfiguration;
 
 import java.io.File;
diff --git a/src/test/org/codehaus/groovy/tools/gse/DependencyTest.java b/src/test/org/codehaus/groovy/tools/gse/DependencyTest.java
index 138f828..e903298 100644
--- a/src/test/org/codehaus/groovy/tools/gse/DependencyTest.java
+++ b/src/test/org/codehaus/groovy/tools/gse/DependencyTest.java
@@ -28,7 +28,7 @@ import org.codehaus.groovy.control.CompilationUnit;
 import org.codehaus.groovy.control.Phases;
 import org.codehaus.groovy.control.SourceUnit;
 
-import groovy.util.GroovyTestCase;
+import groovy.test.GroovyTestCase;
 
 @SuppressWarnings("deprecation")
 public class DependencyTest extends GroovyTestCase {
diff --git a/subprojects/groovy-sql/src/test/groovy/groovy/sql/SqlSTCTest.groovy b/subprojects/groovy-sql/src/test/groovy/groovy/sql/SqlSTCTest.groovy
index 275690d..2cdfe6b 100644
--- a/subprojects/groovy-sql/src/test/groovy/groovy/sql/SqlSTCTest.groovy
+++ b/subprojects/groovy-sql/src/test/groovy/groovy/sql/SqlSTCTest.groovy
@@ -18,6 +18,7 @@
  */
 package groovy.sql
 
+import groovy.test.GroovyShellTestCase
 import groovy.transform.TypeChecked
 import org.codehaus.groovy.control.CompilerConfiguration
 import org.codehaus.groovy.control.customizers.ASTTransformationCustomizer
diff --git a/subprojects/groovy-test/src/test/groovy/org/apache/groovy/test/transform/NotYetImplementedTransformTest.groovy b/subprojects/groovy-test/src/test/groovy/org/apache/groovy/test/transform/NotYetImplementedTransformTest.groovy
index 12605e1..b4ab0da 100644
--- a/subprojects/groovy-test/src/test/groovy/org/apache/groovy/test/transform/NotYetImplementedTransformTest.groovy
+++ b/subprojects/groovy-test/src/test/groovy/org/apache/groovy/test/transform/NotYetImplementedTransformTest.groovy
@@ -18,12 +18,14 @@
  */
 package org.apache.groovy.test.transform
 
+import groovy.test.GroovyShellTestCase
 import junit.framework.AssertionFailedError
 
 class NotYetImplementedTransformTest extends GroovyShellTestCase {
 
     void testNotYetImplemented() {
         def output = evaluate("""
+              import groovy.test.GroovyTestCase
               import groovy.test.NotYetImplemented
 
               class MyTests extends GroovyTestCase {
@@ -41,6 +43,7 @@ class NotYetImplementedTransformTest extends GroovyShellTestCase {
 
     void testNotYetImplementedWithException() {
             def output = evaluate("""
+                  import groovy.test.GroovyTestCase
                   import groovy.test.NotYetImplemented
 
                   class MyTests extends GroovyTestCase {
@@ -58,6 +61,7 @@ class NotYetImplementedTransformTest extends GroovyShellTestCase {
 
     void testNotYetImplementedPassThrough() {
         def output = evaluate("""
+              import groovy.test.GroovyTestCase
               import groovy.test.NotYetImplemented
 
               class MyTests extends GroovyTestCase {
@@ -77,6 +81,7 @@ class NotYetImplementedTransformTest extends GroovyShellTestCase {
 
     void testEmptyTestMethod() {
         def output = evaluate("""
+              import groovy.test.GroovyTestCase
               import groovy.test.NotYetImplemented
 
               class MyTests extends GroovyTestCase {
diff --git a/subprojects/groovy-testng/src/test/groovy/org/apache/groovy/plugin/testng/TestNgRunnerTest.groovy b/subprojects/groovy-testng/src/test/groovy/org/apache/groovy/plugin/testng/TestNgRunnerTest.groovy
index cda81f4..e45447d 100644
--- a/subprojects/groovy-testng/src/test/groovy/org/apache/groovy/plugin/testng/TestNgRunnerTest.groovy
+++ b/subprojects/groovy-testng/src/test/groovy/org/apache/groovy/plugin/testng/TestNgRunnerTest.groovy
@@ -18,6 +18,8 @@
  */
 package org.apache.groovy.plugin.testng
 
+import groovy.test.GroovyShellTestCase
+
 class TestNgRunnerTest extends GroovyShellTestCase {
 
     @Override


[groovy] 09/23: don't use deprecated version of class

Posted by pa...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

paulk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git

commit 378628a8f2b3e4b61a513b123c048caada0ff120
Author: Paul King <pa...@asert.com.au>
AuthorDate: Wed Sep 18 19:19:31 2019 +1000

    don't use deprecated version of class
---
 .../groovy/swing/binding/JComboBoxProperties.java  | 10 +++++-----
 .../groovy/swing/binding/JComponentProperties.java | 10 +++++-----
 .../groovy/swing/binding/JListProperties.groovy    | 10 +++++-----
 .../groovy/swing/binding/JScrollBarProperties.java | 10 +++++-----
 .../groovy/swing/binding/JSliderProperties.java    | 10 +++++-----
 .../groovy/swing/binding/JSpinnerProperties.java   | 10 +++++-----
 .../groovy/swing/binding/JTableProperties.java     | 11 +++++------
 .../swing/binding/JTextComponentProperties.java    | 11 +++++------
 .../groovy/groovy/swing/factory/BindFactory.groovy | 22 +++++++++++-----------
 .../groovy/swing/factory/BindGroupFactory.groovy   |  2 +-
 .../groovy/swing/factory/BindProxyFactory.groovy   |  2 +-
 .../apache/groovy/swing/binding/BindingProxy.java  |  2 +-
 12 files changed, 54 insertions(+), 56 deletions(-)

diff --git a/subprojects/groovy-swing/src/main/groovy/groovy/swing/binding/JComboBoxProperties.java b/subprojects/groovy-swing/src/main/groovy/groovy/swing/binding/JComboBoxProperties.java
index 5b15751..9d6c102 100644
--- a/subprojects/groovy-swing/src/main/groovy/groovy/swing/binding/JComboBoxProperties.java
+++ b/subprojects/groovy-swing/src/main/groovy/groovy/swing/binding/JComboBoxProperties.java
@@ -18,11 +18,11 @@
  */
 package groovy.swing.binding;
 
-import org.codehaus.groovy.binding.FullBinding;
-import org.codehaus.groovy.binding.PropertyBinding;
-import org.codehaus.groovy.binding.SourceBinding;
-import org.codehaus.groovy.binding.TargetBinding;
-import org.codehaus.groovy.binding.TriggerBinding;
+import org.apache.groovy.swing.binding.FullBinding;
+import org.apache.groovy.swing.binding.PropertyBinding;
+import org.apache.groovy.swing.binding.SourceBinding;
+import org.apache.groovy.swing.binding.TargetBinding;
+import org.apache.groovy.swing.binding.TriggerBinding;
 
 import javax.swing.*;
 import javax.swing.event.ListDataEvent;
diff --git a/subprojects/groovy-swing/src/main/groovy/groovy/swing/binding/JComponentProperties.java b/subprojects/groovy-swing/src/main/groovy/groovy/swing/binding/JComponentProperties.java
index 07f74ca..0103200 100644
--- a/subprojects/groovy-swing/src/main/groovy/groovy/swing/binding/JComponentProperties.java
+++ b/subprojects/groovy-swing/src/main/groovy/groovy/swing/binding/JComponentProperties.java
@@ -18,11 +18,11 @@
  */
 package groovy.swing.binding;
 
-import org.codehaus.groovy.binding.FullBinding;
-import org.codehaus.groovy.binding.PropertyBinding;
-import org.codehaus.groovy.binding.SourceBinding;
-import org.codehaus.groovy.binding.TargetBinding;
-import org.codehaus.groovy.binding.TriggerBinding;
+import org.apache.groovy.swing.binding.FullBinding;
+import org.apache.groovy.swing.binding.PropertyBinding;
+import org.apache.groovy.swing.binding.SourceBinding;
+import org.apache.groovy.swing.binding.TargetBinding;
+import org.apache.groovy.swing.binding.TriggerBinding;
 
 import javax.swing.*;
 import java.awt.event.ComponentEvent;
diff --git a/subprojects/groovy-swing/src/main/groovy/groovy/swing/binding/JListProperties.groovy b/subprojects/groovy-swing/src/main/groovy/groovy/swing/binding/JListProperties.groovy
index 2a5b4fb..bd2beea 100644
--- a/subprojects/groovy-swing/src/main/groovy/groovy/swing/binding/JListProperties.groovy
+++ b/subprojects/groovy-swing/src/main/groovy/groovy/swing/binding/JListProperties.groovy
@@ -18,11 +18,11 @@
  */
 package groovy.swing.binding
 
-import org.codehaus.groovy.binding.FullBinding
-import org.codehaus.groovy.binding.PropertyBinding
-import org.codehaus.groovy.binding.SourceBinding
-import org.codehaus.groovy.binding.TargetBinding
-import org.codehaus.groovy.binding.TriggerBinding
+import org.apache.groovy.swing.binding.FullBinding
+import org.apache.groovy.swing.binding.PropertyBinding
+import org.apache.groovy.swing.binding.SourceBinding
+import org.apache.groovy.swing.binding.TargetBinding
+import org.apache.groovy.swing.binding.TriggerBinding
 
 import javax.swing.*
 import javax.swing.event.ListDataEvent
diff --git a/subprojects/groovy-swing/src/main/groovy/groovy/swing/binding/JScrollBarProperties.java b/subprojects/groovy-swing/src/main/groovy/groovy/swing/binding/JScrollBarProperties.java
index c991d3a..fff328c 100644
--- a/subprojects/groovy-swing/src/main/groovy/groovy/swing/binding/JScrollBarProperties.java
+++ b/subprojects/groovy-swing/src/main/groovy/groovy/swing/binding/JScrollBarProperties.java
@@ -18,11 +18,11 @@
  */
 package groovy.swing.binding;
 
-import org.codehaus.groovy.binding.FullBinding;
-import org.codehaus.groovy.binding.PropertyBinding;
-import org.codehaus.groovy.binding.SourceBinding;
-import org.codehaus.groovy.binding.TargetBinding;
-import org.codehaus.groovy.binding.TriggerBinding;
+import org.apache.groovy.swing.binding.FullBinding;
+import org.apache.groovy.swing.binding.PropertyBinding;
+import org.apache.groovy.swing.binding.SourceBinding;
+import org.apache.groovy.swing.binding.TargetBinding;
+import org.apache.groovy.swing.binding.TriggerBinding;
 
 import javax.swing.*;
 import javax.swing.event.ChangeEvent;
diff --git a/subprojects/groovy-swing/src/main/groovy/groovy/swing/binding/JSliderProperties.java b/subprojects/groovy-swing/src/main/groovy/groovy/swing/binding/JSliderProperties.java
index c03c17c..cb408ce 100644
--- a/subprojects/groovy-swing/src/main/groovy/groovy/swing/binding/JSliderProperties.java
+++ b/subprojects/groovy-swing/src/main/groovy/groovy/swing/binding/JSliderProperties.java
@@ -18,11 +18,11 @@
  */
 package groovy.swing.binding;
 
-import org.codehaus.groovy.binding.FullBinding;
-import org.codehaus.groovy.binding.PropertyBinding;
-import org.codehaus.groovy.binding.SourceBinding;
-import org.codehaus.groovy.binding.TargetBinding;
-import org.codehaus.groovy.binding.TriggerBinding;
+import org.apache.groovy.swing.binding.FullBinding;
+import org.apache.groovy.swing.binding.PropertyBinding;
+import org.apache.groovy.swing.binding.SourceBinding;
+import org.apache.groovy.swing.binding.TargetBinding;
+import org.apache.groovy.swing.binding.TriggerBinding;
 
 import javax.swing.*;
 import javax.swing.event.ChangeEvent;
diff --git a/subprojects/groovy-swing/src/main/groovy/groovy/swing/binding/JSpinnerProperties.java b/subprojects/groovy-swing/src/main/groovy/groovy/swing/binding/JSpinnerProperties.java
index 69c98fd..4a24a65 100644
--- a/subprojects/groovy-swing/src/main/groovy/groovy/swing/binding/JSpinnerProperties.java
+++ b/subprojects/groovy-swing/src/main/groovy/groovy/swing/binding/JSpinnerProperties.java
@@ -18,11 +18,11 @@
  */
 package groovy.swing.binding;
 
-import org.codehaus.groovy.binding.FullBinding;
-import org.codehaus.groovy.binding.PropertyBinding;
-import org.codehaus.groovy.binding.SourceBinding;
-import org.codehaus.groovy.binding.TargetBinding;
-import org.codehaus.groovy.binding.TriggerBinding;
+import org.apache.groovy.swing.binding.FullBinding;
+import org.apache.groovy.swing.binding.PropertyBinding;
+import org.apache.groovy.swing.binding.SourceBinding;
+import org.apache.groovy.swing.binding.TargetBinding;
+import org.apache.groovy.swing.binding.TriggerBinding;
 
 import javax.swing.*;
 import javax.swing.event.ChangeEvent;
diff --git a/subprojects/groovy-swing/src/main/groovy/groovy/swing/binding/JTableProperties.java b/subprojects/groovy-swing/src/main/groovy/groovy/swing/binding/JTableProperties.java
index 73a89c7..f9190e6 100644
--- a/subprojects/groovy-swing/src/main/groovy/groovy/swing/binding/JTableProperties.java
+++ b/subprojects/groovy-swing/src/main/groovy/groovy/swing/binding/JTableProperties.java
@@ -18,12 +18,11 @@
  */
 package groovy.swing.binding;
 
-
-import org.codehaus.groovy.binding.FullBinding;
-import org.codehaus.groovy.binding.PropertyBinding;
-import org.codehaus.groovy.binding.SourceBinding;
-import org.codehaus.groovy.binding.TargetBinding;
-import org.codehaus.groovy.binding.TriggerBinding;
+import org.apache.groovy.swing.binding.FullBinding;
+import org.apache.groovy.swing.binding.PropertyBinding;
+import org.apache.groovy.swing.binding.SourceBinding;
+import org.apache.groovy.swing.binding.TargetBinding;
+import org.apache.groovy.swing.binding.TriggerBinding;
 
 import javax.swing.*;
 import javax.swing.event.ListSelectionEvent;
diff --git a/subprojects/groovy-swing/src/main/groovy/groovy/swing/binding/JTextComponentProperties.java b/subprojects/groovy-swing/src/main/groovy/groovy/swing/binding/JTextComponentProperties.java
index 93e6e14..852bd9e 100644
--- a/subprojects/groovy-swing/src/main/groovy/groovy/swing/binding/JTextComponentProperties.java
+++ b/subprojects/groovy-swing/src/main/groovy/groovy/swing/binding/JTextComponentProperties.java
@@ -18,11 +18,11 @@
  */
 package groovy.swing.binding;
 
-import org.codehaus.groovy.binding.FullBinding;
-import org.codehaus.groovy.binding.PropertyBinding;
-import org.codehaus.groovy.binding.SourceBinding;
-import org.codehaus.groovy.binding.TargetBinding;
-import org.codehaus.groovy.binding.TriggerBinding;
+import org.apache.groovy.swing.binding.FullBinding;
+import org.apache.groovy.swing.binding.PropertyBinding;
+import org.apache.groovy.swing.binding.SourceBinding;
+import org.apache.groovy.swing.binding.TargetBinding;
+import org.apache.groovy.swing.binding.TriggerBinding;
 
 import javax.swing.event.DocumentEvent;
 import javax.swing.event.DocumentListener;
@@ -33,7 +33,6 @@ import java.beans.PropertyChangeListener;
 import java.util.HashMap;
 import java.util.Map;
 
-
 /**
  * @since Groovy 1.1
  */
diff --git a/subprojects/groovy-swing/src/main/groovy/groovy/swing/factory/BindFactory.groovy b/subprojects/groovy-swing/src/main/groovy/groovy/swing/factory/BindFactory.groovy
index 55afe7f..05d61cf 100644
--- a/subprojects/groovy-swing/src/main/groovy/groovy/swing/factory/BindFactory.groovy
+++ b/subprojects/groovy-swing/src/main/groovy/groovy/swing/factory/BindFactory.groovy
@@ -28,17 +28,17 @@ import groovy.swing.binding.JSliderProperties
 import groovy.swing.binding.JSpinnerProperties
 import groovy.swing.binding.JTableProperties
 import groovy.swing.binding.JTextComponentProperties
-import org.codehaus.groovy.binding.AggregateBinding
-import org.codehaus.groovy.binding.BindingUpdatable
-import org.codehaus.groovy.binding.ClosureSourceBinding
-import org.codehaus.groovy.binding.ClosureTriggerBinding
-import org.codehaus.groovy.binding.EventTriggerBinding
-import org.codehaus.groovy.binding.FullBinding
-import org.codehaus.groovy.binding.MutualPropertyBinding
-import org.codehaus.groovy.binding.PropertyBinding
-import org.codehaus.groovy.binding.SourceBinding
-import org.codehaus.groovy.binding.TargetBinding
-import org.codehaus.groovy.binding.TriggerBinding
+import org.apache.groovy.swing.binding.AggregateBinding
+import org.apache.groovy.swing.binding.BindingUpdatable
+import org.apache.groovy.swing.binding.ClosureSourceBinding
+import org.apache.groovy.swing.binding.ClosureTriggerBinding
+import org.apache.groovy.swing.binding.EventTriggerBinding
+import org.apache.groovy.swing.binding.FullBinding
+import org.apache.groovy.swing.binding.MutualPropertyBinding
+import org.apache.groovy.swing.binding.PropertyBinding
+import org.apache.groovy.swing.binding.SourceBinding
+import org.apache.groovy.swing.binding.TargetBinding
+import org.apache.groovy.swing.binding.TriggerBinding
 
 import java.util.Map.Entry
 
diff --git a/subprojects/groovy-swing/src/main/groovy/groovy/swing/factory/BindGroupFactory.groovy b/subprojects/groovy-swing/src/main/groovy/groovy/swing/factory/BindGroupFactory.groovy
index df37648..0dface2 100644
--- a/subprojects/groovy-swing/src/main/groovy/groovy/swing/factory/BindGroupFactory.groovy
+++ b/subprojects/groovy-swing/src/main/groovy/groovy/swing/factory/BindGroupFactory.groovy
@@ -18,7 +18,7 @@
  */
 package groovy.swing.factory
 
-import org.codehaus.groovy.binding.AggregateBinding
+import org.apache.groovy.swing.binding.AggregateBinding
 
 /**
  * Factory for aggregate bindings
diff --git a/subprojects/groovy-swing/src/main/groovy/groovy/swing/factory/BindProxyFactory.groovy b/subprojects/groovy-swing/src/main/groovy/groovy/swing/factory/BindProxyFactory.groovy
index 744e763..2ae5742 100644
--- a/subprojects/groovy-swing/src/main/groovy/groovy/swing/factory/BindProxyFactory.groovy
+++ b/subprojects/groovy-swing/src/main/groovy/groovy/swing/factory/BindProxyFactory.groovy
@@ -18,7 +18,7 @@
  */
 package groovy.swing.factory
 
-import org.codehaus.groovy.binding.BindingProxy
+import org.apache.groovy.swing.binding.BindingProxy
 
 /**
  * @since Groovy 1.1
diff --git a/subprojects/groovy-swing/src/main/java/org/apache/groovy/swing/binding/BindingProxy.java b/subprojects/groovy-swing/src/main/java/org/apache/groovy/swing/binding/BindingProxy.java
index 87566d0..6240582 100644
--- a/subprojects/groovy-swing/src/main/java/org/apache/groovy/swing/binding/BindingProxy.java
+++ b/subprojects/groovy-swing/src/main/java/org/apache/groovy/swing/binding/BindingProxy.java
@@ -27,7 +27,7 @@ import java.util.List;
 import java.util.Map;
 
 /**
- * This class returns half bound {@link org.codehaus.groovy.binding.FullBinding}s on the source half to the model
+ * This class returns half bound {@link org.apache.groovy.swing.binding.FullBinding}s on the source half to the model
  * object for every property reference (and I do mean every, valid or not, queried before or not).  These returned
  * half bindings are stored strongly in a list when generated.
  *


[groovy] 21/23: Improve code style (closes #995)

Posted by pa...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

paulk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git

commit 9005e2aa0efdb38ecf78bb7394dfd3e0c8015145
Author: Bo Zhang <zh...@gmail.com>
AuthorDate: Fri Aug 16 14:10:11 2019 +0800

    Improve code style (closes #995)
---
 .../org/apache/groovy/ast/tools/ClassNodeUtils.java     |  2 +-
 src/main/java/org/codehaus/groovy/antlr/LineColumn.java |  4 +---
 src/main/java/org/codehaus/groovy/ast/GenericsType.java |  2 +-
 .../codehaus/groovy/control/CompilerConfiguration.java  |  8 ++++----
 .../org/codehaus/groovy/control/ResolveVisitor.java     |  5 +----
 .../codehaus/groovy/control/StaticImportVisitor.java    |  2 +-
 .../java/org/codehaus/groovy/runtime/InvokerHelper.java |  8 ++++----
 .../org/codehaus/groovy/runtime/MetaClassHelper.java    | 17 ++++-------------
 .../java/org/codehaus/groovy/runtime/NullObject.java    |  2 +-
 .../groovy/runtime/m12n/ExtensionModuleRegistry.java    |  6 +-----
 .../runtime/typehandling/DefaultTypeTransformation.java |  3 +--
 .../codehaus/groovy/tools/javac/JavaStubGenerator.java  |  5 +----
 12 files changed, 21 insertions(+), 43 deletions(-)

diff --git a/src/main/java/org/apache/groovy/ast/tools/ClassNodeUtils.java b/src/main/java/org/apache/groovy/ast/tools/ClassNodeUtils.java
index ffb6f70..f4617dd 100644
--- a/src/main/java/org/apache/groovy/ast/tools/ClassNodeUtils.java
+++ b/src/main/java/org/apache/groovy/ast/tools/ClassNodeUtils.java
@@ -298,7 +298,7 @@ public class ClassNodeUtils {
         if (accessorName.startsWith("get") || accessorName.startsWith("is") || accessorName.startsWith("set")) {
             int prefixLength = accessorName.startsWith("is") ? 2 : 3;
             return accessorName.length() > prefixLength;
-        };
+        }
         return false;
     }
 
diff --git a/src/main/java/org/codehaus/groovy/antlr/LineColumn.java b/src/main/java/org/codehaus/groovy/antlr/LineColumn.java
index ab0e3a7..054104a 100644
--- a/src/main/java/org/codehaus/groovy/antlr/LineColumn.java
+++ b/src/main/java/org/codehaus/groovy/antlr/LineColumn.java
@@ -45,9 +45,7 @@ public class LineColumn {
         final LineColumn lineColumn = (LineColumn) that;
 
         if (column != lineColumn.column) return false;
-        if (line != lineColumn.line) return false;
-
-        return true;
+        return line == lineColumn.line;
     }
 
     public int hashCode() {
diff --git a/src/main/java/org/codehaus/groovy/ast/GenericsType.java b/src/main/java/org/codehaus/groovy/ast/GenericsType.java
index 60cc6a7..1e68788 100644
--- a/src/main/java/org/codehaus/groovy/ast/GenericsType.java
+++ b/src/main/java/org/codehaus/groovy/ast/GenericsType.java
@@ -309,7 +309,7 @@ public class GenericsType extends ASTNode {
             }
             if (lowerBound!=null) {
                 if (!lowerBound.redirect().isUsingGenerics()) {
-                    if (!compareGenericsWithBound(classNode, lowerBound)) return false;
+                    return compareGenericsWithBound(classNode, lowerBound);
                 }
             }
             return true;
diff --git a/src/main/java/org/codehaus/groovy/control/CompilerConfiguration.java b/src/main/java/org/codehaus/groovy/control/CompilerConfiguration.java
index bf383bb..407085f 100644
--- a/src/main/java/org/codehaus/groovy/control/CompilerConfiguration.java
+++ b/src/main/java/org/codehaus/groovy/control/CompilerConfiguration.java
@@ -448,8 +448,8 @@ public class CompilerConfiguration {
     private void handleOptimizationOption(Map<String, Boolean> options, String optionName, String sysOptionName) {
         String propValue = getSystemPropertySafe(sysOptionName);
         boolean optionEnabled = propValue == null
-                ? (DEFAULT == null ? false : Boolean.TRUE.equals(DEFAULT.getOptimizationOptions().get(optionName)))
-                : Boolean.valueOf(propValue);
+                ? (DEFAULT != null && Boolean.TRUE.equals(DEFAULT.getOptimizationOptions().get(optionName)))
+                : Boolean.parseBoolean(propValue);
 
         if (optionEnabled) {
             options.put(optionName, Boolean.TRUE);
@@ -459,8 +459,8 @@ public class CompilerConfiguration {
     private void handleJointCompilationOption(Map<String, Object> options, String optionName, String sysOptionName) {
         String propValue = getSystemPropertySafe(sysOptionName);
         boolean optionEnabled = propValue == null
-                ? (DEFAULT == null ? false : Boolean.TRUE.equals(DEFAULT.getJointCompilationOptions().get(optionName)))
-                : Boolean.valueOf(propValue);
+                ? (DEFAULT != null && Boolean.TRUE.equals(DEFAULT.getJointCompilationOptions().get(optionName)))
+                : Boolean.parseBoolean(propValue);
 
         if (optionEnabled) {
             options.put(optionName, Boolean.TRUE);
diff --git a/src/main/java/org/codehaus/groovy/control/ResolveVisitor.java b/src/main/java/org/codehaus/groovy/control/ResolveVisitor.java
index 9d96690..0e4fced 100644
--- a/src/main/java/org/codehaus/groovy/control/ResolveVisitor.java
+++ b/src/main/java/org/codehaus/groovy/control/ResolveVisitor.java
@@ -647,10 +647,7 @@ public class ResolveVisitor extends ClassCodeExpressionTransformer {
             }
         }
 
-        if (resolveFromDefaultImports(type, DEFAULT_IMPORTS)) {
-            return true;
-        }
-        return false;
+        return resolveFromDefaultImports(type, DEFAULT_IMPORTS);
     }
 
 
diff --git a/src/main/java/org/codehaus/groovy/control/StaticImportVisitor.java b/src/main/java/org/codehaus/groovy/control/StaticImportVisitor.java
index cbe28f9..c31be6b 100644
--- a/src/main/java/org/codehaus/groovy/control/StaticImportVisitor.java
+++ b/src/main/java/org/codehaus/groovy/control/StaticImportVisitor.java
@@ -501,7 +501,7 @@ public class StaticImportVisitor extends ClassCodeExpressionTransformer {
             ImportNode importNode = starImports.get(currentClass.getName());
             starImportType = importNode == null ? null : importNode.getType();
             expression = findStaticMethod(starImportType, name, args);
-            if (expression != null) return expression;
+            return expression;
         } else {
             for (ImportNode importNode : starImports.values()) {
                 starImportType = importNode == null ? null : importNode.getType();
diff --git a/src/main/java/org/codehaus/groovy/runtime/InvokerHelper.java b/src/main/java/org/codehaus/groovy/runtime/InvokerHelper.java
index 09c4525..5f6a9b0 100644
--- a/src/main/java/org/codehaus/groovy/runtime/InvokerHelper.java
+++ b/src/main/java/org/codehaus/groovy/runtime/InvokerHelper.java
@@ -214,7 +214,7 @@ public class InvokerHelper {
             GroovyObject pogo = (GroovyObject) object;
             pogo.setProperty(property, newValue);
         } else if (object instanceof Class) {
-            metaRegistry.getMetaClass((Class) object).setProperty((Class) object, property, newValue);
+            metaRegistry.getMetaClass((Class) object).setProperty(object, property, newValue);
         } else {
             ((MetaClassRegistryImpl) GroovySystem.getMetaClassRegistry()).getMetaClass(object).setProperty(object, property, newValue);
         }
@@ -433,7 +433,7 @@ public class InvokerHelper {
         if (message == null || "".equals(message)) {
             throw new PowerAssertionError(expression.toString());
         }
-        throw new AssertionError(String.valueOf(message) + ". Expression: " + expression);
+        throw new AssertionError(message + ". Expression: " + expression);
     }
 
     public static Object runScript(Class scriptClass, String[] args) {
@@ -956,11 +956,11 @@ public class InvokerHelper {
         }
         if (value instanceof String) {
             // value is a regular expression.
-            return StringGroovyMethods.bitwiseNegate((CharSequence)value.toString());
+            return StringGroovyMethods.bitwiseNegate(value.toString());
         }
         if (value instanceof GString) {
             // value is a regular expression.
-            return StringGroovyMethods.bitwiseNegate((CharSequence)value.toString());
+            return StringGroovyMethods.bitwiseNegate(value.toString());
         }
         if (value instanceof ArrayList) {
             // value is a list.
diff --git a/src/main/java/org/codehaus/groovy/runtime/MetaClassHelper.java b/src/main/java/org/codehaus/groovy/runtime/MetaClassHelper.java
index 008803b..f1a8646 100644
--- a/src/main/java/org/codehaus/groovy/runtime/MetaClassHelper.java
+++ b/src/main/java/org/codehaus/groovy/runtime/MetaClassHelper.java
@@ -903,10 +903,7 @@ public class MetaClassHelper {
     }
 
     public static boolean sameClasses(Class[] params) {
-        if (params.length != 0)
-            return false;
-
-        return true;
+        return params.length == 0;
     }
 
     public static boolean sameClasses(Class[] params, Object arg1) {
@@ -923,9 +920,7 @@ public class MetaClassHelper {
             return false;
 
         if (params[0] != getClassWithNullAndWrapper(arg1)) return false;
-        if (params[1] != getClassWithNullAndWrapper(arg2)) return false;
-
-        return true;
+        return params[1] == getClassWithNullAndWrapper(arg2);
     }
 
     public static boolean sameClasses(Class[] params, Object arg1, Object arg2, Object arg3) {
@@ -934,9 +929,7 @@ public class MetaClassHelper {
 
         if (params[0] != getClassWithNullAndWrapper(arg1)) return false;
         if (params[1] != getClassWithNullAndWrapper(arg2)) return false;
-        if (params[2] != getClassWithNullAndWrapper(arg3)) return false;
-
-        return true;
+        return params[2] == getClassWithNullAndWrapper(arg3);
     }
 
     public static boolean sameClasses(Class[] params, Object arg1, Object arg2, Object arg3, Object arg4) {
@@ -946,9 +939,7 @@ public class MetaClassHelper {
         if (params[0] != getClassWithNullAndWrapper(arg1)) return false;
         if (params[1] != getClassWithNullAndWrapper(arg2)) return false;
         if (params[2] != getClassWithNullAndWrapper(arg3)) return false;
-        if (params[3] != getClassWithNullAndWrapper(arg4)) return false;
-        
-        return true;
+        return params[3] == getClassWithNullAndWrapper(arg4);
     }
 
     public static boolean sameClass(Class[] params, Object arg) {
diff --git a/src/main/java/org/codehaus/groovy/runtime/NullObject.java b/src/main/java/org/codehaus/groovy/runtime/NullObject.java
index 48f9170..12787f4 100644
--- a/src/main/java/org/codehaus/groovy/runtime/NullObject.java
+++ b/src/main/java/org/codehaus/groovy/runtime/NullObject.java
@@ -132,7 +132,7 @@ public class NullObject extends GroovyObjectSupport {
      * @return nothing
      */
     public Object plus(Object o) {
-        throw new NullPointerException("Cannot execute null+" + String.valueOf(o));
+        throw new NullPointerException("Cannot execute null+" + o);
     }
 
     /**
diff --git a/src/main/java/org/codehaus/groovy/runtime/m12n/ExtensionModuleRegistry.java b/src/main/java/org/codehaus/groovy/runtime/m12n/ExtensionModuleRegistry.java
index 77d53d3..a225f3d 100644
--- a/src/main/java/org/codehaus/groovy/runtime/m12n/ExtensionModuleRegistry.java
+++ b/src/main/java/org/codehaus/groovy/runtime/m12n/ExtensionModuleRegistry.java
@@ -50,11 +50,7 @@ public class ExtensionModuleRegistry {
     }
 
     public boolean hasModule(final String moduleName) {
-        if (null == getModule(moduleName)) {
-            return false;
-        }
-
-        return true;
+        return null != getModule(moduleName);
     }
 
     public ExtensionModule getModule(final String moduleName) {
diff --git a/src/main/java/org/codehaus/groovy/runtime/typehandling/DefaultTypeTransformation.java b/src/main/java/org/codehaus/groovy/runtime/typehandling/DefaultTypeTransformation.java
index c7fc0a5..0b40fd0 100644
--- a/src/main/java/org/codehaus/groovy/runtime/typehandling/DefaultTypeTransformation.java
+++ b/src/main/java/org/codehaus/groovy/runtime/typehandling/DefaultTypeTransformation.java
@@ -647,8 +647,7 @@ public class DefaultTypeTransformation {
             if (Objects.equals(k1, k2)) {
                 Object v1 = ((Map.Entry) left).getValue();
                 Object v2 = ((Map.Entry) right).getValue();
-                if (v1 == v2 || (v1 != null && DefaultTypeTransformation.compareEqual(v1, v2)))
-                    return true;
+                return v1 == v2 || (v1 != null && DefaultTypeTransformation.compareEqual(v1, v2));
             }
             return false;
         }
diff --git a/src/main/java/org/codehaus/groovy/tools/javac/JavaStubGenerator.java b/src/main/java/org/codehaus/groovy/tools/javac/JavaStubGenerator.java
index 879064f..1d286a5 100644
--- a/src/main/java/org/codehaus/groovy/tools/javac/JavaStubGenerator.java
+++ b/src/main/java/org/codehaus/groovy/tools/javac/JavaStubGenerator.java
@@ -765,10 +765,7 @@ public class JavaStubGenerator {
         if (isDefaultTraitImpl(methodNode)) {
             return false;
         }
-        if ((methodNode.getModifiers() & Opcodes.ACC_ABSTRACT) != 0) {
-            return true;
-        }
-        return false;
+        return (methodNode.getModifiers() & Opcodes.ACC_ABSTRACT) != 0;
     }
 
     private static boolean isDefaultTraitImpl(final MethodNode methodNode) {


[groovy] 01/23: add some tests and clean up some tests

Posted by pa...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

paulk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git

commit 5073dc0492afaaac88a7fad3896d246b3ecadf7e
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Thu Sep 12 17:10:14 2019 -0500

    add some tests and clean up some tests
---
 .../PackageAndImportAnnotationTest.groovy          | 19 ++++--
 .../{Groovy4418Bug.groovy => Groovy4418.groovy}    |  4 +-
 src/test/groovy/bugs/Groovy8063.groovy             | 64 ++++++++++++++++++
 src/test/groovy/bugs/Groovy9204.groovy             | 78 ++++++++++++++++++++++
 src/test/groovy/bugs/Groovy9213.groovy             | 53 +++++++++++++++
 .../{Groovy9243Bug.groovy => Groovy9243.groovy}    | 17 +++--
 .../{Groovy7276Bug.groovy => Groovy7276.groovy}    |  2 +-
 7 files changed, 224 insertions(+), 13 deletions(-)

diff --git a/src/test/groovy/annotations/PackageAndImportAnnotationTest.groovy b/src/test/groovy/annotations/PackageAndImportAnnotationTest.groovy
index 304ef79..cfeac15 100644
--- a/src/test/groovy/annotations/PackageAndImportAnnotationTest.groovy
+++ b/src/test/groovy/annotations/PackageAndImportAnnotationTest.groovy
@@ -18,23 +18,32 @@
  */
 package groovy.annotations
 
-class PackageAndImportAnnotationTest extends GroovyTestCase {
+import groovy.transform.CompileStatic
+import org.junit.Test
+
+import static groovy.test.GroovyAssert.assertScript
+
+@CompileStatic
+final class PackageAndImportAnnotationTest {
+
+    @Test
     void testTransformationOfPropertyInvokedOnThis() {
-        assertScript """
+        assertScript '''
             def x = new groovy.annotations.MyClass()
             assert x.class.annotations[0].value() == 60
             assert x.class.package.annotations[0].value() == 30
             new AntBuilder().with {
                 mkdir(dir:'temp')
                 delete(file:'temp/log.txt')
-                taskdef(name:'groovyc', classname:"org.codehaus.groovy.ant.Groovyc")
+                taskdef(name:'groovyc', classname:'org.codehaus.groovy.ant.Groovyc')
                 groovyc(srcdir:'src/test', destdir:'temp', includes:'groovy/annotations/MyClass.groovy')
                 def text = new File('temp/log.txt').text
+                delete(dir:'temp')
+
                 assert text.contains('ClassNode 60')
                 assert text.contains('PackageNode 40')
                 assert text.contains('ImportNode 50')
-                delete(dir:'temp')
             }
-        """
+        '''
     }
 }
diff --git a/src/test/groovy/bugs/Groovy4418Bug.groovy b/src/test/groovy/bugs/Groovy4418.groovy
similarity index 98%
rename from src/test/groovy/bugs/Groovy4418Bug.groovy
rename to src/test/groovy/bugs/Groovy4418.groovy
index f96537d..8a7239b 100644
--- a/src/test/groovy/bugs/Groovy4418Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4418.groovy
@@ -18,12 +18,14 @@
  */
 package groovy.bugs
 
+import groovy.transform.CompileStatic
 import org.junit.Test
 
 import static groovy.test.GroovyAssert.assertScript
 import static groovy.test.GroovyAssert.shouldFail
 
-final class Groovy4418Bug {
+@CompileStatic
+final class Groovy4418 {
 
     @Test
     void testStaticFieldAccess() {
diff --git a/src/test/groovy/bugs/Groovy8063.groovy b/src/test/groovy/bugs/Groovy8063.groovy
new file mode 100644
index 0000000..2644329
--- /dev/null
+++ b/src/test/groovy/bugs/Groovy8063.groovy
@@ -0,0 +1,64 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package groovy.bugs
+
+import groovy.transform.CompileStatic
+import org.junit.Ignore
+import org.junit.Test
+
+import static groovy.test.GroovyAssert.assertScript
+import static groovy.test.GroovyAssert.shouldFail
+
+@CompileStatic
+final class Groovy8063 {
+
+    @Test
+    void testTypeAnnotationWithQualifiedInnerClassReference() {
+        assertScript '''
+            @interface Anno {
+                Class value()
+            }
+
+            @Anno(value=Outer.Inner)
+            class Outer {
+                static class Inner {}
+            }
+
+            new Outer()
+        '''
+    }
+
+    @Test @Ignore
+    void testTypeAnnotationWithUnqualifiedInnerClassReference() {
+        def err = shouldFail '''
+            @interface Anno {
+                Class value()
+            }
+
+            @Anno(value=Inner) // type annotation is outside the class scope
+            class Outer {
+                static class Inner {}
+            }
+
+            new Outer()
+        '''
+
+        assert err =~ / X /
+    }
+}
diff --git a/src/test/groovy/bugs/Groovy9204.groovy b/src/test/groovy/bugs/Groovy9204.groovy
new file mode 100644
index 0000000..d6fc95f
--- /dev/null
+++ b/src/test/groovy/bugs/Groovy9204.groovy
@@ -0,0 +1,78 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package groovy.bugs
+
+import groovy.test.NotYetImplemented
+import org.codehaus.groovy.control.CompilerConfiguration
+import org.codehaus.groovy.tools.javac.JavaAwareCompilationUnit
+import org.junit.Test
+
+final class Groovy9204 {
+
+    @Test @NotYetImplemented
+    void testGenerics() {
+        def config = new CompilerConfiguration(
+            targetDirectory: File.createTempDir(),
+            jointCompilationOptions: [memStub: true]
+        )
+
+        def parentDir = File.createTempDir()
+        try {
+            def a = new File(parentDir, 'A.java')
+            a.write '''
+                public class A {
+                    public String meth() {
+                        return "hello";
+                    }
+                }
+
+                abstract class One<T extends A> {
+                    protected T field;
+                }
+
+                abstract class Two<T extends A> extends One<T> {
+                }
+
+                abstract class Three extends Two<A> {
+                }
+            '''
+            def b = new File(parentDir, 'B.groovy')
+            b.write '''
+                @groovy.transform.CompileStatic
+                class B extends Three {
+                    def test() {
+                        field.meth() // typeof(field) should be A
+                        //    ^^^^ Cannot find matching method java.lang.Object#meth()
+                    }
+                }
+            '''
+
+            def loader = new GroovyClassLoader(this.class.classLoader)
+            def cu = new JavaAwareCompilationUnit(config, loader)
+            cu.addSources(a, b)
+            cu.compile()
+
+            Class clazz = loader.loadClass('B')
+            assert clazz.newInstance().test() == 'hello'
+        } finally {
+            parentDir.deleteDir()
+            config.targetDirectory.deleteDir()
+        }
+    }
+}
diff --git a/src/test/groovy/bugs/Groovy9213.groovy b/src/test/groovy/bugs/Groovy9213.groovy
new file mode 100644
index 0000000..2e8980c
--- /dev/null
+++ b/src/test/groovy/bugs/Groovy9213.groovy
@@ -0,0 +1,53 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *    http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+package groovy.bugs
+
+import groovy.transform.CompileStatic
+import org.codehaus.groovy.control.CompilerConfiguration
+import org.junit.Ignore
+import org.junit.Test
+
+import static org.codehaus.groovy.control.ParserPluginFactory.antlr2
+import static org.codehaus.groovy.control.ParserPluginFactory.antlr4
+
+@CompileStatic @Ignore
+final class Groovy9213 {
+
+    @Test(timeout=15000L)
+    void testUnmatchedParenInLongScript2() {
+        def config = new CompilerConfiguration()
+        config.pluginFactory = antlr2()
+
+        new GroovyShell(config).evaluate('''
+            int a = 0
+            (
+        ''' + ('a = 0\n' * 50))
+    }
+
+    @Test(timeout=15000L)
+    void testUnmatchedParenInLongScript4() {
+        def config = new CompilerConfiguration()
+        config.pluginFactory = antlr4(config)
+
+        new GroovyShell(config).evaluate('''
+            int a = 0
+            (
+        ''' + ('a = 0\n' * 50))
+    }
+}
diff --git a/src/test/groovy/bugs/Groovy9243Bug.groovy b/src/test/groovy/bugs/Groovy9243.groovy
similarity index 73%
rename from src/test/groovy/bugs/Groovy9243Bug.groovy
rename to src/test/groovy/bugs/Groovy9243.groovy
index e0fb10b..c03e211 100644
--- a/src/test/groovy/bugs/Groovy9243Bug.groovy
+++ b/src/test/groovy/bugs/Groovy9243.groovy
@@ -18,15 +18,20 @@
  */
 package groovy.bugs
 
+import groovy.transform.CompileStatic
 import org.codehaus.groovy.tools.GroovyStarter
+import org.junit.Test
 
-class Groovy9243Bug extends GroovyTestCase {
-    void testResolveNestedClassFromBaseType() {
-        def mainScriptPath = new File(this.getClass().getResource('/groovy/bugs/groovy9243/Main.groovy').toURI()).absolutePath
-        runScript(mainScriptPath)
+@CompileStatic
+final class Groovy9243 {
+
+    private static void runScript(String path) {
+        GroovyStarter.main('--main', 'groovy.ui.GroovyMain', path)
     }
 
-    static void runScript(String path) {
-        GroovyStarter.main(new String[] { "--main", "groovy.ui.GroovyMain", path })
+    @Test
+    void testResolveNestedClassFromBaseType() {
+        def mainScriptPath = new File(getClass().getResource('/groovy/bugs/groovy9243/Main.groovy').toURI()).absolutePath
+        runScript(mainScriptPath)
     }
 }
diff --git a/src/test/org/codehaus/groovy/classgen/asm/sc/bugs/Groovy7276Bug.groovy b/src/test/org/codehaus/groovy/classgen/asm/sc/bugs/Groovy7276.groovy
similarity index 96%
rename from src/test/org/codehaus/groovy/classgen/asm/sc/bugs/Groovy7276Bug.groovy
rename to src/test/org/codehaus/groovy/classgen/asm/sc/bugs/Groovy7276.groovy
index 69bcdf1..97d8529 100644
--- a/src/test/org/codehaus/groovy/classgen/asm/sc/bugs/Groovy7276Bug.groovy
+++ b/src/test/org/codehaus/groovy/classgen/asm/sc/bugs/Groovy7276.groovy
@@ -22,7 +22,7 @@ import groovy.test.NotYetImplemented
 import groovy.transform.stc.StaticTypeCheckingTestCase
 import org.codehaus.groovy.classgen.asm.sc.StaticCompilationTestSupport
 
-final class Groovy7276Bug extends StaticTypeCheckingTestCase implements StaticCompilationTestSupport {
+final class Groovy7276 extends StaticTypeCheckingTestCase implements StaticCompilationTestSupport {
 
     void testShouldGoThroughPrivateBridgeAccessor() {
         assertScript '''


[groovy] 16/23: GROOVY-9254: Split package renaming second stage (remove violating packages)

Posted by pa...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

paulk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git

commit 0dfbdf90a90bdfc6889682124b641f5d0a3253e4
Author: Paul King <pa...@asert.com.au>
AuthorDate: Thu Sep 19 18:17:09 2019 +1000

    GROOVY-9254: Split package renaming second stage (remove violating packages)
---
 src/main/java/groovy/xml/QName.java                |  288 ---
 .../main/groovy/groovy/util/FileNameFinder.groovy  |   49 -
 .../src/main/java/groovy/util/AntBuilder.java      |  514 -----
 .../src/main/groovy/groovy/util/CliBuilder.groovy  |   82 -
 .../main/groovy/groovy/util/OptionAccessor.groovy  |   38 -
 .../src/main/java/groovy/util/GroovyMBean.java     |  394 ----
 .../codehaus/groovy/runtime/NioGroovyMethods.java  | 2023 --------------------
 .../org/codehaus/groovy/runtime/WritablePath.java  |  216 ---
 .../groovy/groovy/lang/GroovyLogTestCase.groovy    |   86 -
 .../groovy/groovy/util/GroovyShellTestCase.groovy  |   83 -
 .../groovy/util/JavadocAssertionTestBuilder.groovy |  144 --
 .../groovy/util/JavadocAssertionTestSuite.groovy   |  123 --
 .../main/groovy/groovy/util/StringTestUtil.groovy  |   33 -
 .../java/groovy/transform/NotYetImplemented.java   |   47 -
 .../src/main/java/groovy/util/AllTestSuite.java    |  147 --
 .../src/main/java/groovy/util/GroovyAssert.java    |  146 --
 .../src/main/java/groovy/util/GroovyTestCase.java  |  281 ---
 .../src/main/java/groovy/util/GroovyTestSuite.java |   99 -
 .../codehaus/groovy/runtime/ScriptTestAdapter.java |   58 -
 .../src/main/java/groovy/util/XmlNodePrinter.java  |  446 -----
 .../src/main/java/groovy/util/XmlParser.java       |  505 -----
 .../src/main/java/groovy/util/XmlSlurper.java      |  467 -----
 .../src/main/java/groovy/util/XmlUtil.java         |   78 -
 .../java/groovy/util/slurpersupport/Attribute.java |  143 --
 .../groovy/util/slurpersupport/Attributes.java     |  140 --
 .../util/slurpersupport/FilteredAttributes.java    |   59 -
 .../util/slurpersupport/FilteredNodeChildren.java  |   65 -
 .../groovy/util/slurpersupport/GPathResult.java    |  711 -------
 .../util/slurpersupport/NamespaceAwareHashMap.java |   79 -
 .../groovy/util/slurpersupport/NoChildren.java     |  167 --
 .../main/java/groovy/util/slurpersupport/Node.java |  339 ----
 .../java/groovy/util/slurpersupport/NodeChild.java |  160 --
 .../groovy/util/slurpersupport/NodeChildren.java   |  235 ---
 .../groovy/util/slurpersupport/NodeIterator.java   |   60 -
 .../groovy/util/slurpersupport/NodeParents.java    |   56 -
 .../util/slurpersupport/ReplacementNode.java       |   47 -
 .../java/groovy/util/slurpersupport/package.html   |   28 -
 .../codehaus/groovy/runtime/XmlGroovyMethods.java  |   75 -
 .../org/codehaus/groovy/tools/xml/DomToGroovy.java |  405 ----
 39 files changed, 9116 deletions(-)

diff --git a/src/main/java/groovy/xml/QName.java b/src/main/java/groovy/xml/QName.java
deleted file mode 100644
index 0c37f42..0000000
--- a/src/main/java/groovy/xml/QName.java
+++ /dev/null
@@ -1,288 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package groovy.xml;
-
-import java.io.Serializable;
-
-/**
- * <code>QName</code> class represents the value of a qualified name
- * as specified in <a href="http://www.w3.org/TR/xmlschema-2/#QName">XML
- * Schema Part2: Datatypes specification</a>.
- * <p>
- * The value of a QName contains a <b>namespaceURI</b>, a <b>localPart</b> and a <b>prefix</b>.
- * The localPart provides the local part of the qualified name. The
- * namespaceURI is a URI reference identifying the namespace.
- */
-@Deprecated
-public class QName implements Serializable {
-    private static final long serialVersionUID = -9029109610006696081L;
-
-    /** comment/shared empty string */
-    private static final String EMPTY_STRING = "";
-
-    /** Field namespaceURI */
-    private String namespaceURI;
-
-    /** Field localPart */
-    private String localPart;
-
-    /** Field prefix */
-    private String prefix;
-
-    /**
-     * Constructor for the QName.
-     *
-     * @param localPart Local part of the QName
-     */
-    public QName(String localPart) {
-        this(EMPTY_STRING, localPart, EMPTY_STRING);
-    }
-
-    /**
-     * Constructor for the QName.
-     *
-     * @param namespaceURI Namespace URI for the QName
-     * @param localPart Local part of the QName.
-     */
-    public QName(String namespaceURI, String localPart) {
-        this(namespaceURI, localPart, EMPTY_STRING);
-    }
-
-    /**
-     * Constructor for the QName.
-     *
-     * @param namespaceURI Namespace URI for the QName
-     * @param localPart Local part of the QName.
-     * @param prefix Prefix of the QName.
-     */
-    public QName(String namespaceURI, String localPart, String prefix) {
-        this.namespaceURI = (namespaceURI == null)
-                ? EMPTY_STRING
-                : namespaceURI;
-        if (localPart == null) {
-            throw new IllegalArgumentException("invalid QName local part");
-        } else {
-            this.localPart = localPart;
-        }
-
-        if (prefix == null) {
-            throw new IllegalArgumentException("invalid QName prefix");
-        } else {
-            this.prefix = prefix;
-        }
-    }
-
-    /**
-     * Gets the Namespace URI for this QName
-     *
-     * @return Namespace URI
-     */
-    public String getNamespaceURI() {
-        return namespaceURI;
-    }
-
-    /**
-     * Gets the Local part for this QName
-     *
-     * @return Local part
-     */
-    public String getLocalPart() {
-        return localPart;
-    }
-
-    /**
-     * Gets the Prefix for this QName
-     *
-     * @return Prefix
-     */
-    public String getPrefix() {
-        return prefix;
-    }
-
-    /**
-     * Returns the fully qualified name of this QName
-     *
-     * @return  a string representation of the QName
-     */
-    public String getQualifiedName() {
-        return ((prefix.equals(EMPTY_STRING))
-                ? localPart
-                : prefix + ':' + localPart);
-    }
-
-    /**
-     * Returns a string representation of this QName
-     *
-     * @return  a string representation of the QName
-     */
-    public String toString() {
-        return ((namespaceURI.equals(EMPTY_STRING))
-                ? localPart
-                : '{' + namespaceURI + '}' + localPart);
-    }
-
-    /**
-     * Tests this QName for equality with another object.
-     * <p>
-     * If the given object is not a QName or String equivalent or is null then this method
-     * returns <tt>false</tt>.
-     * <p>
-     * For two QNames to be considered equal requires that both
-     * localPart and namespaceURI must be equal. This method uses
-     * <code>String.equals</code> to check equality of localPart
-     * and namespaceURI. Any class that extends QName is required
-     * to satisfy this equality contract.
-     *
-     * If the supplied object is a String, then it is split in two on the last colon
-     * and the first half is compared against the prefix || namespaceURI
-     * and the second half is compared against the localPart
-     *
-     * i.e.&#160;assert new QName("namespace","localPart").equals("namespace:localPart")
-     *
-     * Intended Usage: for gpath accessors, e.g.&#160;root.'urn:mynamespace:node'
-     *
-     * Warning: this equivalence is not commutative,
-     * i.e.&#160;qname.equals(string) may be true/false  but string.equals(qname) is always false
-     *
-     * <p>
-     * This method satisfies the general contract of the <code>Object.equals</code> method.
-     *
-     * @param o the reference object with which to compare
-     *
-     * @return <code>true</code> if the given object is identical to this
-     *      QName: <code>false</code> otherwise.
-     */
-    public boolean equals(Object o) {
-        if (this == o) return true;
-        if (o == null) return false;
-        if (o instanceof QName) {
-            final QName qName = (QName) o;
-            if (!namespaceURI.equals(qName.namespaceURI)) return false;
-            return localPart.equals(qName.localPart);
-
-        } else if (o instanceof String) {
-            final String string = (String)o;
-            if (string.length() == 0) return false;
-            int lastColonIndex = string.lastIndexOf(":");
-            if (lastColonIndex < 0 || lastColonIndex == string.length() - 1) return false;
-            final String stringPrefix = string.substring(0,lastColonIndex);
-            final String stringLocalPart = string.substring(lastColonIndex + 1);
-            if (stringPrefix.equals(prefix) || stringPrefix.equals(namespaceURI)) {
-                return localPart.equals(stringLocalPart);
-            }
-            return false;
-        }
-        return false;
-    }
-
-    /**
-     * Tests if this QName matches another object.
-     * <p>
-     * If the given object is not a QName or String equivalent or is null then this method
-     * returns <tt>false</tt>.
-     * <p>
-     * For two QNames to be considered matching requires that both
-     * localPart and namespaceURI must be equal or one of them is a wildcard.
-     *
-     * If the supplied object is a String, then it is split in two on the last colon
-     * and the first half is matched against the prefix || namespaceURI
-     * and the second half is matched against the localPart
-     *
-     * @param o the reference object with which to compare
-     *
-     * @return <code>true</code> if the given object matches
-     * this QName: <code>false</code> otherwise.
-     */
-    public boolean matches(Object o) {
-        if (this == o) return true;
-        if (o == null) return false;
-        if (o instanceof QName) {
-            final QName qName = (QName) o;
-            if (!namespaceURI.equals(qName.namespaceURI) && !namespaceURI.equals("*") && !qName.namespaceURI.equals("*")) return false;
-            return localPart.equals(qName.localPart) || localPart.equals("*") || qName.localPart.equals("*");
-        } else if (o instanceof String) {
-            final String string = (String)o;
-            if (string.length() == 0) return false;
-            // try matching against 'prefix:localname'
-            int lastColonIndex = string.lastIndexOf(":");
-            if (lastColonIndex < 0 && prefix.length() == 0) return string.equals(localPart);
-            if (lastColonIndex < 0 || lastColonIndex == string.length() - 1) return false;
-            final String stringPrefix = string.substring(0,lastColonIndex);
-            final String stringLocalPart = string.substring(lastColonIndex + 1);
-            if (stringPrefix.equals(prefix) || stringPrefix.equals(namespaceURI) || stringPrefix.equals("*")) {
-                return localPart.equals(stringLocalPart) || stringLocalPart.equals("*");
-            }
-        }
-        return false;
-    }
-
-    /**
-     * Returns a QName holding the value of the specified String.
-     * <p>
-     * The string must be in the form returned by the QName.toString()
-     * method, i.e. "{namespaceURI}localPart", with the "{namespaceURI}"
-     * part being optional.
-     * <p>
-     * This method doesn't do a full validation of the resulting QName.
-     * In particular, it doesn't check that the resulting namespace URI
-     * is a legal URI (per RFC 2396 and RFC 2732), nor that the resulting
-     * local part is a legal NCName per the XML Namespaces specification.
-     *
-     * @param s the string to be parsed
-     * @throws java.lang.IllegalArgumentException If the specified String cannot be parsed as a QName
-     * @return QName corresponding to the given String
-     */
-    public static QName valueOf(String s) {
-
-        if ((s == null) || s.equals("")) {
-            throw new IllegalArgumentException("invalid QName literal");
-        }
-
-        if (s.charAt(0) == '{') {
-            int i = s.indexOf('}');
-
-            if (i == -1) {
-                throw new IllegalArgumentException("invalid QName literal");
-            }
-
-            if (i == s.length() - 1) {
-                throw new IllegalArgumentException("invalid QName literal");
-            } else {
-                return new QName(s.substring(1, i), s.substring(i + 1));
-            }
-        } else {
-            return new QName(s);
-        }
-    }
-
-    /**
-     * Returns a hash code value for this QName object. The hash code
-     * is based on both the localPart and namespaceURI parts of the
-     * QName. This method satisfies the  general contract of the
-     * <code>Object.hashCode</code> method.
-     *
-     * @return a hash code value for this Qname object
-     */
-    public int hashCode() {
-        int result;
-        result = namespaceURI.hashCode();
-        result = 29 * result + localPart.hashCode();
-        return result;
-    }
-}
\ No newline at end of file
diff --git a/subprojects/groovy-ant/src/main/groovy/groovy/util/FileNameFinder.groovy b/subprojects/groovy-ant/src/main/groovy/groovy/util/FileNameFinder.groovy
deleted file mode 100644
index c751d30..0000000
--- a/subprojects/groovy-ant/src/main/groovy/groovy/util/FileNameFinder.groovy
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package groovy.util
-
-import groovy.ant.AntBuilder
-
-/**
- * Find files according to a base directory and an includes and excludes pattern.
- * The include and exclude patterns conform to Ant's fileset pattern conventions.
- */
-@Deprecated
-class FileNameFinder implements IFileNameFinder {
-
-    List<String> getFileNames(String basedir, String pattern) {
-        getFileNames(dir: basedir, includes: pattern)
-    }
-
-    List<String> getFileNames(String basedir, String pattern, String excludesPattern) {
-        getFileNames(dir: basedir, includes: pattern, excludes: excludesPattern)
-    }
-
-    List<String> getFileNames(Map args) {
-        def ant = new AntBuilder()
-        def scanner = ant.fileScanner {
-            fileset(args)
-        }
-        List<String> files = []
-        for (File f in scanner) {
-            files << f.absolutePath
-        }
-        files
-    }
-}
diff --git a/subprojects/groovy-ant/src/main/java/groovy/util/AntBuilder.java b/subprojects/groovy-ant/src/main/java/groovy/util/AntBuilder.java
deleted file mode 100644
index 988140d..0000000
--- a/subprojects/groovy-ant/src/main/java/groovy/util/AntBuilder.java
+++ /dev/null
@@ -1,514 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package groovy.util;
-
-import groovy.xml.QName;
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.BuildLogger;
-import org.apache.tools.ant.DemuxInputStream;
-import org.apache.tools.ant.DemuxOutputStream;
-import org.apache.tools.ant.Location;
-import org.apache.tools.ant.NoBannerLogger;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.ProjectHelper;
-import org.apache.tools.ant.RuntimeConfigurable;
-import org.apache.tools.ant.Target;
-import org.apache.tools.ant.Task;
-import org.apache.tools.ant.UnknownElement;
-import org.apache.tools.ant.dispatch.DispatchUtils;
-import org.apache.tools.ant.helper.AntXMLContext;
-import org.apache.tools.ant.helper.ProjectHelper2;
-import org.codehaus.groovy.ant.FileScanner;
-import org.codehaus.groovy.reflection.ReflectionUtils;
-import org.codehaus.groovy.runtime.DefaultGroovyMethodsSupport;
-import org.xml.sax.Attributes;
-import org.xml.sax.Locator;
-import org.xml.sax.SAXParseException;
-import org.xml.sax.helpers.AttributesImpl;
-
-import java.io.InputStream;
-import java.io.PrintStream;
-import java.lang.reflect.Method;
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Vector;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/**
- * Allows <a href="http://ant.apache.org/manual/coretasklist.html">Ant tasks</a> to
- * be used with a Groovy builder-style markup. Requires that {{ant.jar}} is on your classpath which will
- * happen automatically if you are using the Groovy distribution but will be up
- * to you to organize if you are embedding Groovy. If you wish to use the
- * <a href="http://ant.apache.org/manual/install#optionalTasks">optional tasks</a>
- * you will need to add one or more additional jars from the ant distribution to
- * your classpath - see the <a href="http://ant.apache.org/manual/install.html#librarydependencies">library
- * dependencies</a> for more details.
- */
-@Deprecated
-public class AntBuilder extends BuilderSupport {
-
-    private final Logger log = Logger.getLogger(getClass().getName());
-    private final Project project;
-    private final AntXMLContext antXmlContext;
-    private final ProjectHelper2.ElementHandler antElementHandler = new ProjectHelper2.ElementHandler();
-    private final ProjectHelper2.TargetHandler antTargetHandler = new ProjectHelper2.TargetHandler();
-    private final Target collectorTarget;
-    private final Target implicitTarget;
-    private Target definingTarget;
-    private Object lastCompletedNode;
-    // true when inside a task so special ant.target handling occurs just at top level
-    boolean insideTask;
-
-    private boolean saveStreams = true;
-    private static Integer streamCount = 0;
-    private static InputStream savedIn;
-    private static PrintStream savedErr;
-    private static PrintStream savedOut;
-    private static DemuxInputStream demuxInputStream;
-    private static DemuxOutputStream demuxOutputStream;
-    private static DemuxOutputStream demuxErrorStream;
-    private static InputStream savedProjectInputStream;
-
-    public AntBuilder() {
-        this(createProject());
-    }
-
-    public AntBuilder(final Project project) {
-        this(project, new Target());
-    }
-
-    public AntBuilder(final Project project, final Target owningTarget) {
-        this.project = project;
-
-        /*
-         * GROOVY-4524: The following is not needed anymore as an ant Project already by default has inputhandler
-         * set to DefaultInputHandler. And if it is again set here, it mistakenly overrides the custom input handler
-         * if set using -inputhandler switch. 
-         */
-        //this.project.setInputHandler(new DefaultInputHandler());
-
-        collectorTarget = owningTarget;
-        antXmlContext = new AntXMLContext(project);
-        collectorTarget.setProject(project);
-        antXmlContext.setCurrentTarget(collectorTarget);
-        antXmlContext.setLocator(new AntBuilderLocator());
-        antXmlContext.setCurrentTargets(new HashMap<String, Target>());
-
-        implicitTarget = new Target();
-        implicitTarget.setProject(project);
-        implicitTarget.setName("");
-        antXmlContext.setImplicitTarget(implicitTarget);
-
-        // FileScanner is a Groovy utility
-        project.addDataTypeDefinition("fileScanner", FileScanner.class);
-    }
-
-    public AntBuilder(final Task parentTask) {
-        this(parentTask.getProject(), parentTask.getOwningTarget());
-
-        // define "owning" task as wrapper to avoid having tasks added to the target
-        // but it needs to be an UnknownElement and no access is available from
-        // task to its original UnknownElement 
-        final UnknownElement ue = new UnknownElement(parentTask.getTaskName());
-        ue.setProject(parentTask.getProject());
-        ue.setTaskType(parentTask.getTaskType());
-        ue.setTaskName(parentTask.getTaskName());
-        ue.setLocation(parentTask.getLocation());
-        ue.setOwningTarget(parentTask.getOwningTarget());
-        ue.setRuntimeConfigurableWrapper(parentTask.getRuntimeConfigurableWrapper());
-        parentTask.getRuntimeConfigurableWrapper().setProxy(ue);
-        antXmlContext.pushWrapper(parentTask.getRuntimeConfigurableWrapper());
-    }
-
-    /**
-     * #
-     * Gets the Ant project in which the tasks are executed
-     *
-     * @return the project
-     */
-    public Project getProject() {
-        return project;
-    }
-
-    /**
-     * Gets the xml context of Ant used while creating tasks
-     *
-     * @return the Ant xml context
-     */
-    public AntXMLContext getAntXmlContext() {
-        return antXmlContext;
-    }
-
-    /**
-     * Whether stdin, stdout, stderr streams are saved.
-     *
-     * @return true if we are saving streams
-     * @see #setSaveStreams(boolean)
-     */
-    public boolean isSaveStreams() {
-        return saveStreams;
-    }
-
-    /**
-     * Indicates that we save stdin, stdout, stderr and replace them
-     * while AntBuilder is executing tasks with
-     * streams that funnel the normal streams into Ant's logs.
-     *
-     * @param saveStreams set to false to disable this behavior
-     */
-    public void setSaveStreams(boolean saveStreams) {
-        this.saveStreams = saveStreams;
-    }
-
-    /**
-     * @return Factory method to create new Project instances
-     */
-    protected static Project createProject() {
-        final Project project = new Project();
-
-        final ProjectHelper helper = ProjectHelper.getProjectHelper();
-        project.addReference(ProjectHelper.PROJECTHELPER_REFERENCE, helper);
-        helper.getImportStack().addElement("AntBuilder"); // import checks that stack is not empty 
-
-        final BuildLogger logger = new NoBannerLogger();
-
-        logger.setMessageOutputLevel(org.apache.tools.ant.Project.MSG_INFO);
-        logger.setOutputPrintStream(System.out);
-        logger.setErrorPrintStream(System.err);
-
-        project.addBuildListener(logger);
-
-        project.init();
-        project.getBaseDir();
-        return project;
-    }
-
-    protected void setParent(Object parent, Object child) {
-    }
-
-    /**
-     * We don't want to return the node as created in {@link #createNode(Object, Map, Object)}
-     * but the one made ready by {@link #nodeCompleted(Object, Object)}
-     *
-     * @see groovy.util.BuilderSupport#doInvokeMethod(java.lang.String, java.lang.Object, java.lang.Object)
-     */
-    protected Object doInvokeMethod(String methodName, Object name, Object args) {
-        super.doInvokeMethod(methodName, name, args);
-
-
-        // return the completed node
-        return lastCompletedNode;
-    }
-
-    /**
-     * Determines, when the ANT Task that is represented by the "node" should perform.
-     * Node must be an ANT Task or no "perform" is called.
-     * If node is an ANT Task, it performs right after complete construction.
-     * If node is nested in a TaskContainer, calling "perform" is delegated to that
-     * TaskContainer.
-     *
-     * @param parent note: null when node is root
-     * @param node   the node that now has all its children applied
-     */
-    protected void nodeCompleted(final Object parent, final Object node) {
-        if (parent == null) insideTask = false;
-        antElementHandler.onEndElement(null, null, antXmlContext);
-
-        lastCompletedNode = node;
-        if (parent != null && !(parent instanceof Target)) {
-            log.finest("parent is not null: no perform on nodeCompleted");
-            return; // parent will care about when children perform
-        }
-        if (definingTarget != null && definingTarget == parent && node instanceof Task) return; // inside defineTarget
-        if (definingTarget == node) {
-            definingTarget = null;
-        }
-
-        // as in Target.execute()
-        if (node instanceof Task) {
-            Task task = (Task) node;
-            final String taskName = task.getTaskName();
-
-            if ("antcall".equals(taskName) && parent == null) {
-                throw new BuildException("antcall not supported within AntBuilder, consider using 'ant.project.executeTarget('targetName')' instead.");
-            }
-
-            if (saveStreams) {
-                // save original streams
-                synchronized (AntBuilder.class) {
-                    int currentStreamCount = streamCount++;
-                    if (currentStreamCount == 0) {
-                        // we are first, save the streams
-                        savedProjectInputStream = project.getDefaultInputStream();
-                        savedIn = System.in;
-                        savedErr = System.err;
-                        savedOut = System.out;
-
-                        if (!(savedIn instanceof DemuxInputStream)) {
-                            project.setDefaultInputStream(savedIn);
-                            demuxInputStream = new DemuxInputStream(project);
-                            System.setIn(demuxInputStream);
-                        }
-                        demuxOutputStream = new DemuxOutputStream(project, false);
-                        System.setOut(new PrintStream(demuxOutputStream));
-                        demuxErrorStream = new DemuxOutputStream(project, true);
-                        System.setErr(new PrintStream(demuxErrorStream));
-                    }
-                }
-            }
-
-            try {
-                lastCompletedNode = performTask(task);
-            } finally {
-                if (saveStreams) {
-                    synchronized (AntBuilder.class) {
-                        int currentStreamCount = --streamCount;
-                        if (currentStreamCount == 0) {
-                            // last to leave, turn out the lights: restore original streams
-                            project.setDefaultInputStream(savedProjectInputStream);
-                            System.setOut(savedOut);
-                            System.setErr(savedErr);
-                            if (demuxInputStream != null) {
-                                System.setIn(savedIn);
-                                DefaultGroovyMethodsSupport.closeQuietly(demuxInputStream);
-                                demuxInputStream = null;
-                            }
-                            DefaultGroovyMethodsSupport.closeQuietly(demuxOutputStream);
-                            DefaultGroovyMethodsSupport.closeQuietly(demuxErrorStream);
-                            demuxOutputStream = null;
-                            demuxErrorStream = null;
-                        }
-                    }
-                }
-            }
-
-            // restore dummy collector target
-            if ("import".equals(taskName)) {
-                antXmlContext.setCurrentTarget(collectorTarget);
-            }
-        } else if (node instanceof Target) {
-            // restore dummy collector target
-            antXmlContext.setCurrentTarget(collectorTarget);
-        } else {
-            final RuntimeConfigurable r = (RuntimeConfigurable) node;
-            r.maybeConfigure(project);
-        }
-    }
-
-    // Copied from org.apache.tools.ant.Task, since we need to get a real thing before it gets nulled in DispatchUtils.execute
-
-    private Object performTask(Task task) {
-
-        Throwable reason = null;
-        try {
-            // Have to call fireTestStared/fireTestFinished via reflection as they unfortunately have protected access in Project
-            final Method fireTaskStarted = Project.class.getDeclaredMethod("fireTaskStarted", Task.class);
-            ReflectionUtils.trySetAccessible(fireTaskStarted);
-            fireTaskStarted.invoke(project, task);
-
-            Object realThing;
-            realThing = task;
-            task.maybeConfigure();
-            if (task instanceof UnknownElement) {
-                realThing = ((UnknownElement) task).getRealThing();
-            }
-
-            DispatchUtils.execute(task);
-
-            return realThing != null ? realThing : task;
-        }
-        catch (BuildException ex) {
-            if (ex.getLocation() == Location.UNKNOWN_LOCATION) {
-                ex.setLocation(task.getLocation());
-            }
-            reason = ex;
-            throw ex;
-        }
-        catch (Exception ex) {
-            reason = ex;
-            BuildException be = new BuildException(ex);
-            be.setLocation(task.getLocation());
-            throw be;
-        }
-        catch (Error ex) {
-            reason = ex;
-            throw ex;
-        }
-        finally {
-            try {
-                final Method fireTaskFinished = Project.class.getDeclaredMethod("fireTaskFinished", Task.class, Throwable.class);
-                ReflectionUtils.trySetAccessible(fireTaskFinished);
-                fireTaskFinished.invoke(project, task, reason);
-            }
-            catch (Exception e) {
-                BuildException be = new BuildException(e);
-                be.setLocation(task.getLocation());
-                throw be;
-            }
-        }
-    }
-
-    protected Object createNode(Object tagName) {
-        return createNode(tagName, Collections.EMPTY_MAP);
-    }
-
-    protected Object createNode(Object name, Object value) {
-        Object task = createNode(name);
-        setText(task, value.toString());
-        return task;
-    }
-
-    protected Object createNode(Object name, Map attributes, Object value) {
-        Object task = createNode(name, attributes);
-        setText(task, value.toString());
-        return task;
-    }
-
-    /**
-     * Builds an {@link Attributes} from a {@link Map}
-     *
-     * @param attributes the attributes to wrap
-     * @return the wrapped attributes
-     */
-    protected static Attributes buildAttributes(final Map attributes) {
-        final AttributesImpl attr = new AttributesImpl();
-        for (Object o : attributes.entrySet()) {
-            final Map.Entry entry = (Map.Entry) o;
-            final String attributeName = (String) entry.getKey();
-            final String attributeValue = String.valueOf(entry.getValue());
-            attr.addAttribute(null, attributeName, attributeName, "CDATA", attributeValue);
-        }
-        return attr;
-    }
-
-    protected Object createNode(final Object name, final Map attributes) {
-
-        final Attributes attrs = buildAttributes(attributes);
-        String tagName = name.toString();
-        String ns = "";
-
-        if (name instanceof QName) {
-            QName q = (QName) name;
-            tagName = q.getLocalPart();
-            ns = q.getNamespaceURI();
-        }
-
-        // import can be used only as top level element
-        if ("import".equals(name)) {
-            antXmlContext.setCurrentTarget(implicitTarget);
-        } else if ("target".equals(name) && !insideTask) {
-            return onStartTarget(attrs, tagName, ns);
-        } else if ("defineTarget".equals(name) && !insideTask) {
-            return onDefineTarget(attrs, "target", ns);
-        }
-
-        try {
-            antElementHandler.onStartElement(ns, tagName, tagName, attrs, antXmlContext);
-        }
-        catch (final SAXParseException e) {
-            log.log(Level.SEVERE, "Caught: " + e, e);
-        }
-
-        insideTask = true;
-        final RuntimeConfigurable wrapper = antXmlContext.getWrapperStack().lastElement();
-        return wrapper.getProxy();
-    }
-
-    private Target onDefineTarget(final Attributes attrs, String tagName, String ns) {
-        final Target target = new Target();
-        target.setProject(project);
-        target.setLocation(new Location(antXmlContext.getLocator()));
-        try {
-            antTargetHandler.onStartElement(ns, tagName, tagName, attrs, antXmlContext);
-            final Target newTarget = getProject().getTargets().get(attrs.getValue("name"));
-            antXmlContext.setCurrentTarget(newTarget);
-            definingTarget = newTarget;
-            return newTarget;
-        }
-        catch (final SAXParseException e) {
-            log.log(Level.SEVERE, "Caught: " + e, e);
-        }
-        return null;
-    }
-
-    private Target onStartTarget(final Attributes attrs, String tagName, String ns) {
-        final Target target = new Target();
-        target.setProject(project);
-        target.setLocation(new Location(antXmlContext.getLocator()));
-        try {
-            antTargetHandler.onStartElement(ns, tagName, tagName, attrs, antXmlContext);
-            final Target newTarget = getProject().getTargets().get(attrs.getValue("name"));
-
-            // execute dependencies (if any)
-            final Vector<Target> targets = new Vector<Target>();
-            for (final Enumeration<String> deps = newTarget.getDependencies(); deps.hasMoreElements();) {
-                final String targetName = deps.nextElement();
-                targets.add(project.getTargets().get(targetName));
-            }
-            getProject().executeSortedTargets(targets);
-
-            antXmlContext.setCurrentTarget(newTarget);
-            return newTarget;
-        }
-        catch (final SAXParseException e) {
-            log.log(Level.SEVERE, "Caught: " + e, e);
-        }
-        return null;
-    }
-
-    protected void setText(Object task, String text) {
-        final char[] characters = text.toCharArray();
-        try {
-            antElementHandler.characters(characters, 0, characters.length, antXmlContext);
-        }
-        catch (final SAXParseException e) {
-            log.log(Level.WARNING, "SetText failed: " + task + ". Reason: " + e, e);
-        }
-    }
-
-    public Project getAntProject() {
-        return project;
-    }
-}
-
-/**
- * Would be nice to retrieve location information (from AST?).
- * In a first time, without info
- */
-@Deprecated
-class AntBuilderLocator implements Locator {
-    public int getColumnNumber() {
-        return 0;
-    }
-
-    public int getLineNumber() {
-        return 0;
-    }
-
-    public String getPublicId() {
-        return "";
-    }
-
-    public String getSystemId() {
-        return "";
-    }
-}
diff --git a/subprojects/groovy-cli-commons/src/main/groovy/groovy/util/CliBuilder.groovy b/subprojects/groovy-cli-commons/src/main/groovy/groovy/util/CliBuilder.groovy
deleted file mode 100644
index c50fca2..0000000
--- a/subprojects/groovy-cli-commons/src/main/groovy/groovy/util/CliBuilder.groovy
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package groovy.util
-
-import org.apache.commons.cli.CommandLineParser
-import org.apache.commons.cli.HelpFormatter
-
-/**
- * @deprecated use {@code groovy.cli.picocli.CliBuilder} or {@link groovy.cli.commons.CliBuilder} instead.
- */
-@Deprecated
-class CliBuilder {
-    private @Delegate
-    groovy.cli.commons.CliBuilder delegate = new groovy.cli.commons.CliBuilder()
-
-    // explicit delegate to convert return type to expected legacy package
-    OptionAccessor parse(args) {
-        def result = delegate.parse(args)
-        return result == null ? null : new OptionAccessor(delegate: result)
-    }
-
-    // explicit delegate since groovyObject methods ignored by @Delegate
-    def invokeMethod(String name, Object args) {
-        delegate.invokeMethod(name, args)
-    }
-
-    // delegated versions of the methods below are available but we want
-    // IDE warnings to encourage people not to use these methods in particular
-    // over and above the warning they should have at the class level
-
-    /**
-     * @deprecated This may not be available in future groovy.util.CliBuilder versions.
-     * Use groovy.cli.commons.CliBuilder if you need this feature.
-     */
-    @Deprecated
-    void setParser(CommandLineParser parser) {
-        delegate.setParser(parser)
-    }
-
-    /**
-     * @deprecated This may not be available in future groovy.util.CliBuilder versions.
-     * Use groovy.cli.commons.CliBuilder if you need this feature.
-     */
-    @Deprecated
-    CommandLineParser getParser() {
-        delegate.getParser()
-    }
-
-    /**
-     * @deprecated This may not be available in future groovy.util.CliBuilder versions.
-     * Use groovy.cli.commons.CliBuilder if you need this feature.
-     */
-    @Deprecated
-    void setFormatter(HelpFormatter formatter) {
-        delegate.setFormatter(formatter)
-    }
-
-    /**
-     * @deprecated This may not be available in future groovy.util.CliBuilder versions.
-     * Use groovy.cli.commons.CliBuilder if you need this feature.
-     */
-    @Deprecated
-    HelpFormatter getFormatter() {
-        delegate.getFormatter()
-    }
-}
diff --git a/subprojects/groovy-cli-commons/src/main/groovy/groovy/util/OptionAccessor.groovy b/subprojects/groovy-cli-commons/src/main/groovy/groovy/util/OptionAccessor.groovy
deleted file mode 100644
index 935cf10..0000000
--- a/subprojects/groovy-cli-commons/src/main/groovy/groovy/util/OptionAccessor.groovy
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package groovy.util
-
-/**
- * @deprecated use {@code groovy.cli.picocli.OptionAccessor} or {@link groovy.cli.commons.OptionAccessor}
- */
-@Deprecated
-class OptionAccessor {
-    @Delegate
-    groovy.cli.commons.OptionAccessor delegate
-
-    // explicit delegate since groovyObject methods ignored by @Delegate
-    def getProperty(String name) {
-        delegate.getProperty(name)
-    }
-
-    // explicit delegate since groovyObject methods ignored by @Delegate
-    def invokeMethod(String name, Object args) {
-        delegate.invokeMethod(name, args)
-    }
-}
diff --git a/subprojects/groovy-jmx/src/main/java/groovy/util/GroovyMBean.java b/subprojects/groovy-jmx/src/main/java/groovy/util/GroovyMBean.java
deleted file mode 100644
index 0cb4bdc..0000000
--- a/subprojects/groovy-jmx/src/main/java/groovy/util/GroovyMBean.java
+++ /dev/null
@@ -1,394 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package groovy.util;
-
-import groovy.lang.GroovyObjectSupport;
-import groovy.lang.GroovyRuntimeException;
-
-import javax.management.Attribute;
-import javax.management.JMException;
-import javax.management.MBeanAttributeInfo;
-import javax.management.MBeanException;
-import javax.management.MBeanInfo;
-import javax.management.MBeanOperationInfo;
-import javax.management.MBeanParameterInfo;
-import javax.management.MBeanServerConnection;
-import javax.management.ObjectName;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * A GroovyObject facade for an underlying MBean which acts like a normal
- * groovy object but which is actually implemented via
- * an underlying JMX MBean.
- * Properties and normal method invocations
- * delegate to the MBeanServer to the actual MBean.
- *
- * @deprecated Use {@link groovy.jmx.GroovyMBean}
- */
-@Deprecated
-public class GroovyMBean extends GroovyObjectSupport {
-    private final MBeanServerConnection server;
-    private final ObjectName name;
-    private MBeanInfo beanInfo;
-    private final boolean ignoreErrors;
-    private final Map<String, String[]> operations = new HashMap<String, String[]>();
-
-    public GroovyMBean(MBeanServerConnection server, String objectName) throws JMException, IOException {
-        this(server, objectName, false);
-    }
-
-    public GroovyMBean(MBeanServerConnection server, String objectName, boolean ignoreErrors) throws JMException, IOException {
-        this(server, new ObjectName(objectName), ignoreErrors);
-    }
-
-    public GroovyMBean(MBeanServerConnection server, ObjectName name) throws JMException, IOException {
-        this(server, name, false);
-    }
-
-    public GroovyMBean(MBeanServerConnection server, ObjectName name, boolean ignoreErrors) throws JMException, IOException {
-        this.server = server;
-        this.name = name;
-        this.ignoreErrors = ignoreErrors;
-        this.beanInfo = server.getMBeanInfo(name);
-
-        MBeanOperationInfo[] operationInfos = beanInfo.getOperations();
-        for (MBeanOperationInfo info : operationInfos) {
-            String signature[] = createSignature(info);
-            // Construct a simplistic key to support overloaded operations on the MBean.
-            String operationKey = createOperationKey(info.getName(), signature.length);
-            operations.put(operationKey, signature);
-        }
-    }
-
-    public MBeanServerConnection server() {
-        return server;
-    }
-
-    public ObjectName name() {
-        return name;
-    }
-
-    public MBeanInfo info() {
-        return beanInfo;
-    }
-
-    public Object getProperty(String property) {
-        try {
-            return server.getAttribute(name, property);
-        }
-        catch (MBeanException e) {
-            throwExceptionWithTarget("Could not access property: " + property + ". Reason: ", e);
-        }
-        catch (Exception e) {
-            if (!ignoreErrors)
-            throwException("Could not access property: " + property + ". Reason: ", e);
-        }
-        return null;
-    }
-
-    public void setProperty(String property, Object value) {
-        try {
-            server.setAttribute(name, new Attribute(property, value));
-        }
-        catch (MBeanException e) {
-            throwExceptionWithTarget("Could not set property: " + property + ". Reason: ", e);
-        }
-        catch (Exception e) {
-            throwException("Could not set property: " + property + ". Reason: ", e);
-        }
-    }
-
-    public Object invokeMethod(String method, Object arguments) {
-        Object[] argArray;
-        if (arguments instanceof Object[]) {
-            argArray = (Object[]) arguments;
-        } else {
-            argArray = new Object[]{arguments};
-        }
-        // Locate the specific method based on the name and number of parameters
-        String operationKey = createOperationKey(method, argArray.length);
-        String[] signature = operations.get(operationKey);
-
-        if (signature != null) {
-            try {
-                return server.invoke(name, method, argArray, signature);
-            }
-            catch (MBeanException e) {
-                throwExceptionWithTarget("Could not invoke method: " + method + ". Reason: ", e);
-            }
-            catch (Exception e) {
-                throwException("Could not invoke method: " + method + ". Reason: ", e);
-            }
-            return null;
-        } else {
-            return super.invokeMethod(method, arguments);
-        }
-    }
-
-    protected String[] createSignature(MBeanOperationInfo info) {
-        MBeanParameterInfo[] params = info.getSignature();
-        String[] answer = new String[params.length];
-        for (int i = 0; i < params.length; i++) {
-            answer[i] = params[i].getType();
-        }
-        return answer;
-    }
-
-    /**
-     * Construct a simple key based on the method name and the number of parameters
-     *
-     * @param operation - the mbean operation name
-     * @param params    - the number of parameters the operation supports
-     * @return simple unique identifier for a method
-     */
-    protected String createOperationKey(String operation, int params) {
-        // This could be changed to support some hash of the parameter types, etc.
-        // but should distinguish between reordered params while allowing normal
-        // type coercions to be honored
-        return operation + "_" + params;
-    }
-
-    /**
-     * List of the names of each of the attributes on the MBean
-     *
-     * @return list of attribute names
-     */
-    public Collection<String> listAttributeNames() {
-        List<String> list = new ArrayList<String>();
-        try {
-            MBeanAttributeInfo[] attrs = beanInfo.getAttributes();
-            for (MBeanAttributeInfo attr : attrs) {
-                list.add(attr.getName());
-            }
-        } catch (Exception e) {
-            throwException("Could not list attribute names. Reason: ", e);
-        }
-        return list;
-    }
-
-    /**
-     * The values of each of the attributes on the MBean
-     *
-     * @return list of values of each attribute
-     */
-    public List<String> listAttributeValues() {
-        List<String> list = new ArrayList<String>();
-        Collection<String> names = listAttributeNames();
-        for (String name : names) {
-            try {
-                Object val = this.getProperty(name);
-                if (val != null) {
-                    list.add(name + " : " + val.toString());
-                }
-            } catch (Exception e) {
-                throwException("Could not list attribute values. Reason: ", e);
-            }
-        }
-        return list;
-    }
-
-    /**
-     * List of string representations of all of the attributes on the MBean.
-     *
-     * @return list of descriptions of each attribute on the mbean
-     */
-    public Collection<String> listAttributeDescriptions() {
-        List<String> list = new ArrayList<String>();
-        try {
-            MBeanAttributeInfo[] attrs = beanInfo.getAttributes();
-            for (MBeanAttributeInfo attr : attrs) {
-                list.add(describeAttribute(attr));
-            }
-        } catch (Exception e) {
-            throwException("Could not list attribute descriptions. Reason: ", e);
-        }
-        return list;
-    }
-
-    /**
-     * Description of the specified attribute name.
-     *
-     * @param attr - the attribute
-     * @return String the description
-     */
-    protected String describeAttribute(MBeanAttributeInfo attr) {
-        StringBuilder buf = new StringBuilder();
-        buf.append("(");
-        if (attr.isReadable()) {
-            buf.append("r");
-        }
-        if (attr.isWritable()) {
-            buf.append("w");
-        }
-        buf.append(") ")
-                .append(attr.getType())
-                .append(" ")
-                .append(attr.getName());
-        return buf.toString();
-    }
-
-    /**
-     * Description of the specified attribute name.
-     *
-     * @param attributeName - stringified name of the attribute
-     * @return the description
-     */
-    public String describeAttribute(String attributeName) {
-        String ret = "Attribute not found";
-        try {
-            MBeanAttributeInfo[] attributes = beanInfo.getAttributes();
-            for (MBeanAttributeInfo attribute : attributes) {
-                if (attribute.getName().equals(attributeName)) {
-                    return describeAttribute(attribute);
-                }
-            }
-        } catch (Exception e) {
-            throwException("Could not describe attribute '" + attributeName + "'. Reason: ", e);
-        }
-        return ret;
-    }
-
-    /**
-     * Names of all the operations available on the MBean.
-     *
-     * @return all the operations on the MBean
-     */
-    public Collection<String> listOperationNames() {
-        List<String> list = new ArrayList<String>();
-        try {
-            MBeanOperationInfo[] operations = beanInfo.getOperations();
-            for (MBeanOperationInfo operation : operations) {
-                list.add(operation.getName());
-            }
-        } catch (Exception e) {
-            throwException("Could not list operation names. Reason: ", e);
-        }
-        return list;
-    }
-
-    /**
-     * Description of all of the operations available on the MBean.
-     *
-     * @return full description of each operation on the MBean
-     */
-    public Collection<String> listOperationDescriptions() {
-        List<String> list = new ArrayList<String>();
-        try {
-            MBeanOperationInfo[] operations = beanInfo.getOperations();
-            for (MBeanOperationInfo operation : operations) {
-                list.add(describeOperation(operation));
-            }
-        } catch (Exception e) {
-            throwException("Could not list operation descriptions. Reason: ", e);
-        }
-        return list;
-    }
-
-    /**
-     * Get the description of the specified operation.  This returns a Collection since
-     * operations can be overloaded and one operationName can have multiple forms.
-     *
-     * @param operationName the name of the operation to describe
-     * @return Collection of operation description
-     */
-    public List<String> describeOperation(String operationName) {
-        List<String> list = new ArrayList<String>();
-        try {
-            MBeanOperationInfo[] operations = beanInfo.getOperations();
-            for (MBeanOperationInfo operation : operations) {
-                if (operation.getName().equals(operationName)) {
-                    list.add(describeOperation(operation));
-                }
-            }
-        } catch (Exception e) {
-            throwException("Could not describe operations matching name '" + operationName + "'. Reason: ", e);
-        }
-        return list;
-    }
-
-    /**
-     * Description of the operation.
-     *
-     * @param operation the operation to describe
-     * @return pretty-printed description
-     */
-    protected String describeOperation(MBeanOperationInfo operation) {
-        StringBuilder buf = new StringBuilder();
-        buf.append(operation.getReturnType())
-                .append(" ")
-                .append(operation.getName())
-                .append("(");
-
-        MBeanParameterInfo[] params = operation.getSignature();
-        for (int j = 0; j < params.length; j++) {
-            MBeanParameterInfo param = params[j];
-            if (j != 0) {
-                buf.append(", ");
-            }
-            buf.append(param.getType())
-                    .append(" ")
-                    .append(param.getName());
-        }
-        buf.append(")");
-        return buf.toString();
-    }
-
-    /**
-     * Return an end user readable representation of the underlying MBean
-     *
-     * @return the user readable description
-     */
-    public String toString() {
-        StringBuilder buf = new StringBuilder();
-        buf.append("MBean Name:")
-                .append("\n  ")
-                .append(name.getCanonicalName())
-                .append("\n  ");
-        if (!listAttributeDescriptions().isEmpty()) {
-            buf.append("\nAttributes:");
-            for (String attrDesc : listAttributeDescriptions()) {
-                buf.append("\n  ").append(attrDesc);
-            }
-        }
-        if (!listOperationDescriptions().isEmpty()) {
-            buf.append("\nOperations:");
-            for (String attrDesc : listOperationDescriptions()) {
-                buf.append("\n  ").append(attrDesc);
-            }
-        }
-        return buf.toString();
-    }
-
-    private void throwException(String m, Exception e) {
-        if (!ignoreErrors) {
-            throw new GroovyRuntimeException(m + e, e);
-        }
-    }
-
-    private void throwExceptionWithTarget(String m, MBeanException e) {
-        if (!ignoreErrors) {
-            throw new GroovyRuntimeException(m + e, e.getTargetException());
-        }
-    }
-}
diff --git a/subprojects/groovy-nio/src/main/java/org/codehaus/groovy/runtime/NioGroovyMethods.java b/subprojects/groovy-nio/src/main/java/org/codehaus/groovy/runtime/NioGroovyMethods.java
deleted file mode 100644
index 52e7b45..0000000
--- a/subprojects/groovy-nio/src/main/java/org/codehaus/groovy/runtime/NioGroovyMethods.java
+++ /dev/null
@@ -1,2023 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.runtime;
-
-import groovy.io.FileType;
-import groovy.io.FileVisitResult;
-import groovy.io.GroovyPrintWriter;
-import groovy.lang.Closure;
-import groovy.lang.MetaClass;
-import groovy.lang.Writable;
-import groovy.transform.stc.ClosureParams;
-import groovy.transform.stc.FromString;
-import groovy.transform.stc.PickFirstResolver;
-import groovy.transform.stc.SimpleType;
-import org.codehaus.groovy.runtime.callsite.BooleanReturningMethodInvoker;
-import org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation;
-
-import java.io.BufferedInputStream;
-import java.io.BufferedOutputStream;
-import java.io.BufferedReader;
-import java.io.BufferedWriter;
-import java.io.Closeable;
-import java.io.DataInputStream;
-import java.io.DataOutputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.io.OutputStream;
-import java.io.OutputStreamWriter;
-import java.io.PrintWriter;
-import java.io.Reader;
-import java.io.Writer;
-import java.net.URI;
-import java.nio.charset.Charset;
-import java.nio.file.DirectoryStream;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.Paths;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.regex.Pattern;
-
-import static java.nio.file.StandardOpenOption.APPEND;
-import static java.nio.file.StandardOpenOption.CREATE;
-import static org.codehaus.groovy.runtime.DefaultGroovyMethods.get;
-
-/**
- * This class defines new groovy methods for Readers, Writers, InputStreams and
- * OutputStreams which appear on normal JDK classes inside the Groovy environment.
- * Static methods are used with the first parameter being the destination class,
- * i.e. <code>public static T eachLine(InputStream self, Closure c)</code>
- * provides a <code>eachLine(Closure c)</code> method for <code>InputStream</code>.
- * <p/>
- * NOTE: While this class contains many 'public' static methods, it is
- * primarily regarded as an internal class (its internal package name
- * suggests this also). We value backwards compatibility of these
- * methods when used within Groovy but value less backwards compatibility
- * at the Java method call level. I.e. future versions of Groovy may
- * remove or move a method call in this file but would normally
- * aim to keep the method available from within Groovy.
- */
-@Deprecated
-public class NioGroovyMethods extends DefaultGroovyMethodsSupport {
-
-    /**
-     * Provide the standard Groovy <code>size()</code> method for <code>Path</code>.
-     *
-     * @param self a {@code Path} object
-     * @return the file's size (length)
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static long size(Path self) throws IOException {
-        return Files.size(self);
-    }
-
-    /**
-     * Create an object output stream for this path.
-     *
-     * @param self a {@code Path} object
-     * @return an object output stream
-     * @throws java.io.IOException if an IOException occurs.
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static ObjectOutputStream newObjectOutputStream(Path self) throws IOException {
-        return new ObjectOutputStream(Files.newOutputStream(self));
-    }
-
-    /**
-     * Create a new ObjectOutputStream for this path and then pass it to the
-     * closure.  This method ensures the stream is closed after the closure
-     * returns.
-     *
-     * @param self    a Path
-     * @param closure a closure
-     * @return the value returned by the closure
-     * @throws java.io.IOException if an IOException occurs.
-     * @see IOGroovyMethods#withStream(java.io.OutputStream, groovy.lang.Closure)
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static <T> T withObjectOutputStream(Path self, @ClosureParams(value = SimpleType.class, options = "java.io.ObjectOutputStream") Closure<T> closure) throws IOException {
-        return IOGroovyMethods.withStream(newObjectOutputStream(self), closure);
-    }
-
-    /**
-     * Create an object input stream for this file.
-     *
-     * @param self a {@code Path} object
-     * @return an object input stream
-     * @throws java.io.IOException if an IOException occurs.
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static ObjectInputStream newObjectInputStream(Path self) throws IOException {
-        return new ObjectInputStream(Files.newInputStream(self));
-    }
-
-    /**
-     * Create an object input stream for this path using the given class loader.
-     *
-     * @param self        a {@code Path} object
-     * @param classLoader the class loader to use when loading the class
-     * @return an object input stream
-     * @throws java.io.IOException if an IOException occurs.
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static ObjectInputStream newObjectInputStream(Path self, final ClassLoader classLoader) throws IOException {
-        return IOGroovyMethods.newObjectInputStream(Files.newInputStream(self), classLoader);
-    }
-
-    /**
-     * Iterates through the given file object by object.
-     *
-     * @param self    a {@code Path} object
-     * @param closure a closure
-     * @throws java.io.IOException    if an IOException occurs.
-     * @throws ClassNotFoundException if the class  is not found.
-     * @see org.codehaus.groovy.runtime.IOGroovyMethods#eachObject(java.io.ObjectInputStream, groovy.lang.Closure)
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static void eachObject(Path self, Closure closure) throws IOException, ClassNotFoundException {
-        IOGroovyMethods.eachObject(newObjectInputStream(self), closure);
-    }
-
-    /**
-     * Create a new ObjectInputStream for this file and pass it to the closure.
-     * This method ensures the stream is closed after the closure returns.
-     *
-     * @param path    a Path
-     * @param closure a closure
-     * @return the value returned by the closure
-     * @throws java.io.IOException if an IOException occurs.
-     * @see org.codehaus.groovy.runtime.IOGroovyMethods#withStream(java.io.InputStream, groovy.lang.Closure)
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static <T> T withObjectInputStream(Path path, @ClosureParams(value = SimpleType.class, options = "java.io.ObjectInputStream") Closure<T> closure) throws IOException {
-        return IOGroovyMethods.withStream(newObjectInputStream(path), closure);
-    }
-
-    /**
-     * Create a new ObjectInputStream for this file associated with the given class loader and pass it to the closure.
-     * This method ensures the stream is closed after the closure returns.
-     *
-     * @param self        a Path
-     * @param classLoader the class loader to use when loading the class
-     * @param closure     a closure
-     * @return the value returned by the closure
-     * @throws java.io.IOException if an IOException occurs.
-     * @see org.codehaus.groovy.runtime.IOGroovyMethods#withStream(java.io.InputStream, groovy.lang.Closure)
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static <T> T withObjectInputStream(Path self, ClassLoader classLoader, @ClosureParams(value = SimpleType.class, options = "java.io.ObjectInputStream") Closure<T> closure) throws IOException {
-        return IOGroovyMethods.withStream(newObjectInputStream(self, classLoader), closure);
-    }
-
-    /**
-     * Iterates through this path line by line.  Each line is passed to the
-     * given 1 or 2 arg closure.  The file is read using a reader which
-     * is closed before this method returns.
-     *
-     * @param self    a Path
-     * @param closure a closure (arg 1 is line, optional arg 2 is line number starting at line 1)
-     * @return the last value returned by the closure
-     * @throws java.io.IOException if an IOException occurs.
-     * @see #eachLine(Path, int, groovy.lang.Closure)
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static <T> T eachLine(Path self, @ClosureParams(value = FromString.class, options = {"String", "String,Integer"}) Closure<T> closure) throws IOException {
-        return eachLine(self, 1, closure);
-    }
-
-    /**
-     * Iterates through this file line by line.  Each line is passed to the
-     * given 1 or 2 arg closure.  The file is read using a reader which
-     * is closed before this method returns.
-     *
-     * @param self    a Path
-     * @param charset opens the file with a specified charset
-     * @param closure a closure (arg 1 is line, optional arg 2 is line number starting at line 1)
-     * @return the last value returned by the closure
-     * @throws java.io.IOException if an IOException occurs.
-     * @see #eachLine(Path, String, int, groovy.lang.Closure)
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static <T> T eachLine(Path self, String charset, @ClosureParams(value = FromString.class, options = {"String", "String,Integer"}) Closure<T> closure) throws IOException {
-        return eachLine(self, charset, 1, closure);
-    }
-
-    /**
-     * Iterates through this file line by line.  Each line is passed
-     * to the given 1 or 2 arg closure.  The file is read using a reader
-     * which is closed before this method returns.
-     *
-     * @param self      a Path
-     * @param firstLine the line number value used for the first line (default is 1, set to 0 to start counting from 0)
-     * @param closure   a closure (arg 1 is line, optional arg 2 is line number)
-     * @return the last value returned by the closure
-     * @throws java.io.IOException if an IOException occurs.
-     * @see org.codehaus.groovy.runtime.IOGroovyMethods#eachLine(java.io.Reader, int, groovy.lang.Closure)
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static <T> T eachLine(Path self, int firstLine, @ClosureParams(value = FromString.class, options = {"String", "String,Integer"}) Closure<T> closure) throws IOException {
-        return IOGroovyMethods.eachLine(newReader(self), firstLine, closure);
-    }
-
-    /**
-     * Iterates through this file line by line.  Each line is passed
-     * to the given 1 or 2 arg closure.  The file is read using a reader
-     * which is closed before this method returns.
-     *
-     * @param self      a Path
-     * @param charset   opens the file with a specified charset
-     * @param firstLine the line number value used for the first line (default is 1, set to 0 to start counting from 0)
-     * @param closure   a closure (arg 1 is line, optional arg 2 is line number)
-     * @return the last value returned by the closure
-     * @throws java.io.IOException if an IOException occurs.
-     * @see org.codehaus.groovy.runtime.IOGroovyMethods#eachLine(java.io.Reader, int, groovy.lang.Closure)
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static <T> T eachLine(Path self, String charset, int firstLine, @ClosureParams(value = FromString.class, options = {"String", "String,Integer"}) Closure<T> closure) throws IOException {
-        return IOGroovyMethods.eachLine(newReader(self, charset), firstLine, closure);
-    }
-
-    /**
-     * Iterates through this file line by line, splitting each line using
-     * the given regex separator. For each line, the given closure is called with
-     * a single parameter being the list of strings computed by splitting the line
-     * around matches of the given regular expression.
-     * Finally the resources used for processing the file are closed.
-     *
-     * @param self    a Path
-     * @param regex   the delimiting regular expression
-     * @param closure a closure
-     * @return the last value returned by the closure
-     * @throws java.io.IOException                    if an IOException occurs.
-     * @throws java.util.regex.PatternSyntaxException if the regular expression's syntax is invalid
-     * @see org.codehaus.groovy.runtime.IOGroovyMethods#splitEachLine(java.io.Reader, String, groovy.lang.Closure)
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static <T> T splitEachLine(Path self, String regex, @ClosureParams(value = FromString.class, options = {"List<String>", "String[]"}, conflictResolutionStrategy = PickFirstResolver.class) Closure<T> closure) throws IOException {
-        return IOGroovyMethods.splitEachLine(newReader(self), regex, closure);
-    }
-
-    /**
-     * Iterates through this file line by line, splitting each line using
-     * the given separator Pattern. For each line, the given closure is called with
-     * a single parameter being the list of strings computed by splitting the line
-     * around matches of the given regular expression Pattern.
-     * Finally the resources used for processing the file are closed.
-     *
-     * @param self    a Path
-     * @param pattern the regular expression Pattern for the delimiter
-     * @param closure a closure
-     * @return the last value returned by the closure
-     * @throws java.io.IOException if an IOException occurs.
-     * @see org.codehaus.groovy.runtime.IOGroovyMethods#splitEachLine(java.io.Reader, java.util.regex.Pattern, groovy.lang.Closure)
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static <T> T splitEachLine(Path self, Pattern pattern, @ClosureParams(value = FromString.class, options = {"List<String>", "String[]"}, conflictResolutionStrategy = PickFirstResolver.class) Closure<T> closure) throws IOException {
-        return IOGroovyMethods.splitEachLine(newReader(self), pattern, closure);
-    }
-
-    /**
-     * Iterates through this file line by line, splitting each line using
-     * the given regex separator. For each line, the given closure is called with
-     * a single parameter being the list of strings computed by splitting the line
-     * around matches of the given regular expression.
-     * Finally the resources used for processing the file are closed.
-     *
-     * @param self    a Path
-     * @param regex   the delimiting regular expression
-     * @param charset opens the file with a specified charset
-     * @param closure a closure
-     * @return the last value returned by the closure
-     * @throws java.io.IOException                    if an IOException occurs.
-     * @throws java.util.regex.PatternSyntaxException if the regular expression's syntax is invalid
-     * @see org.codehaus.groovy.runtime.IOGroovyMethods#splitEachLine(java.io.Reader, String, groovy.lang.Closure)
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static <T> T splitEachLine(Path self, String regex, String charset, @ClosureParams(value = FromString.class, options = {"List<String>", "String[]"}, conflictResolutionStrategy = PickFirstResolver.class) Closure<T> closure) throws IOException {
-        return IOGroovyMethods.splitEachLine(newReader(self, charset), regex, closure);
-    }
-
-    /**
-     * Iterates through this file line by line, splitting each line using
-     * the given regex separator Pattern. For each line, the given closure is called with
-     * a single parameter being the list of strings computed by splitting the line
-     * around matches of the given regular expression.
-     * Finally the resources used for processing the file are closed.
-     *
-     * @param self    a Path
-     * @param pattern the regular expression Pattern for the delimiter
-     * @param charset opens the file with a specified charset
-     * @param closure a closure
-     * @return the last value returned by the closure
-     * @throws java.io.IOException if an IOException occurs.
-     * @see org.codehaus.groovy.runtime.IOGroovyMethods#splitEachLine(java.io.Reader, java.util.regex.Pattern, groovy.lang.Closure)
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static <T> T splitEachLine(Path self, Pattern pattern, String charset, @ClosureParams(value = FromString.class, options = {"List<String>", "String[]"}, conflictResolutionStrategy = PickFirstResolver.class) Closure<T> closure) throws IOException {
-        return IOGroovyMethods.splitEachLine(newReader(self, charset), pattern, closure);
-    }
-
-    /**
-     * Reads the file into a list of Strings, with one item for each line.
-     *
-     * @param self a Path
-     * @return a List of lines
-     * @throws java.io.IOException if an IOException occurs.
-     * @see org.codehaus.groovy.runtime.IOGroovyMethods#readLines(java.io.Reader)
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static List<String> readLines(Path self) throws IOException {
-        return IOGroovyMethods.readLines(newReader(self));
-    }
-
-    /**
-     * Reads the file into a list of Strings, with one item for each line.
-     *
-     * @param self    a Path
-     * @param charset opens the file with a specified charset
-     * @return a List of lines
-     * @throws java.io.IOException if an IOException occurs.
-     * @see org.codehaus.groovy.runtime.IOGroovyMethods#readLines(java.io.Reader)
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static List<String> readLines(Path self, String charset) throws IOException {
-        return IOGroovyMethods.readLines(newReader(self, charset));
-    }
-
-    /**
-     * Read the content of the Path using the specified encoding and return it
-     * as a String.
-     *
-     * @param self    the file whose content we want to read
-     * @param charset the charset used to read the content of the file
-     * @return a String containing the content of the file
-     * @throws java.io.IOException if an IOException occurs.
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static String getText(Path self, String charset) throws IOException {
-        return IOGroovyMethods.getText(newReader(self, charset));
-    }
-
-    /**
-     * Read the content of the Path and returns it as a String.
-     *
-     * @param self the file whose content we want to read
-     * @return a String containing the content of the file
-     * @throws java.io.IOException if an IOException occurs.
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static String getText(Path self) throws IOException {
-        return IOGroovyMethods.getText(newReader(self));
-    }
-
-    /**
-     * Read the content of the Path and returns it as a byte[].
-     *
-     * @param self the file whose content we want to read
-     * @return a String containing the content of the file
-     * @throws java.io.IOException if an IOException occurs.
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static byte[] getBytes(Path self) throws IOException {
-        return IOGroovyMethods.getBytes(Files.newInputStream(self));
-    }
-
-    /**
-     * Write the bytes from the byte array to the Path.
-     *
-     * @param self  the file to write to
-     * @param bytes the byte[] to write to the file
-     * @throws java.io.IOException if an IOException occurs.
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static void setBytes(Path self, byte[] bytes) throws IOException {
-        IOGroovyMethods.setBytes(Files.newOutputStream(self), bytes);
-    }
-
-    /**
-     * Write the text to the Path without writing a BOM .
-     *
-     * @param self a Path
-     * @param text the text to write to the Path
-     * @throws java.io.IOException if an IOException occurs.
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static void write(Path self, String text) throws IOException {
-        write(self, text, false);
-    }
-
-    /**
-     * Write the text to the Path.  If the default charset is
-     * "UTF-16BE" or "UTF-16LE" (or an equivalent alias) and
-     * <code>writeBom</code> is <code>true</code>, the requisite byte order
-     * mark is written to the file before the text.
-     *
-     * @param self     a Path
-     * @param text     the text to write to the Path
-     * @param writeBom whether to write the BOM
-     * @throws java.io.IOException if an IOException occurs.
-     * @since 2.5.0
-     */
-    @Deprecated
-    public static void write(Path self, String text, boolean writeBom) throws IOException {
-        write(self, text, Charset.defaultCharset().name(), writeBom);
-    }
-
-    /**
-     * Synonym for write(text) allowing file.text = 'foo'.
-     *
-     * @param self a Path
-     * @param text the text to write to the Path
-     * @throws java.io.IOException if an IOException occurs.
-     * @see #write(Path, String)
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static void setText(Path self, String text) throws IOException {
-        write(self, text);
-    }
-
-    /**
-     * Synonym for write(text, charset) allowing:
-     * <pre>
-     * myFile.setText('some text', charset)
-     * </pre>
-     * or with some help from <code>ExpandoMetaClass</code>, you could do something like:
-     * <pre>
-     * myFile.metaClass.setText = { String s {@code ->} delegate.setText(s, 'UTF-8') }
-     * myfile.text = 'some text'
-     * </pre>
-     *
-     * @param self    A Path
-     * @param charset The charset used when writing to the file
-     * @param text    The text to write to the Path
-     * @throws java.io.IOException if an IOException occurs.
-     * @see #write(Path, String, String)
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static void setText(Path self, String text, String charset) throws IOException {
-        write(self, text, charset);
-    }
-
-    /**
-     * Write the text to the Path.
-     *
-     * @param self a Path
-     * @param text the text to write to the Path
-     * @return the original file
-     * @throws java.io.IOException if an IOException occurs.
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static Path leftShift(Path self, Object text) throws IOException {
-        append(self, text);
-        return self;
-    }
-
-    /**
-     * Write bytes to a Path.
-     *
-     * @param self  a Path
-     * @param bytes the byte array to append to the end of the Path
-     * @return the original file
-     * @throws java.io.IOException if an IOException occurs.
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static Path leftShift(Path self, byte[] bytes) throws IOException {
-        append(self, bytes);
-        return self;
-    }
-
-    /**
-     * Append binary data to the file.  See {@link #append(Path, java.io.InputStream)}
-     *
-     * @param path a Path
-     * @param data an InputStream of data to write to the file
-     * @return the file
-     * @throws java.io.IOException if an IOException occurs.
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static Path leftShift(Path path, InputStream data) throws IOException {
-        append(path, data);
-        return path;
-    }
-
-    /**
-     * Write the text to the Path without writing a BOM, using the specified encoding.
-     *
-     * @param self    a Path
-     * @param text    the text to write to the Path
-     * @param charset the charset used
-     * @throws java.io.IOException if an IOException occurs.
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static void write(Path self, String text, String charset) throws IOException {
-        write(self, text, charset, false);
-    }
-
-    /**
-     * Write the text to the Path, using the specified encoding.  If the given
-     * charset is "UTF-16BE" or "UTF-16LE" (or an equivalent alias) and
-     * <code>writeBom</code> is <code>true</code>, the requisite byte order
-     * mark is written to the file before the text.
-     *
-     * @param self     a Path
-     * @param text     the text to write to the Path
-     * @param charset  the charset used
-     * @param writeBom whether to write a BOM
-     * @throws java.io.IOException if an IOException occurs.
-     * @since 2.5.0
-     */
-    @Deprecated
-    public static void write(Path self, String text, String charset, boolean writeBom) throws IOException {
-        Writer writer = null;
-        try {
-            OutputStream out = Files.newOutputStream(self);
-            if (writeBom) {
-                writeUTF16BomIfRequired(out, charset);
-            }
-            writer = new OutputStreamWriter(out, Charset.forName(charset));
-            writer.write(text);
-            writer.flush();
-
-            Writer temp = writer;
-            writer = null;
-            temp.close();
-        } finally {
-            closeWithWarning(writer);
-        }
-    }
-
-    /**
-     * Append the text at the end of the Path without writing a BOM.
-     *
-     * @param self a Path
-     * @param text the text to append at the end of the Path
-     * @throws java.io.IOException if an IOException occurs.
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static void append(Path self, Object text) throws IOException {
-        append(self, text, Charset.defaultCharset().name(), false);
-    }
-
-    /**
-     * Append the text supplied by the Writer at the end of the File without
-     * writing a BOM.
-     *
-     * @param file   a Path
-     * @param reader the Reader supplying the text to append at the end of the File
-     * @throws IOException if an IOException occurs.
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static void append(Path file, Reader reader) throws IOException {
-        append(file, reader, Charset.defaultCharset().name());
-    }
-
-    /**
-     * Append the text supplied by the Writer at the end of the File without writing a BOM.
-     *
-     * @param file   a File
-     * @param writer the Writer supplying the text to append at the end of the File
-     * @throws IOException if an IOException occurs.
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static void append(Path file, Writer writer) throws IOException {
-        append(file, writer, Charset.defaultCharset().name());
-    }
-
-    /**
-     * Append bytes to the end of a Path.  It <strong>will not</strong> be
-     * interpreted as text.
-     *
-     * @param self  a Path
-     * @param bytes the byte array to append to the end of the Path
-     * @throws java.io.IOException if an IOException occurs.
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static void append(Path self, byte[] bytes) throws IOException {
-        OutputStream stream = null;
-        try {
-            stream = Files.newOutputStream(self, CREATE, APPEND);
-            stream.write(bytes, 0, bytes.length);
-            stream.flush();
-
-            OutputStream temp = stream;
-            stream = null;
-            temp.close();
-        } finally {
-            closeWithWarning(stream);
-        }
-    }
-
-    /**
-     * Append binary data to the file.  It <strong>will not</strong> be
-     * interpreted as text.
-     *
-     * @param self   a Path
-     * @param stream stream to read data from.
-     * @throws java.io.IOException if an IOException occurs.
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static void append(Path self, InputStream stream) throws IOException {
-        OutputStream out = Files.newOutputStream(self, CREATE, APPEND);
-        try {
-            IOGroovyMethods.leftShift(out, stream);
-        } finally {
-            closeWithWarning(out);
-        }
-    }
-
-    /**
-     * Append the text at the end of the Path.  If the default charset is
-     * "UTF-16BE" or "UTF-16LE" (or an equivalent alias) and
-     * <code>writeBom</code> is <code>true</code>, the requisite byte order
-     * mark is written to the file before the text.
-     *
-     * @param self     a Path
-     * @param text     the text to append at the end of the Path
-     * @param writeBom whether to write the BOM
-     * @throws java.io.IOException if an IOException occurs.
-     * @since 2.5.0
-     */
-    @Deprecated
-    public static void append(Path self, Object text, boolean writeBom) throws IOException {
-        append(self, text, Charset.defaultCharset().name(), writeBom);
-    }
-
-    /**
-     * Append the text at the end of the Path without writing a BOM, using a specified
-     * encoding.
-     *
-     * @param self    a Path
-     * @param text    the text to append at the end of the Path
-     * @param charset the charset used
-     * @throws java.io.IOException if an IOException occurs.
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static void append(Path self, Object text, String charset) throws IOException {
-        append(self, text, charset, false);
-    }
-
-    /**
-     * Append the text at the end of the Path, using a specified encoding.  If
-     * the given charset is "UTF-16BE" or "UTF-16LE" (or an equivalent alias),
-     * <code>writeBom</code> is <code>true</code>, and the file doesn't already
-     * exist, the requisite byte order mark is written to the file before the
-     * text is appended.
-     *
-     * @param self     a Path
-     * @param text     the text to append at the end of the Path
-     * @param charset  the charset used
-     * @param writeBom whether to write the BOM
-     * @throws java.io.IOException if an IOException occurs.
-     * @since 2.5.0
-     */
-    @Deprecated
-    public static void append(Path self, Object text, String charset, boolean writeBom) throws IOException {
-        Writer writer = null;
-        try {
-            Charset resolvedCharset = Charset.forName(charset);
-            boolean shouldWriteBom = writeBom && !self.toFile().exists();
-            OutputStream out = Files.newOutputStream(self, CREATE, APPEND);
-            if (shouldWriteBom) {
-                writeUTF16BomIfRequired(out, resolvedCharset);
-            }
-            writer = new OutputStreamWriter(out, resolvedCharset);
-            InvokerHelper.write(writer, text);
-            writer.flush();
-
-            Writer temp = writer;
-            writer = null;
-            temp.close();
-        } finally {
-            closeWithWarning(writer);
-        }
-    }
-
-    /**
-     * Append the text supplied by the Writer at the end of the File, using a specified encoding.
-     * If the given charset is "UTF-16BE" or "UTF-16LE" (or an equivalent alias),
-     * <code>writeBom</code> is <code>true</code>, and the file doesn't already
-     * exist, the requisite byte order mark is written to the file before the
-     * text is appended.
-     *
-     * @param file     a File
-     * @param writer   the Writer supplying the text to append at the end of the File
-     * @param writeBom whether to write the BOM
-     * @throws IOException if an IOException occurs.
-     * @since 2.5.0
-     */
-    @Deprecated
-    public static void append(Path file, Writer writer, boolean writeBom) throws IOException {
-        append(file, writer, Charset.defaultCharset().name(), writeBom);
-    }
-
-    /**
-     * Append the text supplied by the Writer at the end of the File without writing a BOM,
-     * using a specified encoding.
-     *
-     * @param file    a File
-     * @param writer  the Writer supplying the text to append at the end of the File
-     * @param charset the charset used
-     * @throws IOException if an IOException occurs.
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static void append(Path file, Writer writer, String charset) throws IOException {
-        appendBuffered(file, writer, charset, false);
-    }
-
-    /**
-     * Append the text supplied by the Writer at the end of the File, using a specified encoding.
-     * If the given charset is "UTF-16BE" or "UTF-16LE" (or an equivalent alias),
-     * <code>writeBom</code> is <code>true</code>, and the file doesn't already
-     * exist, the requisite byte order mark is written to the file before the
-     * text is appended.
-     *
-     * @param file     a File
-     * @param writer   the Writer supplying the text to append at the end of the File
-     * @param charset  the charset used
-     * @param writeBom whether to write the BOM
-     * @throws IOException if an IOException occurs.
-     * @since 2.5.0
-     */
-    @Deprecated
-    public static void append(Path file, Writer writer, String charset, boolean writeBom) throws IOException {
-        appendBuffered(file, writer, charset, writeBom);
-    }
-
-    /**
-     * Append the text supplied by the Reader at the end of the File, using a specified encoding.
-     * If the given charset is "UTF-16BE" or "UTF-16LE" (or an equivalent alias),
-     * <code>writeBom</code> is <code>true</code>, and the file doesn't already
-     * exist, the requisite byte order mark is written to the file before the
-     * text is appended.
-     *
-     * @param file     a File
-     * @param reader   the Reader supplying the text to append at the end of the File
-     * @param writeBom whether to write the BOM
-     * @throws IOException if an IOException occurs.
-     * @since 2.5.0
-     */
-    @Deprecated
-    public static void append(Path file, Reader reader, boolean writeBom) throws IOException {
-        appendBuffered(file, reader, Charset.defaultCharset().name(), writeBom);
-    }
-
-    /**
-     * Append the text supplied by the Reader at the end of the File without writing
-     * a BOM, using a specified encoding.
-     *
-     * @param file    a File
-     * @param reader  the Reader supplying the text to append at the end of the File
-     * @param charset the charset used
-     * @throws IOException if an IOException occurs.
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static void append(Path file, Reader reader, String charset) throws IOException {
-        append(file, reader, charset, false);
-    }
-
-    /**
-     * Append the text supplied by the Reader at the end of the File, using a specified encoding.
-     * If the given charset is "UTF-16BE" or "UTF-16LE" (or an equivalent alias),
-     * <code>writeBom</code> is <code>true</code>, and the file doesn't already
-     * exist, the requisite byte order mark is written to the file before the
-     * text is appended.
-     *
-     * @param file     a File
-     * @param reader   the Reader supplying the text to append at the end of the File
-     * @param charset  the charset used
-     * @param writeBom whether to write the BOM
-     * @throws IOException if an IOException occurs.
-     * @since 2.5.0
-     */
-    @Deprecated
-    public static void append(Path file, Reader reader, String charset, boolean writeBom) throws IOException {
-        appendBuffered(file, reader, charset, writeBom);
-    }
-
-    private static void appendBuffered(Path file, Object text, String charset, boolean writeBom) throws IOException {
-        BufferedWriter writer = null;
-        try {
-            boolean shouldWriteBom = writeBom && !file.toFile().exists();
-            writer = newWriter(file, charset, true);
-            if (shouldWriteBom) {
-                writeUTF16BomIfRequired(writer, charset);
-            }
-            InvokerHelper.write(writer, text);
-            writer.flush();
-
-            Writer temp = writer;
-            writer = null;
-            temp.close();
-        } finally {
-            closeWithWarning(writer);
-        }
-    }
-
-    /**
-     * This method is used to throw useful exceptions when the eachFile* and eachDir closure methods
-     * are used incorrectly.
-     *
-     * @param self The directory to check
-     * @throws java.io.FileNotFoundException if the given directory does not exist
-     * @throws IllegalArgumentException      if the provided Path object does not represent a directory
-     * @since 2.3.0
-     */
-    private static void checkDir(Path self) throws FileNotFoundException, IllegalArgumentException {
-        if (!Files.exists(self))
-            throw new FileNotFoundException(self.toAbsolutePath().toString());
-        if (!Files.isDirectory(self))
-            throw new IllegalArgumentException("The provided Path object is not a directory: " + self.toAbsolutePath());
-    }
-
-    /**
-     * Invokes the closure for each 'child' file in this 'parent' folder/directory.
-     * Both regular files and subfolders/subdirectories can be processed depending
-     * on the fileType enum value.
-     *
-     * @param self     a Path (that happens to be a folder/directory)
-     * @param fileType if normal files or directories or both should be processed
-     * @param closure  the closure to invoke
-     * @throws java.io.FileNotFoundException if the given directory does not exist
-     * @throws IllegalArgumentException      if the provided Path object does not represent a directory
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static void eachFile(final Path self, final FileType fileType, @ClosureParams(value = SimpleType.class, options = "java.nio.file.Path") final Closure closure) throws IOException {
-        //throws FileNotFoundException, IllegalArgumentException {
-        checkDir(self);
-
-        // TODO GroovyDoc doesn't parse this file as our java.g doesn't handle this JDK7 syntax
-        try (DirectoryStream<Path> stream = Files.newDirectoryStream(self)) {
-            for (Path path : stream) {
-                if (fileType == FileType.ANY ||
-                        (fileType != FileType.FILES && Files.isDirectory(path)) ||
-                        (fileType != FileType.DIRECTORIES && Files.isRegularFile(path))) {
-                    closure.call(path);
-                }
-            }
-        }
-    }
-
-    /**
-     * Invokes the closure for each 'child' file in this 'parent' folder/directory.
-     * Both regular files and subfolders/subdirectories are processed.
-     *
-     * @param self    a Path (that happens to be a folder/directory)
-     * @param closure a closure (the parameter is the Path for the 'child' file)
-     * @throws java.io.FileNotFoundException if the given directory does not exist
-     * @throws IllegalArgumentException      if the provided Path object does not represent a directory
-     * @see #eachFile(Path, groovy.io.FileType, groovy.lang.Closure)
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static void eachFile(final Path self, final Closure closure) throws IOException { // throws FileNotFoundException, IllegalArgumentException {
-        eachFile(self, FileType.ANY, closure);
-    }
-
-    /**
-     * Invokes the closure for each subdirectory in this directory,
-     * ignoring regular files.
-     *
-     * @param self    a Path (that happens to be a folder/directory)
-     * @param closure a closure (the parameter is the Path for the subdirectory file)
-     * @throws java.io.FileNotFoundException if the given directory does not exist
-     * @throws IllegalArgumentException      if the provided Path object does not represent a directory
-     * @see #eachFile(Path, groovy.io.FileType, groovy.lang.Closure)
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static void eachDir(Path self, @ClosureParams(value = SimpleType.class, options = "java.nio.file.Path") Closure closure) throws IOException { // throws FileNotFoundException, IllegalArgumentException {
-        eachFile(self, FileType.DIRECTORIES, closure);
-    }
-
-    /**
-     * Processes each descendant file in this directory and any sub-directories.
-     * Processing consists of potentially calling <code>closure</code> passing it the current
-     * file (which may be a normal file or subdirectory) and then if a subdirectory was encountered,
-     * recursively processing the subdirectory. Whether the closure is called is determined by whether
-     * the file was a normal file or subdirectory and the value of fileType.
-     *
-     * @param self     a Path (that happens to be a folder/directory)
-     * @param fileType if normal files or directories or both should be processed
-     * @param closure  the closure to invoke on each file
-     * @throws java.io.FileNotFoundException if the given directory does not exist
-     * @throws IllegalArgumentException      if the provided Path object does not represent a directory
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static void eachFileRecurse(final Path self, final FileType fileType, @ClosureParams(value = SimpleType.class, options = "java.nio.file.Path") final Closure closure) throws IOException { // throws FileNotFoundException, IllegalArgumentException {
-        // throws FileNotFoundException, IllegalArgumentException {
-        checkDir(self);
-        try (DirectoryStream<Path> stream = Files.newDirectoryStream(self)) {
-            for (Path path : stream) {
-                if (Files.isDirectory(path)) {
-                    if (fileType != FileType.FILES) closure.call(path);
-                    eachFileRecurse(path, fileType, closure);
-                } else if (fileType != FileType.DIRECTORIES) {
-                    closure.call(path);
-                }
-            }
-        }
-    }
-
-    /**
-     * Processes each descendant file in this directory and any sub-directories.
-     * Processing consists of potentially calling <code>closure</code> passing it the current
-     * file (which may be a normal file or subdirectory) and then if a subdirectory was encountered,
-     * recursively processing the subdirectory.
-     * <p>
-     * The traversal can be adapted by providing various options in the <code>options</code> Map according
-     * to the following keys:<dl>
-     * <dt>type</dt><dd>A {@link groovy.io.FileType} enum to determine if normal files or directories or both are processed</dd>
-     * <dt>preDir</dt><dd>A {@link groovy.lang.Closure} run before each directory is processed and optionally returning a {@link groovy.io.FileVisitResult} value
-     * which can be used to control subsequent processing.</dd>
-     * <dt>preRoot</dt><dd>A boolean indicating that the 'preDir' closure should be applied at the root level</dd>
-     * <dt>postDir</dt><dd>A {@link groovy.lang.Closure} run after each directory is processed and optionally returning a {@link groovy.io.FileVisitResult} value
-     * which can be used to control subsequent processing.</dd>
-     * <dt>postRoot</dt><dd>A boolean indicating that the 'postDir' closure should be applied at the root level</dd>
-     * <dt>visitRoot</dt><dd>A boolean indicating that the given closure should be applied for the root dir
-     * (not applicable if the 'type' is set to {@link groovy.io.FileType#FILES})</dd>
-     * <dt>maxDepth</dt><dd>The maximum number of directory levels when recursing
-     * (default is -1 which means infinite, set to 0 for no recursion)</dd>
-     * <dt>filter</dt><dd>A filter to perform on traversed files/directories (using the {@link DefaultGroovyMethods#isCase(Object, Object)} method). If set,
-     * only files/dirs which match are candidates for visiting.</dd>
-     * <dt>nameFilter</dt><dd>A filter to perform on the name of traversed files/directories (using the {@link DefaultGroovyMethods#isCase(Object, Object)} method). If set,
-     * only files/dirs which match are candidates for visiting. (Must not be set if 'filter' is set)</dd>
-     * <dt>excludeFilter</dt><dd>A filter to perform on traversed files/directories (using the {@link DefaultGroovyMethods#isCase(Object, Object)} method).
-     * If set, any candidates which match won't be visited.</dd>
-     * <dt>excludeNameFilter</dt><dd>A filter to perform on the names of traversed files/directories (using the {@link DefaultGroovyMethods#isCase(Object, Object)} method).
-     * If set, any candidates which match won't be visited. (Must not be set if 'excludeFilter' is set)</dd>
-     * <dt>sort</dt><dd>A {@link groovy.lang.Closure} which if set causes the files and subdirectories for each directory to be processed in sorted order.
-     * Note that even when processing only files, the order of visited subdirectories will be affected by this parameter.</dd>
-     * </dl>
-     * This example prints out file counts and size aggregates for groovy source files within a directory tree:
-     * <pre>
-     * def totalSize = 0
-     * def count = 0
-     * def sortByTypeThenName = { a, b {@code ->}
-     *     a.isFile() != b.isFile() ? a.isFile() {@code <=>} b.isFile() : a.name {@code <=>} b.name
-     * }
-     * rootDir.traverse(
-     *         type         : FILES,
-     *         nameFilter   : ~/.*\.groovy/,
-     *         preDir       : { if (it.name == '.svn') return SKIP_SUBTREE },
-     *         postDir      : { println "Found $count files in $it.name totalling $totalSize bytes"
-     *                         totalSize = 0; count = 0 },
-     *         postRoot     : true
-     *         sort         : sortByTypeThenName
-     * ) {it {@code ->} totalSize += it.size(); count++ }
-     * </pre>
-     *
-     * @param self    a Path (that happens to be a folder/directory)
-     * @param options a Map of options to alter the traversal behavior
-     * @param closure the Closure to invoke on each file/directory and optionally returning a {@link groovy.io.FileVisitResult} value
-     *                which can be used to control subsequent processing
-     * @throws java.io.FileNotFoundException if the given directory does not exist
-     * @throws IllegalArgumentException      if the provided Path object does not represent a directory or illegal filter combinations are supplied
-     * @see DefaultGroovyMethods#sort(java.util.Collection, groovy.lang.Closure)
-     * @see groovy.io.FileVisitResult
-     * @see groovy.io.FileType
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static void traverse(final Path self, final Map<String, Object> options, @ClosureParams(value = SimpleType.class, options = "java.nio.file.Path") final Closure closure)
-            throws IOException {
-        // throws FileNotFoundException, IllegalArgumentException {
-        Number maxDepthNumber = DefaultGroovyMethods.asType(options.remove("maxDepth"), Number.class);
-        int maxDepth = maxDepthNumber == null ? -1 : maxDepthNumber.intValue();
-        Boolean visitRoot = DefaultGroovyMethods.asType(get(options, "visitRoot", false), Boolean.class);
-        Boolean preRoot = DefaultGroovyMethods.asType(get(options, "preRoot", false), Boolean.class);
-        Boolean postRoot = DefaultGroovyMethods.asType(get(options, "postRoot", false), Boolean.class);
-        final Closure pre = (Closure) options.get("preDir");
-        final Closure post = (Closure) options.get("postDir");
-        final FileType type = (FileType) options.get("type");
-        final Object filter = options.get("filter");
-        final Object nameFilter = options.get("nameFilter");
-        final Object excludeFilter = options.get("excludeFilter");
-        final Object excludeNameFilter = options.get("excludeNameFilter");
-        Object preResult = null;
-        if (preRoot && pre != null) {
-            preResult = pre.call(self);
-        }
-        if (preResult == FileVisitResult.TERMINATE ||
-                preResult == FileVisitResult.SKIP_SUBTREE) return;
-
-        FileVisitResult terminated = traverse(self, options, closure, maxDepth);
-
-        if (type != FileType.FILES && visitRoot) {
-            if (closure != null && notFiltered(self, filter, nameFilter, excludeFilter, excludeNameFilter)) {
-                Object closureResult = closure.call(self);
-                if (closureResult == FileVisitResult.TERMINATE) return;
-            }
-        }
-
-        if (postRoot && post != null && terminated != FileVisitResult.TERMINATE) post.call(self);
-    }
-
-    private static boolean notFiltered(Path path, Object filter, Object nameFilter, Object excludeFilter, Object excludeNameFilter) {
-        if (filter == null && nameFilter == null && excludeFilter == null && excludeNameFilter == null) return true;
-        if (filter != null && nameFilter != null)
-            throw new IllegalArgumentException("Can't set both 'filter' and 'nameFilter'");
-        if (excludeFilter != null && excludeNameFilter != null)
-            throw new IllegalArgumentException("Can't set both 'excludeFilter' and 'excludeNameFilter'");
-        Object filterToUse = null;
-        Object filterParam = null;
-        if (filter != null) {
-            filterToUse = filter;
-            filterParam = path;
-        } else if (nameFilter != null) {
-            filterToUse = nameFilter;
-            filterParam = path.getFileName().toString();
-        }
-        Object excludeFilterToUse = null;
-        Object excludeParam = null;
-        if (excludeFilter != null) {
-            excludeFilterToUse = excludeFilter;
-            excludeParam = path;
-        } else if (excludeNameFilter != null) {
-            excludeFilterToUse = excludeNameFilter;
-            excludeParam = path.getFileName().toString();
-        }
-        final MetaClass filterMC = filterToUse == null ? null : InvokerHelper.getMetaClass(filterToUse);
-        final MetaClass excludeMC = excludeFilterToUse == null ? null : InvokerHelper.getMetaClass(excludeFilterToUse);
-        boolean included = filterToUse == null || DefaultTypeTransformation.castToBoolean(filterMC.invokeMethod(filterToUse, "isCase", filterParam));
-        boolean excluded = excludeFilterToUse != null && DefaultTypeTransformation.castToBoolean(excludeMC.invokeMethod(excludeFilterToUse, "isCase", excludeParam));
-        return included && !excluded;
-    }
-
-    /**
-     * Processes each descendant file in this directory and any sub-directories.
-     * Convenience method for {@link #traverse(Path, java.util.Map, groovy.lang.Closure)} when
-     * no options to alter the traversal behavior are required.
-     *
-     * @param self    a Path (that happens to be a folder/directory)
-     * @param closure the Closure to invoke on each file/directory and optionally returning a {@link groovy.io.FileVisitResult} value
-     *                which can be used to control subsequent processing
-     * @throws java.io.FileNotFoundException if the given directory does not exist
-     * @throws IllegalArgumentException      if the provided Path object does not represent a directory
-     * @see #traverse(Path, java.util.Map, groovy.lang.Closure)
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static void traverse(final Path self, @ClosureParams(value = SimpleType.class, options = "java.nio.file.Path") final Closure closure)
-            throws IOException {
-        traverse(self, new HashMap<String, Object>(), closure);
-    }
-
-    /**
-     * Invokes the closure specified with key 'visit' in the options Map
-     * for each descendant file in this directory tree. Convenience method
-     * for {@link #traverse(Path, java.util.Map, groovy.lang.Closure)} allowing the 'visit' closure
-     * to be included in the options Map rather than as a parameter.
-     *
-     * @param self    a Path (that happens to be a folder/directory)
-     * @param options a Map of options to alter the traversal behavior
-     * @throws java.io.FileNotFoundException if the given directory does not exist
-     * @throws IllegalArgumentException      if the provided Path object does not represent a directory or illegal filter combinations are supplied
-     * @see #traverse(Path, java.util.Map, groovy.lang.Closure)
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static void traverse(final Path self, final Map<String, Object> options)
-            throws IOException {
-        final Closure visit = (Closure) options.remove("visit");
-        traverse(self, options, visit);
-    }
-
-    private static FileVisitResult traverse(final Path self, final Map<String, Object> options, @ClosureParams(value = SimpleType.class, options = "java.nio.file.Path") final Closure closure, final int maxDepth)
-            throws IOException {
-        checkDir(self);
-        final Closure pre = (Closure) options.get("preDir");
-        final Closure post = (Closure) options.get("postDir");
-        final FileType type = (FileType) options.get("type");
-        final Object filter = options.get("filter");
-        final Object nameFilter = options.get("nameFilter");
-        final Object excludeFilter = options.get("excludeFilter");
-        final Object excludeNameFilter = options.get("excludeNameFilter");
-        final Closure sort = (Closure) options.get("sort");
-
-        try (DirectoryStream<Path> stream = Files.newDirectoryStream(self)) {
-            final Iterator<Path> itr = stream.iterator();
-            List<Path> files = new LinkedList<Path>();
-            while (itr.hasNext()) {
-                files.add(itr.next());
-            }
-
-            if (sort != null) files = DefaultGroovyMethods.sort((Iterable<Path>) files, sort);
-
-            for (Path path : files) {
-                if (Files.isDirectory(path)) {
-                    if (type != FileType.FILES) {
-                        if (closure != null && notFiltered(path, filter, nameFilter, excludeFilter, excludeNameFilter)) {
-                            Object closureResult = closure.call(path);
-                            if (closureResult == FileVisitResult.SKIP_SIBLINGS) break;
-                            if (closureResult == FileVisitResult.TERMINATE) return FileVisitResult.TERMINATE;
-                        }
-                    }
-                    if (maxDepth != 0) {
-                        Object preResult = null;
-                        if (pre != null) {
-                            preResult = pre.call(path);
-                        }
-                        if (preResult == FileVisitResult.SKIP_SIBLINGS) break;
-                        if (preResult == FileVisitResult.TERMINATE) return FileVisitResult.TERMINATE;
-                        if (preResult != FileVisitResult.SKIP_SUBTREE) {
-                            FileVisitResult terminated = traverse(path, options, closure, maxDepth - 1);
-                            if (terminated == FileVisitResult.TERMINATE) return terminated;
-                        }
-                        Object postResult = null;
-                        if (post != null) {
-                            postResult = post.call(path);
-                        }
-                        if (postResult == FileVisitResult.SKIP_SIBLINGS) break;
-                        if (postResult == FileVisitResult.TERMINATE) return FileVisitResult.TERMINATE;
-                    }
-                } else if (type != FileType.DIRECTORIES) {
-                    if (closure != null && notFiltered(path, filter, nameFilter, excludeFilter, excludeNameFilter)) {
-                        Object closureResult = closure.call(path);
-                        if (closureResult == FileVisitResult.SKIP_SIBLINGS) break;
-                        if (closureResult == FileVisitResult.TERMINATE) return FileVisitResult.TERMINATE;
-                    }
-                }
-            }
-
-            return FileVisitResult.CONTINUE;
-        }
-    }
-
-    /**
-     * Processes each descendant file in this directory and any sub-directories.
-     * Processing consists of calling <code>closure</code> passing it the current
-     * file (which may be a normal file or subdirectory) and then if a subdirectory was encountered,
-     * recursively processing the subdirectory.
-     *
-     * @param self    a Path (that happens to be a folder/directory)
-     * @param closure a Closure
-     * @throws java.io.FileNotFoundException if the given directory does not exist
-     * @throws IllegalArgumentException      if the provided Path object does not represent a directory
-     * @see #eachFileRecurse(Path, groovy.io.FileType, groovy.lang.Closure)
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static void eachFileRecurse(Path self, @ClosureParams(value = SimpleType.class, options = "java.nio.file.Path") Closure closure) throws IOException { // throws FileNotFoundException, IllegalArgumentException {
-        eachFileRecurse(self, FileType.ANY, closure);
-    }
-
-    /**
-     * Recursively processes each descendant subdirectory in this directory.
-     * Processing consists of calling <code>closure</code> passing it the current
-     * subdirectory and then recursively processing that subdirectory.
-     * Regular files are ignored during traversal.
-     *
-     * @param self    a Path (that happens to be a folder/directory)
-     * @param closure a closure
-     * @throws java.io.FileNotFoundException if the given directory does not exist
-     * @throws IllegalArgumentException      if the provided Path object does not represent a directory
-     * @see #eachFileRecurse(Path, groovy.io.FileType, groovy.lang.Closure)
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static void eachDirRecurse(final Path self, @ClosureParams(value = SimpleType.class, options = "java.nio.file.Path") final Closure closure) throws IOException { //throws FileNotFoundException, IllegalArgumentException {
-        eachFileRecurse(self, FileType.DIRECTORIES, closure);
-    }
-
-    /**
-     * Invokes the closure for each file whose name (file.name) matches the given nameFilter in the given directory
-     * - calling the {@link org.codehaus.groovy.runtime.DefaultGroovyMethods#isCase(Object, Object)} method to determine if a match occurs.  This method can be used
-     * with different kinds of filters like regular expressions, classes, ranges etc.
-     * Both regular files and subdirectories may be candidates for matching depending
-     * on the value of fileType.
-     * <pre>
-     * // collect names of files in baseDir matching supplied regex pattern
-     * import static groovy.io.FileType.*
-     * def names = []
-     * baseDir.eachFileMatch FILES, ~/foo\d\.txt/, { names {@code <<} it.name }
-     * assert names == ['foo1.txt', 'foo2.txt']
-     *
-     * // remove all *.bak files in baseDir
-     * baseDir.eachFileMatch FILES, ~/.*\.bak/, { Path bak {@code ->} bak.delete() }
-     *
-     * // print out files &gt; 4K in size from baseDir
-     * baseDir.eachFileMatch FILES, { new Path(baseDir, it).size() {@code >} 4096 }, { println "$it.name ${it.size()}" }
-     * </pre>
-     *
-     * @param self       a Path (that happens to be a folder/directory)
-     * @param fileType   whether normal files or directories or both should be processed
-     * @param nameFilter the filter to perform on the name of the file/directory (using the {@link org.codehaus.groovy.runtime.DefaultGroovyMethods#isCase(Object, Object)} method)
-     * @param closure    the closure to invoke
-     * @throws java.io.FileNotFoundException if the given directory does not exist
-     * @throws IllegalArgumentException      if the provided Path object does not represent a directory
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static void eachFileMatch(final Path self, final FileType fileType, final Object nameFilter, @ClosureParams(value = SimpleType.class, options = "java.nio.file.Path") final Closure closure) throws IOException {
-        // throws FileNotFoundException, IllegalArgumentException {
-        checkDir(self);
-        try (DirectoryStream<Path> stream = Files.newDirectoryStream(self)) {
-            Iterator<Path> itr = stream.iterator();
-            BooleanReturningMethodInvoker bmi = new BooleanReturningMethodInvoker("isCase");
-            while (itr.hasNext()) {
-                Path currentPath = itr.next();
-                if ((fileType != FileType.FILES && Files.isDirectory(currentPath)) ||
-                        (fileType != FileType.DIRECTORIES && Files.isRegularFile(currentPath))) {
-                    if (bmi.invoke(nameFilter, currentPath.getFileName().toString()))
-                        closure.call(currentPath);
-                }
-            }
-        }
-    }
-
-    /**
-     * Invokes the closure for each file whose name (file.name) matches the given nameFilter in the given directory
-     * - calling the {@link org.codehaus.groovy.runtime.DefaultGroovyMethods#isCase(Object, Object)} method to determine if a match occurs.  This method can be used
-     * with different kinds of filters like regular expressions, classes, ranges etc.
-     * Both regular files and subdirectories are matched.
-     *
-     * @param self       a Path (that happens to be a folder/directory)
-     * @param nameFilter the nameFilter to perform on the name of the file (using the {@link org.codehaus.groovy.runtime.DefaultGroovyMethods#isCase(Object, Object)} method)
-     * @param closure    the closure to invoke
-     * @throws java.io.FileNotFoundException if the given directory does not exist
-     * @throws IllegalArgumentException      if the provided Path object does not represent a directory
-     * @see #eachFileMatch(Path, groovy.io.FileType, Object, groovy.lang.Closure)
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static void eachFileMatch(final Path self, final Object nameFilter, @ClosureParams(value = SimpleType.class, options = "java.nio.file.Path") final Closure closure) throws IOException {
-        // throws FileNotFoundException, IllegalArgumentException {
-        eachFileMatch(self, FileType.ANY, nameFilter, closure);
-    }
-
-    /**
-     * Invokes the closure for each subdirectory whose name (dir.name) matches the given nameFilter in the given directory
-     * - calling the {@link DefaultGroovyMethods#isCase(java.lang.Object, java.lang.Object)} method to determine if a match occurs.  This method can be used
-     * with different kinds of filters like regular expressions, classes, ranges etc.
-     * Only subdirectories are matched; regular files are ignored.
-     *
-     * @param self       a Path (that happens to be a folder/directory)
-     * @param nameFilter the nameFilter to perform on the name of the directory (using the {@link org.codehaus.groovy.runtime.DefaultGroovyMethods#isCase(Object, Object)} method)
-     * @param closure    the closure to invoke
-     * @throws java.io.FileNotFoundException if the given directory does not exist
-     * @throws IllegalArgumentException      if the provided Path object does not represent a directory
-     * @see #eachFileMatch(Path, groovy.io.FileType, Object, groovy.lang.Closure)
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static void eachDirMatch(final Path self, final Object nameFilter, @ClosureParams(value = SimpleType.class, options = "java.nio.file.Path") final Closure closure) throws IOException {  // throws FileNotFoundException, IllegalArgumentException {
-        eachFileMatch(self, FileType.DIRECTORIES, nameFilter, closure);
-    }
-
-    /**
-     * Deletes a directory with all contained files and subdirectories.
-     * <p>The method returns
-     * <ul>
-     * <li>true, when deletion was successful</li>
-     * <li>true, when it is called for a non existing directory</li>
-     * <li>false, when it is called for a file which isn't a directory</li>
-     * <li>false, when directory couldn't be deleted</li>
-     * </ul>
-     * </p>
-     *
-     * @param self a Path
-     * @return true if the file doesn't exist or deletion was successful
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static boolean deleteDir(final Path self) {
-        if (!Files.exists(self))
-            return true;
-
-        if (!Files.isDirectory(self))
-            return false;
-
-        // delete contained files
-        try (DirectoryStream<Path> stream = Files.newDirectoryStream(self)) {
-            for (Path path : stream) {
-                if (Files.isDirectory(path)) {
-                    if (!deleteDir(path)) {
-                        return false;
-                    }
-                } else {
-                    Files.delete(path);
-                }
-            }
-
-            // now delete directory itself
-            Files.delete(self);
-            return true;
-        } catch (IOException e) {
-            return false;
-        }
-    }
-
-    /**
-     * Renames a file.
-     *
-     * @param self        a Path
-     * @param newPathName The new pathname for the named file
-     * @return <code>true</code> if and only if the renaming succeeded;
-     * <code>false</code> otherwise
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static boolean renameTo(final Path self, String newPathName) {
-        try {
-            Files.move(self, Paths.get(newPathName));
-            return true;
-        } catch (IOException e) {
-            return false;
-        }
-    }
-
-    /**
-     * Renames a file.
-     *
-     * @param self        a Path
-     * @param newPathName The new target path specified as a URI object
-     * @return <code>true</code> if and only if the renaming succeeded;
-     * <code>false</code> otherwise
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static boolean renameTo(final Path self, URI newPathName) {
-        try {
-            Files.move(self, Paths.get(newPathName));
-            return true;
-        } catch (IOException e) {
-            return false;
-        }
-    }
-
-    /**
-     * Converts this Path to a {@link groovy.lang.Writable}.
-     *
-     * @param self a Path
-     * @return a Path which wraps the input file and which implements Writable
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static Path asWritable(Path self) {
-        return new WritablePath(self);
-    }
-
-    /**
-     * Converts this Path to a {@link groovy.lang.Writable} or delegates to default
-     * {@link org.codehaus.groovy.runtime.DefaultGroovyMethods#asType(Object, Class)}.
-     *
-     * @param path a Path
-     * @param c    the desired class
-     * @return the converted object
-     * @since 2.3.0
-     */
-    @SuppressWarnings("unchecked")
-    @Deprecated
-    public static <T> T asType(Path path, Class<T> c) {
-        if (c == Writable.class) {
-            return (T) asWritable(path);
-        }
-        return DefaultGroovyMethods.asType((Object) path, c);
-    }
-
-    /**
-     * Allows a file to return a Writable implementation that can output itself
-     * to a Writer stream.
-     *
-     * @param self     a Path
-     * @param encoding the encoding to be used when reading the file's contents
-     * @return Path which wraps the input file and which implements Writable
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static Path asWritable(Path self, String encoding) {
-        return new WritablePath(self, encoding);
-    }
-
-    /**
-     * Create a buffered reader for this file.
-     *
-     * @param self a Path
-     * @return a BufferedReader
-     * @throws java.io.IOException if an IOException occurs.
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static BufferedReader newReader(Path self) throws IOException {
-        return Files.newBufferedReader(self, Charset.defaultCharset());
-    }
-
-    /**
-     * Create a buffered reader for this file, using the specified
-     * charset as the encoding.
-     *
-     * @param self    a Path
-     * @param charset the charset for this Path
-     * @return a BufferedReader
-     * @throws java.io.FileNotFoundException        if the Path was not found
-     * @throws java.io.UnsupportedEncodingException if the encoding specified is not supported
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static BufferedReader newReader(Path self, String charset) throws IOException {
-        return Files.newBufferedReader(self, Charset.forName(charset));
-    }
-
-    /**
-     * Create a new BufferedReader for this file and then
-     * passes it into the closure, ensuring the reader is closed after the
-     * closure returns.
-     *
-     * @param self    a file object
-     * @param closure a closure
-     * @return the value returned by the closure
-     * @throws java.io.IOException if an IOException occurs.
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static <T> T withReader(Path self, @ClosureParams(value = SimpleType.class, options = "java.io.Reader") Closure<T> closure) throws IOException {
-        return IOGroovyMethods.withReader(newReader(self), closure);
-    }
-
-    /**
-     * Create a new BufferedReader for this file using the specified charset and then
-     * passes it into the closure, ensuring the reader is closed after the
-     * closure returns.  The writer will use the given charset encoding,
-     * but will not write a BOM.
-     *
-     * @param self    a file object
-     * @param charset the charset for this input stream
-     * @param closure a closure
-     * @return the value returned by the closure
-     * @throws java.io.IOException if an IOException occurs.
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static <T> T withReader(Path self, String charset, @ClosureParams(value = SimpleType.class, options = "java.io.Reader") Closure<T> closure) throws IOException {
-        return IOGroovyMethods.withReader(newReader(self, charset), closure);
-    }
-
-    /**
-     * Create a buffered output stream for this file.
-     *
-     * @param self a file object
-     * @return the created OutputStream
-     * @throws java.io.IOException if an IOException occurs.
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static BufferedOutputStream newOutputStream(Path self) throws IOException {
-        return new BufferedOutputStream(Files.newOutputStream(self));
-    }
-
-    /**
-     * Creates a new data output stream for this file.
-     *
-     * @param self a file object
-     * @return the created DataOutputStream
-     * @throws java.io.IOException if an IOException occurs.
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static DataOutputStream newDataOutputStream(Path self) throws IOException {
-        return new DataOutputStream(Files.newOutputStream(self));
-    }
-
-    /**
-     * Creates a new OutputStream for this file and passes it into the closure.
-     * This method ensures the stream is closed after the closure returns.
-     *
-     * @param self    a Path
-     * @param closure a closure
-     * @return the value returned by the closure
-     * @throws java.io.IOException if an IOException occurs.
-     * @see org.codehaus.groovy.runtime.IOGroovyMethods#withStream(java.io.OutputStream, groovy.lang.Closure)
-     * @since 2.3.0
-     */
-    @Deprecated
-    @SuppressWarnings("unchecked")
-    public static Object withOutputStream(Path self, @ClosureParams(value = SimpleType.class, options = "java.io.OutputStream") Closure closure) throws IOException {
-        return IOGroovyMethods.withStream(newOutputStream(self), closure);
-    }
-
-    /**
-     * Create a new InputStream for this file and passes it into the closure.
-     * This method ensures the stream is closed after the closure returns.
-     *
-     * @param self    a Path
-     * @param closure a closure
-     * @return the value returned by the closure
-     * @throws java.io.IOException if an IOException occurs.
-     * @see org.codehaus.groovy.runtime.IOGroovyMethods#withStream(java.io.InputStream, groovy.lang.Closure)
-     * @since 2.3.0
-     */
-    @Deprecated
-    @SuppressWarnings("unchecked")
-    public static Object withInputStream(Path self, @ClosureParams(value = SimpleType.class, options = "java.io.InputStream") Closure closure) throws IOException {
-        return IOGroovyMethods.withStream(newInputStream(self), closure);
-    }
-
-    /**
-     * Create a new DataOutputStream for this file and passes it into the closure.
-     * This method ensures the stream is closed after the closure returns.
-     *
-     * @param self    a Path
-     * @param closure a closure
-     * @return the value returned by the closure
-     * @throws java.io.IOException if an IOException occurs.
-     * @see org.codehaus.groovy.runtime.IOGroovyMethods#withStream(java.io.OutputStream, groovy.lang.Closure)
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static <T> T withDataOutputStream(Path self, @ClosureParams(value = SimpleType.class, options = "java.io.DataOutputStream") Closure<T> closure) throws IOException {
-        return IOGroovyMethods.withStream(newDataOutputStream(self), closure);
-    }
-
-    /**
-     * Create a new DataInputStream for this file and passes it into the closure.
-     * This method ensures the stream is closed after the closure returns.
-     *
-     * @param self    a Path
-     * @param closure a closure
-     * @return the value returned by the closure
-     * @throws java.io.IOException if an IOException occurs.
-     * @see org.codehaus.groovy.runtime.IOGroovyMethods#withStream(java.io.InputStream, groovy.lang.Closure)
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static <T> T withDataInputStream(Path self, @ClosureParams(value = SimpleType.class, options = "java.io.DataInputStream") Closure<T> closure) throws IOException {
-        return IOGroovyMethods.withStream(newDataInputStream(self), closure);
-    }
-
-    /**
-     * Create a buffered writer for this file.
-     *
-     * @param self a Path
-     * @return a BufferedWriter
-     * @throws java.io.IOException if an IOException occurs.
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static BufferedWriter newWriter(Path self) throws IOException {
-        return Files.newBufferedWriter(self, Charset.defaultCharset());
-    }
-
-    /**
-     * Creates a buffered writer for this file, optionally appending to the
-     * existing file content.
-     *
-     * @param self   a Path
-     * @param append true if data should be appended to the file
-     * @return a BufferedWriter
-     * @throws java.io.IOException if an IOException occurs.
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static BufferedWriter newWriter(Path self, boolean append) throws IOException {
-        if (append) {
-            return Files.newBufferedWriter(self, Charset.defaultCharset(), CREATE, APPEND);
-        }
-        return Files.newBufferedWriter(self, Charset.defaultCharset());
-    }
-
-    /**
-     * Helper method to create a buffered writer for a file without writing a BOM.
-     *
-     * @param self    a Path
-     * @param charset the name of the encoding used to write in this file
-     * @param append  true if in append mode
-     * @return a BufferedWriter
-     * @throws java.io.IOException if an IOException occurs.
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static BufferedWriter newWriter(Path self, String charset, boolean append) throws IOException {
-        return newWriter(self, charset, append, false);
-    }
-
-    /**
-     * Helper method to create a buffered writer for a file.  If the given
-     * charset is "UTF-16BE" or "UTF-16LE" (or an equivalent alias), the
-     * requisite byte order mark is written to the stream before the writer
-     * is returned.
-     *
-     * @param self     a Path
-     * @param charset  the name of the encoding used to write in this file
-     * @param append   true if in append mode
-     * @param writeBom whether to write a BOM
-     * @return a BufferedWriter
-     * @throws java.io.IOException if an IOException occurs.
-     * @since 2.5.0
-     */
-    @Deprecated
-    public static BufferedWriter newWriter(Path self, String charset, boolean append, boolean writeBom) throws IOException {
-        boolean shouldWriteBom = writeBom && !self.toFile().exists();
-        if (append) {
-            BufferedWriter writer = Files.newBufferedWriter(self, Charset.forName(charset), CREATE, APPEND);
-            if (shouldWriteBom) {
-                writeUTF16BomIfRequired(writer, charset);
-            }
-            return writer;
-        } else {
-            OutputStream out = Files.newOutputStream(self);
-            if (shouldWriteBom) {
-                writeUTF16BomIfRequired(out, charset);
-            }
-            return new BufferedWriter(new OutputStreamWriter(out, Charset.forName(charset)));
-        }
-    }
-
-    /**
-     * Creates a buffered writer for this file without writing a BOM, writing data using the given
-     * encoding.
-     *
-     * @param self    a Path
-     * @param charset the name of the encoding used to write in this file
-     * @return a BufferedWriter
-     * @throws java.io.IOException if an IOException occurs.
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static BufferedWriter newWriter(Path self, String charset) throws IOException {
-        return newWriter(self, charset, false);
-    }
-
-    /**
-     * Creates a new BufferedWriter for this file, passes it to the closure, and
-     * ensures the stream is flushed and closed after the closure returns.
-     * The writer will not write a BOM.
-     *
-     * @param self    a Path
-     * @param closure a closure
-     * @return the value returned by the closure
-     * @throws java.io.IOException if an IOException occurs.
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static <T> T withWriter(Path self, @ClosureParams(value = SimpleType.class, options = "java.io.Writer") Closure<T> closure) throws IOException {
-        return withWriter(self, Charset.defaultCharset().name(), closure);
-    }
-
-    /**
-     * Creates a new BufferedWriter for this file, passes it to the closure, and
-     * ensures the stream is flushed and closed after the closure returns.
-     * The writer will use the given charset encoding, but will not write a BOM.
-     *
-     * @param self    a Path
-     * @param charset the charset used
-     * @param closure a closure
-     * @return the value returned by the closure
-     * @throws java.io.IOException if an IOException occurs.
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static <T> T withWriter(Path self, String charset, @ClosureParams(value = SimpleType.class, options = "java.io.Writer") Closure<T> closure) throws IOException {
-        return withWriter(self, charset, false, closure);
-    }
-
-    /**
-     * Creates a new BufferedWriter for this file, passes it to the closure, and
-     * ensures the stream is flushed and closed after the closure returns.
-     * The writer will use the given charset encoding.  If the given charset is
-     * "UTF-16BE" or "UTF-16LE" (or an equivalent alias), <code>writeBom</code>
-     * is <code>true</code>, and the file doesn't already exist, the requisite
-     * byte order mark is written to the stream when the writer is created.
-     *
-     * @param self     a Path
-     * @param charset  the charset used
-     * @param writeBom whether to write the BOM
-     * @param closure  a closure
-     * @return the value returned by the closure
-     * @throws java.io.IOException if an IOException occurs.
-     * @since 2.5.0
-     */
-    @Deprecated
-    public static <T> T withWriter(Path self, String charset, boolean writeBom, @ClosureParams(value = SimpleType.class, options = "java.io.Writer") Closure<T> closure) throws IOException {
-        return IOGroovyMethods.withWriter(newWriter(self, charset, false, writeBom), closure);
-    }
-
-    /**
-     * Create a new BufferedWriter which will append to this
-     * file.  The writer is passed to the closure and will be closed before
-     * this method returns.  The writer will use the given charset encoding,
-     * but will not write a BOM.
-     *
-     * @param self    a Path
-     * @param charset the charset used
-     * @param closure a closure
-     * @return the value returned by the closure
-     * @throws java.io.IOException if an IOException occurs.
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static <T> T withWriterAppend(Path self, String charset, @ClosureParams(value = SimpleType.class, options = "java.io.Writer") Closure<T> closure) throws IOException {
-        return withWriterAppend(self, charset, false, closure);
-    }
-
-    /**
-     * Create a new BufferedWriter which will append to this
-     * file.  The writer is passed to the closure and will be closed before
-     * this method returns.  The writer will use the given charset encoding.
-     * If the given charset is "UTF-16BE" or "UTF-16LE" (or an equivalent alias),
-     * <code>writeBom</code> is <code>true</code>, and the file doesn't already exist,
-     * the requisite byte order mark is written to the stream when the writer is created.
-     *
-     * @param self     a Path
-     * @param charset  the charset used
-     * @param writeBom whether to write the BOM
-     * @param closure  a closure
-     * @return the value returned by the closure
-     * @throws java.io.IOException if an IOException occurs.
-     * @since 2.5.0
-     */
-    @Deprecated
-    public static <T> T withWriterAppend(Path self, String charset, boolean writeBom, @ClosureParams(value = SimpleType.class, options = "java.io.Writer") Closure<T> closure) throws IOException {
-        return IOGroovyMethods.withWriter(newWriter(self, charset, true, writeBom), closure);
-    }
-
-    /**
-     * Create a new BufferedWriter for this file in append mode.  The writer
-     * is passed to the closure and is closed after the closure returns.
-     * The writer will not write a BOM.
-     *
-     * @param self    a Path
-     * @param closure a closure
-     * @return the value returned by the closure
-     * @throws java.io.IOException if an IOException occurs.
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static <T> T withWriterAppend(Path self, @ClosureParams(value = SimpleType.class, options = "java.io.Writer") Closure<T> closure) throws IOException {
-        return withWriterAppend(self, Charset.defaultCharset().name(), closure);
-    }
-
-    /**
-     * Create a new PrintWriter for this file.
-     *
-     * @param self a Path
-     * @return the created PrintWriter
-     * @throws java.io.IOException if an IOException occurs.
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static PrintWriter newPrintWriter(Path self) throws IOException {
-        return new GroovyPrintWriter(newWriter(self));
-    }
-
-    /**
-     * Create a new PrintWriter for this file, using specified
-     * charset.
-     *
-     * @param self    a Path
-     * @param charset the charset
-     * @return a PrintWriter
-     * @throws java.io.IOException if an IOException occurs.
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static PrintWriter newPrintWriter(Path self, String charset) throws IOException {
-        return new GroovyPrintWriter(newWriter(self, charset));
-    }
-
-    /**
-     * Create a new PrintWriter for this file which is then
-     * passed it into the given closure.  This method ensures its the writer
-     * is closed after the closure returns.
-     *
-     * @param self    a Path
-     * @param closure the closure to invoke with the PrintWriter
-     * @return the value returned by the closure
-     * @throws java.io.IOException if an IOException occurs.
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static <T> T withPrintWriter(Path self, @ClosureParams(value = SimpleType.class, options = "java.io.PrintWriter") Closure<T> closure) throws IOException {
-        return IOGroovyMethods.withWriter(newPrintWriter(self), closure);
-    }
-
-    /**
-     * Create a new PrintWriter with a specified charset for
-     * this file.  The writer is passed to the closure, and will be closed
-     * before this method returns.
-     *
-     * @param self    a Path
-     * @param charset the charset
-     * @param closure the closure to invoke with the PrintWriter
-     * @return the value returned by the closure
-     * @throws java.io.IOException if an IOException occurs.
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static <T> T withPrintWriter(Path self, String charset, @ClosureParams(value = SimpleType.class, options = "java.io.PrintWriter") Closure<T> closure) throws IOException {
-        return IOGroovyMethods.withWriter(newPrintWriter(self, charset), closure);
-    }
-
-    /**
-     * Creates a buffered input stream for this file.
-     *
-     * @param self a Path
-     * @return a BufferedInputStream of the file
-     * @throws java.io.FileNotFoundException if the file is not found.
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static BufferedInputStream newInputStream(Path self) throws IOException { // throws FileNotFoundException {
-        return new BufferedInputStream(Files.newInputStream(self));
-    }
-
-    /**
-     * Create a data input stream for this file
-     *
-     * @param self a Path
-     * @return a DataInputStream of the file
-     * @throws java.io.FileNotFoundException if the file is not found.
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static DataInputStream newDataInputStream(Path self) throws IOException { // throws FileNotFoundException {
-        return new DataInputStream(Files.newInputStream(self));
-    }
-
-    /**
-     * Traverse through each byte of this Path
-     *
-     * @param self    a Path
-     * @param closure a closure
-     * @throws java.io.IOException if an IOException occurs.
-     * @see org.codehaus.groovy.runtime.IOGroovyMethods#eachByte(java.io.InputStream, groovy.lang.Closure)
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static void eachByte(Path self, @ClosureParams(value = SimpleType.class, options = "byte") Closure closure) throws IOException {
-        BufferedInputStream is = newInputStream(self);
-        IOGroovyMethods.eachByte(is, closure);
-    }
-
-    /**
-     * Traverse through the bytes of this Path, bufferLen bytes at a time.
-     *
-     * @param self      a Path
-     * @param bufferLen the length of the buffer to use.
-     * @param closure   a 2 parameter closure which is passed the byte[] and a number of bytes successfully read.
-     * @throws java.io.IOException if an IOException occurs.
-     * @see org.codehaus.groovy.runtime.IOGroovyMethods#eachByte(java.io.InputStream, int, groovy.lang.Closure)
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static void eachByte(Path self, int bufferLen, @ClosureParams(value = FromString.class, options = "byte[],Integer") Closure closure) throws IOException {
-        BufferedInputStream is = newInputStream(self);
-        IOGroovyMethods.eachByte(is, bufferLen, closure);
-    }
-
-    /**
-     * Filters the lines of a Path and creates a Writable in return to
-     * stream the filtered lines.
-     *
-     * @param self    a Path
-     * @param closure a closure which returns a boolean indicating to filter
-     *                the line or not
-     * @return a Writable closure
-     * @throws java.io.IOException if <code>self</code> is not readable
-     * @see org.codehaus.groovy.runtime.IOGroovyMethods#filterLine(java.io.Reader, groovy.lang.Closure)
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static Writable filterLine(Path self, @ClosureParams(value = SimpleType.class, options = "java.lang.String") Closure closure) throws IOException {
-        return IOGroovyMethods.filterLine(newReader(self), closure);
-    }
-
-    /**
-     * Filters the lines of a Path and creates a Writable in return to
-     * stream the filtered lines.
-     *
-     * @param self    a Path
-     * @param charset opens the file with a specified charset
-     * @param closure a closure which returns a boolean indicating to filter
-     *                the line or not
-     * @return a Writable closure
-     * @throws java.io.IOException if an IOException occurs
-     * @see org.codehaus.groovy.runtime.IOGroovyMethods#filterLine(java.io.Reader, groovy.lang.Closure)
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static Writable filterLine(Path self, String charset, @ClosureParams(value = SimpleType.class, options = "java.lang.String") Closure closure) throws IOException {
-        return IOGroovyMethods.filterLine(newReader(self, charset), closure);
-    }
-
-    /**
-     * Filter the lines from this Path, and write them to the given writer based
-     * on the given closure predicate.
-     *
-     * @param self    a Path
-     * @param writer  a writer destination to write filtered lines to
-     * @param closure a closure which takes each line as a parameter and returns
-     *                <code>true</code> if the line should be written to this writer.
-     * @throws java.io.IOException if <code>self</code> is not readable
-     * @see org.codehaus.groovy.runtime.IOGroovyMethods#filterLine(java.io.Reader, java.io.Writer, groovy.lang.Closure)
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static void filterLine(Path self, Writer writer, @ClosureParams(value = SimpleType.class, options = "java.lang.String") Closure closure) throws IOException {
-        IOGroovyMethods.filterLine(newReader(self), writer, closure);
-    }
-
-    /**
-     * Filter the lines from this Path, and write them to the given writer based
-     * on the given closure predicate.
-     *
-     * @param self    a Path
-     * @param writer  a writer destination to write filtered lines to
-     * @param charset opens the file with a specified charset
-     * @param closure a closure which takes each line as a parameter and returns
-     *                <code>true</code> if the line should be written to this writer.
-     * @throws java.io.IOException if an IO error occurs
-     * @see org.codehaus.groovy.runtime.IOGroovyMethods#filterLine(java.io.Reader, java.io.Writer, groovy.lang.Closure)
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static void filterLine(Path self, Writer writer, String charset, @ClosureParams(value = SimpleType.class, options = "java.lang.String") Closure closure) throws IOException {
-        IOGroovyMethods.filterLine(newReader(self, charset), writer, closure);
-    }
-
-    /**
-     * Reads the content of the file into a byte array.
-     *
-     * @param self a Path
-     * @return a byte array with the contents of the file.
-     * @throws java.io.IOException if an IOException occurs.
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static byte[] readBytes(Path self) throws IOException {
-        return Files.readAllBytes(self);
-    }
-
-    /**
-     * #deprecated use the variant in IOGroovyMethods
-     *
-     * @see org.codehaus.groovy.runtime.IOGroovyMethods#withCloseable(java.io.Closeable, groovy.lang.Closure)
-     * @since 2.3.0
-     */
-    @Deprecated
-    public static <T> T withCloseable(Closeable self, @ClosureParams(value = SimpleType.class, options = "java.io.Closeable") Closure<T> action) throws IOException {
-        return IOGroovyMethods.withCloseable(self, action);
-    }
-
-}
diff --git a/subprojects/groovy-nio/src/main/java/org/codehaus/groovy/runtime/WritablePath.java b/subprojects/groovy-nio/src/main/java/org/codehaus/groovy/runtime/WritablePath.java
deleted file mode 100644
index 56d5e59..0000000
--- a/subprojects/groovy-nio/src/main/java/org/codehaus/groovy/runtime/WritablePath.java
+++ /dev/null
@@ -1,216 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.runtime;
-
-import groovy.lang.Writable;
-
-import java.io.File;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.io.Reader;
-import java.io.Writer;
-import java.net.URI;
-import java.nio.charset.Charset;
-import java.nio.file.FileSystem;
-import java.nio.file.Files;
-import java.nio.file.LinkOption;
-import java.nio.file.Path;
-import java.nio.file.WatchEvent;
-import java.nio.file.WatchKey;
-import java.nio.file.WatchService;
-import java.util.Iterator;
-
-/**
- * A Writable Path.
- */
-@Deprecated
-public class WritablePath implements Path, Writable {
-
-    private final String encoding;
-    private final Path delegate;
-
-    public WritablePath(final Path delegate) {
-        this(delegate, null);
-    }
-
-    public WritablePath(final Path delegate, final String encoding) {
-        this.encoding = encoding;
-        this.delegate = delegate;
-    }
-
-    public Writer writeTo(final Writer out) throws IOException {
-
-        try (Reader reader = (this.encoding == null)
-                ? new InputStreamReader(Files.newInputStream(this))
-                : new InputStreamReader(Files.newInputStream(this), Charset.forName(this.encoding))) {
-            int c = reader.read();
-
-            while (c != -1) {
-                out.write(c);
-                c = reader.read();
-            }
-        }
-        return out;
-    }
-
-    @Override
-    public FileSystem getFileSystem() {
-        return delegate.getFileSystem();
-    }
-
-    @Override
-    public boolean isAbsolute() {
-        return delegate.isAbsolute();
-    }
-
-    @Override
-    public Path getRoot() {
-        return delegate.getRoot();
-    }
-
-    @Override
-    public Path getFileName() {
-        return delegate.getFileName();
-    }
-
-    @Override
-    public Path getParent() {
-        return delegate.getParent();
-    }
-
-    @Override
-    public int getNameCount() {
-        return delegate.getNameCount();
-    }
-
-    @Override
-    public Path getName(int index) {
-        return delegate.getName(index);
-    }
-
-    @Override
-    public Path subpath(int beginIndex, int endIndex) {
-        return delegate.subpath(beginIndex, endIndex);
-    }
-
-    @Override
-    public boolean startsWith(Path other) {
-        return delegate.startsWith(other);
-    }
-
-    @Override
-    public boolean startsWith(String other) {
-        return delegate.startsWith(other);
-    }
-
-    @Override
-    public boolean endsWith(Path other) {
-        return delegate.endsWith(other);
-    }
-
-    @Override
-    public boolean endsWith(String other) {
-        return delegate.endsWith(other);
-    }
-
-    @Override
-    public Path normalize() {
-        return delegate.normalize();
-    }
-
-    @Override
-    public Path resolve(Path other) {
-        return delegate.resolve(other);
-    }
-
-    @Override
-    public Path resolve(String other) {
-        return delegate.resolve(other);
-    }
-
-    @Override
-    public Path resolveSibling(Path other) {
-        return delegate.resolveSibling(other);
-    }
-
-    @Override
-    public Path resolveSibling(String other) {
-        return delegate.resolveSibling(other);
-    }
-
-    @Override
-    public Path relativize(Path other) {
-        return delegate.relativize(other);
-    }
-
-    @Override
-    public URI toUri() {
-        return delegate.toUri();
-    }
-
-    @Override
-    public Path toAbsolutePath() {
-        return delegate.toAbsolutePath();
-    }
-
-    @Override
-    public Path toRealPath(LinkOption... options) throws IOException {
-        return delegate.toRealPath(options);
-    }
-
-    @Override
-    public File toFile() {
-        return delegate.toFile();
-    }
-
-    @Override
-    public WatchKey register(WatchService watcher, WatchEvent.Kind<?>[] events, WatchEvent.Modifier... modifiers) throws IOException {
-        return delegate.register(watcher, events, modifiers);
-    }
-
-    @Override
-    public WatchKey register(WatchService watcher, WatchEvent.Kind<?>... events) throws IOException {
-        return delegate.register(watcher, events);
-    }
-
-    @Override
-    public Iterator<Path> iterator() {
-        return delegate.iterator();
-    }
-
-    @Override
-    public int compareTo(Path other) {
-        return delegate.compareTo(other);
-    }
-
-    @Override
-    public boolean equals(Object other) {
-        return delegate.equals(other);
-    }
-
-    @Override
-    public int hashCode() {
-        return delegate.hashCode();
-    }
-
-    @Override
-    public String toString() {
-        return delegate.toString();
-    }
-}
diff --git a/subprojects/groovy-test/src/main/groovy/groovy/lang/GroovyLogTestCase.groovy b/subprojects/groovy-test/src/main/groovy/groovy/lang/GroovyLogTestCase.groovy
deleted file mode 100644
index c96808d..0000000
--- a/subprojects/groovy-test/src/main/groovy/groovy/lang/GroovyLogTestCase.groovy
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package groovy.lang
-
-import java.util.logging.Handler
-import java.util.logging.Level
-import java.util.logging.Logger
-import java.util.logging.SimpleFormatter
-import java.util.logging.StreamHandler
-
-/**
- * Helper class to spoof log entries as produced by calling arbitrary code.
- * This allows non-intrusive testing of dependent objects without
- * explicitly using Mock objects as long as those dependent objects
- * do some proper logging.
- * As a measure of last resort, it can be used on MetaClass to spoof
- * it's log entries on 'invokeMethod'.
- *
- * @see GroovyLogTestCaseTest
- */
-@Deprecated
-class GroovyLogTestCase extends GroovyTestCase {
-
-    /**
-     *      Execute the given Closure with the according level for the Logger that
-     *      is qualified by the qualifier and return the log output as a String.
-     *      Qualifiers are usually package or class names.
-     *      Existing log level and handlers are restored after execution.
-     */
-    static String stringLog(Level level, String qualifier, Closure yield) {
-        // store old values
-        Logger logger = Logger.getLogger(qualifier)
-        def usesParentHandlers = logger.useParentHandlers
-        // set new values
-        logger.useParentHandlers = false
-        def out = new ByteArrayOutputStream(1024)
-        Handler stringHandler = new StreamHandler(out, new SimpleFormatter())
-        stringHandler.level = Level.ALL
-        logger.addHandler(stringHandler) // any old handlers remain
-
-        withLevel(level, qualifier, yield)
-
-        // restore old values
-        logger.level = Level.OFF    // temporarily, to avoid logging the 3 stmts below
-        stringHandler.flush()
-        out.close()
-        logger.removeHandler(stringHandler)
-        logger.useParentHandlers = usesParentHandlers
-        return out.toString()
-    }
-
-    /**
-     * Execute the given Closure with the according level for the Logger that
-     * is qualified by the qualifier. Qualifiers are usually package or class names.
-     * The log level is restored after execution.
-     */
-    static def withLevel(Level level, String qualifier, Closure yield) {
-        // store old values
-        Logger logger = Logger.getLogger(qualifier)
-        def loglevel = logger.level
-        // set new values
-        if (!logger.isLoggable(level)) logger.level = level // use min value
-
-        def result = yield()
-
-        // restore old values
-        logger.level = loglevel
-        return result
-    }
-}
\ No newline at end of file
diff --git a/subprojects/groovy-test/src/main/groovy/groovy/util/GroovyShellTestCase.groovy b/subprojects/groovy-test/src/main/groovy/groovy/util/GroovyShellTestCase.groovy
deleted file mode 100644
index c313763..0000000
--- a/subprojects/groovy-test/src/main/groovy/groovy/util/GroovyShellTestCase.groovy
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package groovy.util
-
-/**
- * Groovy test case, which recreates internal GroovyShell in each setUp()
- */
-
-@Deprecated
-class GroovyShellTestCase extends GroovyTestCase {
-
-    @Delegate protected GroovyShell shell
-
-    protected void setUp() {
-        super.setUp()
-        shell = createNewShell()
-    }
-
-    protected void tearDown() {
-        shell = null
-        super.tearDown()
-    }
-
-    /**
-     * Create new shell instance.
-     * Overwrite it to customize
-     */
-    protected GroovyShell createNewShell() {
-        return new GroovyShell()
-    }
-
-    /**
-     * Executes closure with given binding
-     */
-    protected def withBinding (Map map, Closure closure) {
-        Binding binding = shell.context
-        Map bmap = binding.variables
-        try {
-            Map vars = new HashMap(bmap)
-            bmap.putAll map
-
-            return closure.call()
-        }
-        finally {
-            bmap.clear()
-            bmap.putAll vars
-        }
-    }
-
-    /**
-     * Evaluates script with given binding
-     */
-    protected def withBinding (Map map, String script) {
-        Binding binding = shell.context
-        Map bmap = binding.variables
-        try {
-            Map vars = new HashMap(bmap)
-            bmap.putAll map
-
-            return evaluate(script)
-        }
-        finally {
-            bmap.clear()
-            bmap.putAll vars
-        }
-    }
-}
\ No newline at end of file
diff --git a/subprojects/groovy-test/src/main/groovy/groovy/util/JavadocAssertionTestBuilder.groovy b/subprojects/groovy-test/src/main/groovy/groovy/util/JavadocAssertionTestBuilder.groovy
deleted file mode 100644
index df83633..0000000
--- a/subprojects/groovy-test/src/main/groovy/groovy/util/JavadocAssertionTestBuilder.groovy
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package groovy.util
-
-import java.util.regex.Pattern
-
-/**
- * <code>JavadocAssertionTestBuilder</code> will dynamically create a test cases from Groovy assertions placed within
- * the Javadoc comments of a source file. Assertions should be placed within an html tag with a <code>class="groovyTestCase"</code>
- * attribute assignment. Example:
- * <pre>&lt;pre class="groovyTestCase"&gt; assert "example".size() == 7 &lt;/pre&gt;</pre>
- * When extracting the code for the test, single-line snippets of code without braces within a {{@code @code} ...}
- * tag will have the javadoc {@code code} tag stripped. Similarly, html entities are converted back when extracting
- * code, so {@code &lt;} and {@code &gt;} will be converted to {@code <} and {@code >}.
- */
-@Deprecated
-class JavadocAssertionTestBuilder {
-    // TODO write tests for this classes functionality
-    private static final Pattern javadocPattern =
-        Pattern.compile( /(?ims)\/\*\*.*?\*\// )
-    private static final Pattern assertionPattern =
-        Pattern.compile( /(?ims)<([a-z]+)\s+class\s*=\s*['"]groovyTestCase['"]\s*>.*?<\s*\/\s*\1>/ )
-
-    Class buildTest(String filename, String code) {
-        Class test = null
-        
-        List assertionTags = getAssertionTags(code)
-        if (assertionTags) {
-            String testName = getTestName(filename)
-
-            Map lineNumberToAssertions = getLineNumberToAssertionsMap(code, assertionTags)                            
-            List testMethods = getTestMethods(lineNumberToAssertions, filename)
-            String testCode = getTestCode(testName, testMethods)
-
-            test = createClass(testCode)
-        }
-
-        return test
-    }
-    
-    private List getAssertionTags(String code) {
-        List assertions = new ArrayList()
-
-        code.eachMatch(javadocPattern) { javadoc ->
-            assertions.addAll(javadoc.findAll(assertionPattern))
-        }
-        
-        return assertions
-    }
-    
-    private String getTestName(String filename) {
-        String filenameWithoutPath = new File(filename).name
-        String testName = filenameWithoutPath.substring(0, filenameWithoutPath.lastIndexOf(".")) +
-            "JavadocAssertionTest"
-        
-        return testName
-    }
-    
-    private Map getLineNumberToAssertionsMap(String code, List assertionTags) {
-        Map lineNumberToAssertions = [:] as LinkedHashMap
-
-        int codeIndex = 0
-        assertionTags.each { tag ->
-            codeIndex = code.indexOf(tag, codeIndex)
-            int lineNumber = code.substring(0, codeIndex).findAll("(?m)^").size()
-            codeIndex += tag.size()
-            
-            String assertion = getAssertion(tag)
-            
-            lineNumberToAssertions.get(lineNumber, []) << assertion
-        }
-
-        return lineNumberToAssertions
-    }
-    
-    private String getAssertion(String tag) {
-        String tagInner = tag.substring(tag.indexOf(">")+1, tag.lastIndexOf("<"))
-        String htmlAssertion = tagInner.replaceAll("(?m)^\\s*\\*", "")
-        String assertion = htmlAssertion
-        // TODO improve on this
-        [nbsp:' ', gt:'>', lt:'<', quot:'"', apos:"'", at:'@', '#64':'@', ndash:'-', amp:'&'].each { key, value ->
-            assertion = assertion.replaceAll("(?i)&$key;", value)
-        }
-        assertion = assertion.replaceAll(/(?i)\{@code ([^}]*)\}/, '$1')
-
-        return assertion
-    }
-    
-    private List getTestMethods(Map lineNumberToAssertions, String filename) {
-        List testMethods = lineNumberToAssertions.collect { lineNumber, assertions ->
-            Character differentiator = 'a'
-            assertions.collect { assertion ->
-                String suffix = (assertions.size() > 1 ? "$lineNumber$differentiator" : lineNumber)
-                differentiator++
-                getTestMethodCodeForAssertion(suffix, assertion, basename(filename))
-            }
-        }.flatten()
-
-        return testMethods
-    }
-
-    private String basename(String fullPath) {
-        def path = new File(fullPath)
-        def fullName = path.name
-        fullName.substring(0, fullName.lastIndexOf("."))
-    }
-
-    private String getTestMethodCodeForAssertion(String suffix, String assertion, String basename) {
-        return """
-            public void testAssertionFrom${basename}Line$suffix() {
-                byte[] bytes = [ ${(assertion.getBytes("UTF-8") as List).join(", ")} ] as byte[]
-                Eval.me(new String(bytes, "UTF-8"))
-            }
-        """
-    }
-    
-    private String getTestCode(String testName, List testMethods) {
-        return """
-            class $testName extends junit.framework.TestCase {
-                """+testMethods.join("\r\n")+"""
-            }
-        """
-    }
-
-    private Class createClass(String testCode) {
-        return new GroovyClassLoader().parseClass(testCode)
-    }    
-}
diff --git a/subprojects/groovy-test/src/main/groovy/groovy/util/JavadocAssertionTestSuite.groovy b/subprojects/groovy-test/src/main/groovy/groovy/util/JavadocAssertionTestSuite.groovy
deleted file mode 100644
index 5e813e7..0000000
--- a/subprojects/groovy-test/src/main/groovy/groovy/util/JavadocAssertionTestSuite.groovy
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package groovy.util
-
-import junit.framework.Test
-import junit.framework.TestSuite
-import junit.textui.TestRunner
-
-/**
- * <code>JavadocAssertionTestSuite</code> will dynamically create test cases from Groovy assertions placed within
- * Javadoc comments. Assertions should be placed within an html tag with a <code>class="groovyTestCase"</code>
- * attribute assignment. Example:
- * <pre>&lt;pre class="groovyTestCase"&gt; assert "example".size() == 7 &lt;/pre&gt;</pre>
- *
- * Source files will be read from the directory specified by the <code>javadocAssertion.src.dir</code>
- * system property, including all files matching <code>javadocAssertion.src.pattern</code> and
- * excluding files matching the <code>javadocAssertion.src.excludesPattern</code>. 
- *
- * By default all <code>.java</code> and <code>.groovy</code> source files from <code>./src</code> will
- * be scanned for assertions.
- *
- * You can also run this class as an application from the command line (assumes Groovy, JUnit and Ant
- * are on the classpath). As an example:
- * <p>
- * <code>
- * java groovy.util.JavadocAssertionTestSuite src/main
- * </code>
- *
- * <b>Note: this class requires the Ant module at runtime.</b>
- */
-@Deprecated
-class JavadocAssertionTestSuite extends TestSuite {
-    /** The System Property to set as base directory for collection of Classes.
-     * The pattern will be used as an Ant fileset include basedir.
-     * Key is "javadocAssertion.src.dir".
-     * Defaults to the <code>./src</code> directory
-     */
-    public static final String SYSPROP_SRC_DIR = "javadocAssertion.src.dir";
-
-    /** The System Property to set as the filename pattern for collection of Classes.
-     * The pattern will be used as Regular Expression pattern applied with the find
-     * operator against each candidate file.path.
-     * Key is "javadocAssertion.src.pattern".
-     * Defaults to including all <code>.java</code> and <code>.groovy</code> files.
-     */
-    public static final String SYSPROP_SRC_PATTERN = "javadocAssertion.src.pattern";
-    
-    /** The System Property to set as a filename excludes pattern for collection of Classes.
-     * When non-empty, the pattern will be used as Regular Expression pattern applied with the
-     * find operator against each candidate file.path.
-     * Key is "javadocAssertion.src.excludesPattern".
-     * Default value is "".
-     */
-    public static final String SYSPROP_SRC_EXCLUDES_PATTERN = "javadocAssertion.src.excludesPattern";
-    
-    private static final JavadocAssertionTestBuilder testBuilder = new JavadocAssertionTestBuilder()
-    private static final IFileNameFinder finder = Class.forName('groovy.ant.FileNameFinder',true,this.classLoader).newInstance()
-    
-    static Test suite() {
-        String basedir = System.getProperty(SYSPROP_SRC_DIR, "./src/")
-        return suite(basedir)
-    }
-    
-    static Test suite(String basedir) {
-        String includePattern = System.getProperty(SYSPROP_SRC_PATTERN, "**/*.java,**/*.groovy")
-        return suite(basedir, includePattern)
-    }
-    
-    static Test suite(String basedir, String includePattern) {
-        String excludePattern = System.getProperty(SYSPROP_SRC_EXCLUDES_PATTERN, "")
-        return suite(basedir, includePattern, excludePattern)
-    }
-    
-    static Test suite(String basedir, String includePattern, String excludePattern) {
-        assert new File(basedir).exists()
-        
-        TestSuite suite = new JavadocAssertionTestSuite()
-
-        Collection filenames = finder.getFileNames([dir:basedir, includes:includePattern, excludes:excludePattern])
-        filenames.each { filename ->
-            String code = new File(filename).text
-            Class test = testBuilder.buildTest(filename, code)
-            if (test != null) {
-                suite.addTestSuite(test)
-            }
-        }
-
-        return suite
-    }
-
-    static void main(String[] args) {
-        switch(args.length) {
-            case 3:
-                TestRunner.run(suite(args[0], args[1], args[2]))
-                break
-            case 2:
-                TestRunner.run(suite(args[0], args[1]))
-                break
-            case 1:
-                TestRunner.run(suite(args[0]))
-                break
-            default:
-                TestRunner.run(suite())
-        }
-    }
-
-}
diff --git a/subprojects/groovy-test/src/main/groovy/groovy/util/StringTestUtil.groovy b/subprojects/groovy-test/src/main/groovy/groovy/util/StringTestUtil.groovy
deleted file mode 100644
index a49ac12..0000000
--- a/subprojects/groovy-test/src/main/groovy/groovy/util/StringTestUtil.groovy
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package groovy.util
-
-import org.junit.Assert
-
-@Deprecated
-class StringTestUtil {
-    static void assertMultilineStringsEqual(String a, String b) {
-        def aLines = a.trim().replaceAll('\r','').split('\n')
-        def bLines = b.trim().replaceAll('\r','').split('\n')
-        assert aLines.size() == bLines.size()
-        for (i in 0..<aLines.size()) {
-            Assert.assertEquals(aLines[i].trim(), bLines[i].trim())
-        }
-    }
-}
diff --git a/subprojects/groovy-test/src/main/java/groovy/transform/NotYetImplemented.java b/subprojects/groovy-test/src/main/java/groovy/transform/NotYetImplemented.java
deleted file mode 100644
index 0f9ddf3..0000000
--- a/subprojects/groovy-test/src/main/java/groovy/transform/NotYetImplemented.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package groovy.transform;
-
-import org.codehaus.groovy.transform.GroovyASTTransformationClass;
-
-import java.lang.annotation.ElementType;
-import java.lang.annotation.Retention;
-import java.lang.annotation.RetentionPolicy;
-import java.lang.annotation.Target;
-
-/**
- * Method annotation used to invert test case results. If a JUnit 3/4 test case method is
- * annotated with {@code @NotYetImplemented} the test will fail if no test failure occurs and it will pass
- * if a test failure occurs.
- * <p>
- * This is helpful for tests that don't currently work but should work one day,
- * when the tested functionality has been implemented.
- * <p>
- * The idea for this AST transformation originated in {@link groovy.test.GroovyTestCase#notYetImplemented()}.
- *
- * @since 2.0.0
- * @deprecated use {@link groovy.test.NotYetImplemented}
- */
-@Deprecated
-@java.lang.annotation.Documented
-@Retention(RetentionPolicy.RUNTIME)
-@Target({ElementType.METHOD})
-@GroovyASTTransformationClass("org.apache.groovy.test.transform.NotYetImplementedASTTransformation")
-public @interface NotYetImplemented {
-}
diff --git a/subprojects/groovy-test/src/main/java/groovy/util/AllTestSuite.java b/subprojects/groovy-test/src/main/java/groovy/util/AllTestSuite.java
deleted file mode 100644
index afd62d0..0000000
--- a/subprojects/groovy-test/src/main/java/groovy/util/AllTestSuite.java
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package groovy.util;
-
-import groovy.lang.GroovyClassLoader;
-import groovy.lang.Script;
-import junit.framework.Test;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-import org.codehaus.groovy.control.CompilationFailedException;
-import org.apache.groovy.test.ScriptTestAdapter;
-
-import java.io.File;
-import java.io.IOException;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-import java.util.List;
-import java.util.logging.Logger;
-
-/**
- * AllTestSuite can be used in extension of GroovyTestSuite to execute TestCases written in Groovy
- * from inside a Java IDE.
- * AllTestSuite collects all files below a given directory that comply to a given pattern.
- * From these files, a TestSuite is constructed that can be run via an IDE graphical Test runner.
- * The files are assumed to be Groovy source files and be either a TestCase or a Script that can
- * be wrapped transparently into a TestCase.
- * The directory and the pattern can be set via System properties (see this classes' constants for details.)
- * <p>
- * When setting the log level of this class to FINEST, all file loading will be logged.
- * <p>
- * See also groovy.util.AllTestSuiteTest.groovy
- */
-@Deprecated
-public class AllTestSuite extends TestSuite {
-
-    /**
-     * The System Property to set as base directory for collection of Test Cases.
-     * The pattern will be used as an Ant fileset include basedir.
-     * Key is "groovy.test.dir".
-     * Default value is "./test/".
-     */
-    public static final String SYSPROP_TEST_DIR = "groovy.test.dir";
-
-    /**
-     * The System Property to set as the filename pattern for collection of Test Cases.
-     * The pattern will be used as Regular Expression pattern applied with the find
-     * operator against each candidate file.path.
-     * Key is "groovy.test.pattern".
-     * Default value is "Test.groovy".
-     */
-    public static final String SYSPROP_TEST_PATTERN = "groovy.test.pattern";
-
-    /**
-     * The System Property to set as a filename excludes pattern for collection of Test Cases.
-     * When non-empty, the pattern will be used as Regular Expression pattern applied with the
-     * find operator against each candidate file.path.
-     * Key is "groovy.test.excludesPattern".
-     * Default value is "".
-     */
-    public static final String SYSPROP_TEST_EXCLUDES_PATTERN = "groovy.test.excludesPattern";
-
-    private static final Logger LOG = Logger.getLogger(AllTestSuite.class.getName());
-    private static final ClassLoader JAVA_LOADER = AllTestSuite.class.getClassLoader();
-    private static final GroovyClassLoader GROOVY_LOADER =
-            AccessController.doPrivileged(
-                    new PrivilegedAction<GroovyClassLoader>() {
-                        @Override
-                        public GroovyClassLoader run() {
-                            return new GroovyClassLoader(JAVA_LOADER);
-                        }
-                    }
-            );
-
-    private static final String[] EMPTY_ARGS = new String[]{};
-    private static IFileNameFinder finder = null;
-
-    static { // this is only needed since the Groovy Build compiles *.groovy files after *.java files
-        try {
-            // TODO: dk: make FileNameFinder injectable
-            finder = (IFileNameFinder) Class.forName("groovy.ant.FileNameFinder").getDeclaredConstructor().newInstance();
-        } catch (Exception e) {
-            throw new RuntimeException("Cannot find and instantiate class FileNameFinder", e);
-        }
-    }
-
-    public static Test suite() {
-        String basedir = System.getProperty(SYSPROP_TEST_DIR, "./test/");
-        String pattern = System.getProperty(SYSPROP_TEST_PATTERN, "**/*Test.groovy");
-        String excludesPattern = System.getProperty(SYSPROP_TEST_EXCLUDES_PATTERN, "");
-        return suite(basedir, pattern, excludesPattern);
-    }
-
-    public static Test suite(String basedir, String pattern) {
-        return suite(basedir, pattern, "");
-    }
-
-    public static Test suite(String basedir, String pattern, String excludesPattern) {
-        AllTestSuite suite = new AllTestSuite();
-        List<String> filenames = excludesPattern.length() > 0
-                ? finder.getFileNames(basedir, pattern, excludesPattern)
-                : finder.getFileNames(basedir, pattern);
-        for (String filename : filenames) {
-            LOG.finest("trying to load " + filename);
-            try {
-                suite.loadTest(filename);
-            } catch (CompilationFailedException cfe) {
-                cfe.printStackTrace();
-                throw new RuntimeException("CompilationFailedException when loading " + filename, cfe);
-            } catch (IOException ioe) {
-                throw new RuntimeException("IOException when loading " + filename, ioe);
-            }
-        }
-        return suite;
-    }
-
-    @SuppressWarnings("unchecked")
-    protected void loadTest(String filename) throws CompilationFailedException, IOException {
-        Class type = compile(filename);
-        if (TestCase.class.isAssignableFrom(type)) {
-            addTestSuite((Class<? extends TestCase>)type);
-        } else if (Script.class.isAssignableFrom(type)) {
-            addTest(new ScriptTestAdapter(type, EMPTY_ARGS));
-        } else {
-            throw new RuntimeException("Don't know how to treat " + filename + " as a JUnit test");
-        }
-    }
-
-    protected Class compile(String filename) throws CompilationFailedException, IOException {
-        return GROOVY_LOADER.parseClass(new File(filename));
-    }
-}
diff --git a/subprojects/groovy-test/src/main/java/groovy/util/GroovyAssert.java b/subprojects/groovy-test/src/main/java/groovy/util/GroovyAssert.java
deleted file mode 100644
index f36f227..0000000
--- a/subprojects/groovy-test/src/main/java/groovy/util/GroovyAssert.java
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package groovy.util;
-
-import groovy.lang.Closure;
-import groovy.lang.GroovyRuntimeException;
-import org.codehaus.groovy.runtime.ScriptBytecodeAdapter;
-
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-/**
- * @deprecated Use the {@link groovy.test.GroovyAssert} class instead
- */
-@Deprecated
-public class GroovyAssert {
-    private static final int MAX_NESTED_EXCEPTIONS = 10;
-
-    /**
-     * Asserts that the given code closure fails when it is evaluated
-     *
-     * @param code the code expected to throw the exception
-     * @return the message of the thrown Throwable
-     */
-    public static Throwable shouldFail(Closure code) {
-        boolean failed = false;
-        Throwable th = null;
-        try {
-            code.call();
-        } catch (GroovyRuntimeException gre) {
-            failed = true;
-            th = ScriptBytecodeAdapter.unwrap(gre);
-        } catch (Throwable e) {
-            failed = true;
-            th = e;
-        }
-        assertTrue("Closure " + code + " should have failed", failed);
-        return th;
-    }
-
-    /**
-     * Asserts that the given code closure fails when it is evaluated
-     * and that a particular exception is thrown.
-     *
-     * @param clazz the class of the expected exception
-     * @param code  the closure that should fail
-     * @return the message of the expected Throwable
-     */
-    public static Throwable shouldFail(Class clazz, Closure code) {
-        Throwable th = null;
-        try {
-            code.call();
-        } catch (GroovyRuntimeException gre) {
-            th = ScriptBytecodeAdapter.unwrap(gre);
-        } catch (Throwable e) {
-            th = e;
-        }
-
-        if (th == null) {
-            fail("Closure " + code + " should have failed with an exception of type " + clazz.getName());
-        } else if (!clazz.isInstance(th)) {
-            fail("Closure " + code + " should have failed with an exception of type " + clazz.getName() + ", instead got Exception " + th);
-        }
-        return th;
-    }
-
-    /**
-     * Asserts that the given code closure fails when it is evaluated
-     * and that a particular exception can be attributed to the cause.
-     * The expected exception class is compared recursively with any nested
-     * exceptions using getCause() until either a match is found or no more
-     * nested exceptions exist.
-     * <p>
-     * If a match is found the error message associated with the matching
-     * exception is returned. If no match was found the method will fail.
-     *
-     * @param clazz the class of the expected exception
-     * @param code  the closure that should fail
-     * @return the message of the expected Throwable
-     */
-    public static Throwable shouldFailWithCause(Class clazz, Closure code) {
-        Throwable th = null;
-        Throwable orig = null;
-        int level = 0;
-        try {
-            code.call();
-        } catch (GroovyRuntimeException gre) {
-            orig = ScriptBytecodeAdapter.unwrap(gre);
-            th = orig.getCause();
-        } catch (Throwable e) {
-            orig = e;
-            th = orig.getCause();
-        }
-
-        while (th != null && !clazz.isInstance(th) && th != th.getCause() && level < MAX_NESTED_EXCEPTIONS) {
-            th = th.getCause();
-            level++;
-        }
-
-        if (orig == null) {
-            fail("Closure " + code + " should have failed with an exception caused by type " + clazz.getName());
-        } else if (th == null || !clazz.isInstance(th)) {
-            fail("Closure " + code + " should have failed with an exception caused by type " + clazz.getName() + ", instead found these Exceptions:\n" + buildExceptionList(orig));
-        }
-        return th;
-    }
-
-    private static String buildExceptionList(Throwable th) {
-        StringBuilder sb = new StringBuilder();
-        int level = 0;
-        while (th != null) {
-            if (level > 1) {
-                for (int i = 0; i < level - 1; i++) sb.append("   ");
-            }
-            if (level > 0) sb.append("-> ");
-            if (level > MAX_NESTED_EXCEPTIONS) {
-                sb.append("...");
-                break;
-            }
-            sb.append(th.getClass().getName()).append(": ").append(th.getMessage()).append("\n");
-            if (th == th.getCause()) {
-                break;
-            }
-            th = th.getCause();
-            level++;
-        }
-        return sb.toString();
-    }
-
-}
diff --git a/subprojects/groovy-test/src/main/java/groovy/util/GroovyTestCase.java b/subprojects/groovy-test/src/main/java/groovy/util/GroovyTestCase.java
deleted file mode 100644
index 76dc45e..0000000
--- a/subprojects/groovy-test/src/main/java/groovy/util/GroovyTestCase.java
+++ /dev/null
@@ -1,281 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package groovy.util;
-
-import groovy.lang.Closure;
-import groovy.test.GroovyAssert;
-import junit.framework.TestCase;
-import org.codehaus.groovy.runtime.InvokerHelper;
-import org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation;
-
-import java.util.concurrent.atomic.AtomicInteger;
-import java.util.logging.Logger;
-
-/**
- * A JUnit 3 {@link junit.framework.TestCase} base class in Groovy.
- *
- * In case JUnit 4 is used, see {@link groovy.test.GroovyAssert}.
- *
- * @see groovy.test.GroovyAssert
- */
-@Deprecated
-public class GroovyTestCase extends TestCase {
-
-    protected static Logger log = Logger.getLogger(GroovyTestCase.class.getName());
-
-    private static final AtomicInteger scriptFileNameCounter = new AtomicInteger(0);
-
-    public static final String TEST_SCRIPT_NAME_PREFIX = "TestScript";
-
-    private boolean useAgileDoxNaming = false;
-
-    /**
-     * Overload the getName() method to make the test cases look more like AgileDox
-     * (thanks to Joe Walnes for this tip!)
-     */
-    public String getName() {
-        if (useAgileDoxNaming) {
-            return super.getName().substring(4).replaceAll("([A-Z])", " $1").toLowerCase();
-        } else {
-            return super.getName();
-        }
-    }
-
-    public String getMethodName() {
-        return super.getName();
-    }
-
-    /**
-     * Asserts that the arrays are equivalent and contain the same values
-     *
-     * @param expected
-     * @param value
-     */
-    protected void assertArrayEquals(Object[] expected, Object[] value) {
-        String message =
-                "expected array: " + InvokerHelper.toString(expected) + " value array: " + InvokerHelper.toString(value);
-        assertNotNull(message + ": expected should not be null", expected);
-        assertNotNull(message + ": value should not be null", value);
-        assertEquals(message, expected.length, value.length);
-        for (int i = 0, size = expected.length; i < size; i++) {
-            assertEquals("value[" + i + "] when " + message, expected[i], value[i]);
-        }
-    }
-
-    /**
-     * Asserts that the array of characters has a given length
-     *
-     * @param length expected length
-     * @param array  the array
-     */
-    protected void assertLength(int length, char[] array) {
-        assertEquals(length, array.length);
-    }
-
-    /**
-     * Asserts that the array of ints has a given length
-     *
-     * @param length expected length
-     * @param array  the array
-     */
-    protected void assertLength(int length, int[] array) {
-        assertEquals(length, array.length);
-    }
-
-    /**
-     * Asserts that the array of objects has a given length
-     *
-     * @param length expected length
-     * @param array  the array
-     */
-    protected void assertLength(int length, Object[] array) {
-        assertEquals(length, array.length);
-    }
-
-    /**
-     * Asserts that the array of characters contains a given char
-     *
-     * @param expected expected character to be found
-     * @param array    the array
-     */
-    protected void assertContains(char expected, char[] array) {
-        for (int i = 0; i < array.length; ++i) {
-            if (array[i] == expected) {
-                return;
-            }
-        }
-
-        StringBuilder message = new StringBuilder();
-
-        message.append(expected).append(" not in {");
-
-        for (int i = 0; i < array.length; ++i) {
-            message.append("'").append(array[i]).append("'");
-
-            if (i < (array.length - 1)) {
-                message.append(", ");
-            }
-        }
-
-        message.append(" }");
-
-        fail(message.toString());
-    }
-
-    /**
-     * Asserts that the array of ints contains a given int
-     *
-     * @param expected expected int
-     * @param array    the array
-     */
-    protected void assertContains(int expected, int[] array) {
-        for (int anInt : array) {
-            if (anInt == expected) {
-                return;
-            }
-        }
-
-        StringBuilder message = new StringBuilder();
-
-        message.append(expected).append(" not in {");
-
-        for (int i = 0; i < array.length; ++i) {
-            message.append("'").append(array[i]).append("'");
-
-            if (i < (array.length - 1)) {
-                message.append(", ");
-            }
-        }
-
-        message.append(" }");
-
-        fail(message.toString());
-    }
-
-    /**
-     * Asserts that the value of toString() on the given object matches the
-     * given text string
-     *
-     * @param value    the object to be output to the console
-     * @param expected the expected String representation
-     */
-    protected void assertToString(Object value, String expected) {
-        Object console = InvokerHelper.invokeMethod(value, "toString", null);
-        assertEquals("toString() on value: " + value, expected, console);
-    }
-
-    /**
-     * Asserts that the value of inspect() on the given object matches the
-     * given text string
-     *
-     * @param value    the object to be output to the console
-     * @param expected the expected String representation
-     */
-    protected void assertInspect(Object value, String expected) {
-        Object console = InvokerHelper.invokeMethod(value, "inspect", null);
-        assertEquals("inspect() on value: " + value, expected, console);
-    }
-
-    /**
-     * see {@link groovy.test.GroovyAssert#assertScript(String)}
-     */
-    protected void assertScript(final String script) throws Exception {
-        GroovyAssert.assertScript(script);
-    }
-
-    protected String getTestClassName() {
-        return TEST_SCRIPT_NAME_PREFIX + getMethodName() + (scriptFileNameCounter.getAndIncrement()) + ".groovy";
-    }
-
-    /**
-     * see {@link groovy.test.GroovyAssert#shouldFail(groovy.lang.Closure)}
-     */
-    protected String shouldFail(Closure code) {
-        return GroovyAssert.shouldFail(code).getMessage();
-    }
-
-    /**
-     * see {@link groovy.test.GroovyAssert#shouldFail(Class, groovy.lang.Closure)}
-     */
-    protected String shouldFail(Class clazz, Closure code) {
-        return GroovyAssert.shouldFail(clazz, code).getMessage();
-    }
-
-    /**
-     * see {@link groovy.test.GroovyAssert#shouldFailWithCause(Class, groovy.lang.Closure)}
-     */
-    protected String shouldFailWithCause(Class clazz, Closure code) {
-        return GroovyAssert.shouldFailWithCause(clazz, code).getMessage();
-    }
-
-    /**
-     * see {@link groovy.test.GroovyAssert#shouldFail(Class, String)}
-     */
-    protected String shouldFail(Class clazz, String script) {
-        return GroovyAssert.shouldFail(clazz, script).getMessage();
-    }
-
-    /**
-     * see {@link groovy.test.GroovyAssert#shouldFail(String)}
-     */
-    protected String shouldFail(String script) {
-        return GroovyAssert.shouldFail(script).getMessage();
-    }
-
-    /**
-     * Returns a copy of a string in which all EOLs are \n.
-     */
-    protected String fixEOLs(String value) {
-        return value.replaceAll("(\\r\\n?)|\n", "\n");
-    }
-
-    /**
-     * see {@link groovy.test.GroovyAssert#notYetImplemented(java.lang.Object)}
-     */
-    public static boolean notYetImplemented(Object caller) {
-        return GroovyAssert.notYetImplemented(caller);
-    }
-
-    /**
-     * Convenience method for subclasses of GroovyTestCase, identical to
-     * <pre> GroovyTestCase.notYetImplemented(this); </pre>.
-     *
-     * @return <code>false</code> when not itself already in the call stack
-     * @see #notYetImplemented(java.lang.Object)
-     */
-    public boolean notYetImplemented() {
-        return notYetImplemented(this);
-    }
-
-    public static void assertEquals(String message, Object expected, Object actual) {
-        if (expected == null && actual == null)
-            return;
-        if (expected != null && DefaultTypeTransformation.compareEqual(expected, actual))
-            return;
-        TestCase.assertEquals(message, expected, actual);
-    }
-
-    public static void assertEquals(Object expected, Object actual) {
-        assertEquals(null, expected, actual);
-    }
-
-    public static void assertEquals(String expected, String actual) {
-        assertEquals(null, expected, actual);
-    }
-}
diff --git a/subprojects/groovy-test/src/main/java/groovy/util/GroovyTestSuite.java b/subprojects/groovy-test/src/main/java/groovy/util/GroovyTestSuite.java
deleted file mode 100644
index f8ce24e..0000000
--- a/subprojects/groovy-test/src/main/java/groovy/util/GroovyTestSuite.java
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package groovy.util;
-
-import groovy.lang.GroovyClassLoader;
-import groovy.lang.Script;
-import junit.framework.Test;
-import junit.framework.TestSuite;
-import junit.textui.TestRunner;
-import org.apache.groovy.test.ScriptTestAdapter;
-
-import java.io.File;
-import java.security.AccessController;
-import java.security.PrivilegedAction;
-
-/**
- * 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 application
- * and specifying the script to run on the command line.
- * <code>
- * java groovy.util.GroovyTestSuite src/test/Foo.groovy
- * </code>
- * 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.&#160;pass this into the JVM when the unit test plugin runs...
- * <code>
- * -Dtest=src/test/Foo.groovy
- * </code>
- */
-@Deprecated
-public class GroovyTestSuite extends TestSuite {
-
-    protected static String file = null;
-
-    protected final GroovyClassLoader loader =
-            AccessController.doPrivileged(
-                    new PrivilegedAction<GroovyClassLoader>() {
-                        @Override
-                        public GroovyClassLoader run() {
-                            return new GroovyClassLoader(GroovyTestSuite.class.getClassLoader());
-                        }
-                    }
-            );
-
-    public static void main(String[] args) {
-        if (args.length > 0) {
-            file = args[0];
-        }
-        TestRunner.run(suite());
-    }
-
-    public static Test suite() {
-        GroovyTestSuite suite = new GroovyTestSuite();
-        try {
-            suite.loadTestSuite();
-        } catch (Exception e) {
-            throw new RuntimeException("Could not create the test suite: " + e, e);
-        }
-        return suite;
-    }
-
-    public void loadTestSuite() throws Exception {
-        String fileName = System.getProperty("test", file);
-        if (fileName == null) {
-            throw new RuntimeException("No filename given in the 'test' system property so cannot run a Groovy unit test");
-        }
-        System.out.println("Compiling: " + fileName);
-        Class type = compile(fileName);
-        String[] args = {};
-        if (!Test.class.isAssignableFrom(type) && Script.class.isAssignableFrom(type)) {
-            // let's treat the script as a Test
-            addTest(new ScriptTestAdapter(type, args));
-        } else {
-            addTestSuite(type);
-        }
-    }
-
-    public Class compile(String fileName) throws Exception {
-        return loader.parseClass(new File(fileName));
-    }
-}
diff --git a/subprojects/groovy-test/src/main/java/org/codehaus/groovy/runtime/ScriptTestAdapter.java b/subprojects/groovy-test/src/main/java/org/codehaus/groovy/runtime/ScriptTestAdapter.java
deleted file mode 100644
index b82b49a..0000000
--- a/subprojects/groovy-test/src/main/java/org/codehaus/groovy/runtime/ScriptTestAdapter.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.runtime;
-
-import junit.framework.Test;
-import junit.framework.TestResult;
-
-/**
- * An adapter to make any Groovy Script class an instance of a JUnit Test
- *
- * @deprecated use {@link org.apache.groovy.test.ScriptTestAdapter}
- */
-@Deprecated
-public class ScriptTestAdapter implements Test {
-    private Class scriptClass;
-    private String[] arguments;
-
-    public ScriptTestAdapter(Class scriptClass, String[] arguments) {
-        this.scriptClass = scriptClass;
-        this.arguments = arguments;
-    }
-
-    public int countTestCases() {
-        return 1;
-    }
-
-    public void run(TestResult result) {
-        try {
-            result.startTest(this);
-
-            // let's run the script
-            InvokerHelper.runScript(scriptClass, arguments);
-            result.endTest(this);
-        } catch (Exception e) {
-            result.addError(this, e);
-        }
-    }
-
-    public String toString() {
-        return "TestCase for script: " + scriptClass.getName();
-    }
-}
diff --git a/subprojects/groovy-xml/src/main/java/groovy/util/XmlNodePrinter.java b/subprojects/groovy-xml/src/main/java/groovy/util/XmlNodePrinter.java
deleted file mode 100644
index 261b9c9..0000000
--- a/subprojects/groovy-xml/src/main/java/groovy/util/XmlNodePrinter.java
+++ /dev/null
@@ -1,446 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package groovy.util;
-
-import groovy.xml.QName;
-import org.codehaus.groovy.runtime.InvokerHelper;
-
-import java.io.OutputStreamWriter;
-import java.io.PrintWriter;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Prints a <code>groovy.util.Node</code> (as used with <code>XmlParser</code>) including all children in XML format.
- * Typical usage:
- * <pre>
- * def xml = '&lt;html&gt;&lt;head&gt;&lt;title&gt;Title&lt;/title&gt;&lt;/head&gt;&lt;body&gt;&lt;h1&gt;Header&lt;/h1&gt;&lt;/body&gt;&lt;/html&gt;'
- * def root = new XmlParser().parseText(xml)
- * new XmlNodePrinter(preserveWhitespace:true).print(root.body[0])
- * </pre>
- * which when run produces this on stdout (or use your own <code>PrintWriter</code> to direct elsewhere):
- * <pre>
- * &lt;body&gt;
- *   &lt;h1&gt;Header&lt;/h1&gt;
- * &lt;/body&gt;
- * </pre>
- *
- * @see groovy.util.NodePrinter
- * @see groovy.xml.XmlUtil#serialize(Node)
- * @deprecated use {@link groovy.xml.XmlNodePrinter}
- */
-@Deprecated
-public class XmlNodePrinter {
-
-    protected final IndentPrinter out;
-    private String quote;
-    private boolean namespaceAware = true;
-    private boolean preserveWhitespace = false;
-    private boolean expandEmptyElements = false;
-
-    public XmlNodePrinter(PrintWriter out) {
-        this(out, "  ");
-    }
-
-    public XmlNodePrinter(PrintWriter out, String indent) {
-        this(out, indent, "\"");
-    }
-
-    public XmlNodePrinter(PrintWriter out, String indent, String quote) {
-        this(new IndentPrinter(out, indent), quote);
-    }
-
-    public XmlNodePrinter(IndentPrinter out) {
-        this(out, "\"");
-    }
-
-    public XmlNodePrinter(IndentPrinter out, String quote) {
-        if (out == null) {
-            throw new IllegalArgumentException("Argument 'IndentPrinter out' must not be null!");
-        }
-        this.out = out;
-        this.quote = quote;
-    }
-
-    public XmlNodePrinter() {
-        this(new PrintWriter(new OutputStreamWriter(System.out)));
-    }
-
-    public void print(Node node) {
-        print(node, new NamespaceContext());
-    }
-
-    /**
-     * Check if namespace handling is enabled.
-     * Defaults to <code>true</code>.
-     *
-     * @return true if namespace handling is enabled
-     */
-    public boolean isNamespaceAware() {
-        return namespaceAware;
-    }
-
-    /**
-     * Enable and/or disable namespace handling.
-     *
-     * @param namespaceAware the new desired value
-     */
-    public void setNamespaceAware(boolean namespaceAware) {
-        this.namespaceAware = namespaceAware;
-    }
-
-    /**
-     * Check if whitespace preservation is enabled.
-     * Defaults to <code>false</code>.
-     *
-     * @return true if whitespaces are honoured when printing simple text nodes
-     */
-    public boolean isPreserveWhitespace() {
-        return preserveWhitespace;
-    }
-
-    /**
-     * Enable and/or disable preservation of whitespace.
-     *
-     * @param preserveWhitespace the new desired value
-     */
-    public void setPreserveWhitespace(boolean preserveWhitespace) {
-        this.preserveWhitespace = preserveWhitespace;
-    }
-
-    /**
-     * Get Quote to use when printing attributes.
-     *
-     * @return the quote character
-     */
-    public String getQuote() {
-        return quote;
-    }
-
-    /**
-     * Set Quote to use when printing attributes.
-     *
-     * @param quote the quote character
-     */
-    public void setQuote(String quote) {
-        this.quote = quote;
-    }
-
-    /**
-     * Whether empty elements are expanded from &lt;tagName/&gt; to &lt;tagName&gt;&lt;/tagName&gt;.
-     *
-     * @return <code>true</code>, if empty elements will be represented by an opening tag
-     *                            followed immediately by a closing tag.
-     */
-    public boolean isExpandEmptyElements() {
-        return expandEmptyElements;
-    }
-
-    /**
-     * Whether empty elements are expanded from &lt;tagName/&gt; to &lt;tagName&gt;&lt;/tagName&gt;.
-     *
-     * @param expandEmptyElements if <code>true</code>, empty
-     *                            elements will be represented by an opening tag
-     *                            followed immediately by a closing tag.
-     *                            Defaults to <code>false</code>.
-     */
-    public void setExpandEmptyElements(boolean expandEmptyElements) {
-        this.expandEmptyElements = expandEmptyElements;
-    }
-
-    protected void print(Node node, NamespaceContext ctx) {
-        /*
-         * Handle empty elements like '<br/>', '<img/> or '<hr noshade="noshade"/>.
-         */
-        if (isEmptyElement(node)) {
-            printLineBegin();
-            out.print("<");
-            out.print(getName(node));
-            if (ctx != null) {
-                printNamespace(node, ctx);
-            }
-            printNameAttributes(node.attributes(), ctx);
-            if (expandEmptyElements) {
-                out.print("></");
-                out.print(getName(node));
-                out.print(">");
-            } else {
-                out.print("/>");
-            }
-            printLineEnd();
-            out.flush();
-            return;
-        }
-
-        /*
-         * Hook for extra processing, e.g. GSP tag element!
-         */
-        if (printSpecialNode(node)) {
-            out.flush();
-            return;
-        }
-
-        /*
-         * Handle normal element like <html> ... </html>.
-         */
-        Object value = node.value();
-        if (value instanceof List) {
-            printName(node, ctx, true, isListOfSimple((List) value));
-            printList((List) value, ctx);
-            printName(node, ctx, false, isListOfSimple((List) value));
-            out.flush();
-            return;
-        }
-
-        // treat as simple type - probably a String
-        printName(node, ctx, true, preserveWhitespace);
-        printSimpleItemWithIndent(value);
-        printName(node, ctx, false, preserveWhitespace);
-        out.flush();
-    }
-
-    private boolean isListOfSimple(List value) {
-        for (Object p : value) {
-            if (p instanceof Node) return false;
-        }
-        return preserveWhitespace;
-    }
-
-    protected void printLineBegin() {
-        out.printIndent();
-    }
-
-    protected void printLineEnd() {
-        printLineEnd(null);
-    }
-
-    protected void printLineEnd(String comment) {
-        if (comment != null) {
-            out.print(" <!-- ");
-            out.print(comment);
-            out.print(" -->");
-        }
-        out.println();
-        out.flush();
-    }
-
-    protected void printList(List list, NamespaceContext ctx) {
-        out.incrementIndent();
-        for (Object value : list) {
-            NamespaceContext context = new NamespaceContext(ctx);
-            /*
-             * If the current value is a node, recurse into that node.
-             */
-            if (value instanceof Node) {
-                print((Node) value, context);
-                continue;
-            }
-            printSimpleItem(value);
-        }
-        out.decrementIndent();
-    }
-
-    protected void printSimpleItem(Object value) {
-        if (!preserveWhitespace) printLineBegin();
-        printEscaped(InvokerHelper.toString(value), false);
-        if (!preserveWhitespace) printLineEnd();
-    }
-
-    protected void printName(Node node, NamespaceContext ctx, boolean begin, boolean preserve) {
-        if (node == null) {
-            throw new NullPointerException("Node must not be null.");
-        }
-        Object name = node.name();
-        if (name == null) {
-            throw new NullPointerException("Name must not be null.");
-        }
-        if (!preserve || begin) printLineBegin();
-        out.print("<");
-        if (!begin) {
-            out.print("/");
-        }
-        out.print(getName(node));
-        if (ctx != null) {
-            printNamespace(node, ctx);
-        }
-        if (begin) {
-            printNameAttributes(node.attributes(), ctx);
-        }
-        out.print(">");
-        if (!preserve || !begin) printLineEnd();
-    }
-
-    protected boolean printSpecialNode(Node node) {
-        return false;
-    }
-
-    protected void printNamespace(Object object, NamespaceContext ctx) {
-        if (namespaceAware) {
-            if (object instanceof Node) {
-                printNamespace(((Node) object).name(), ctx);
-            } else if (object instanceof QName) {
-                QName qname = (QName) object;
-                String namespaceUri = qname.getNamespaceURI();
-                if (namespaceUri != null) {
-                    String prefix = qname.getPrefix();
-                    if (!ctx.isPrefixRegistered(prefix, namespaceUri)) {
-                        ctx.registerNamespacePrefix(prefix, namespaceUri);
-                        out.print(" ");
-                        out.print("xmlns");
-                        if (prefix.length() > 0) {
-                            out.print(":");
-                            out.print(prefix);
-                        }
-                        out.print("=" + quote);
-                        out.print(namespaceUri);
-                        out.print(quote);
-                    }
-                }
-            }
-        }
-    }
-
-    protected void printNameAttributes(Map attributes, NamespaceContext ctx) {
-        if (attributes == null || attributes.isEmpty()) {
-            return;
-        }
-        for (Object p : attributes.entrySet()) {
-            Map.Entry entry = (Map.Entry) p;
-            out.print(" ");
-            out.print(getName(entry.getKey()));
-            out.print("=");
-            Object value = entry.getValue();
-            out.print(quote);
-            if (value instanceof String) {
-                printEscaped((String) value, true);
-            } else {
-                printEscaped(InvokerHelper.toString(value), true);
-            }
-            out.print(quote);
-            printNamespace(entry.getKey(), ctx);
-        }
-    }
-
-    private static boolean isEmptyElement(Node node) {
-        if (node == null) {
-            throw new IllegalArgumentException("Node must not be null!");
-        }
-        if (!node.children().isEmpty()) {
-            return false;
-        }
-        return node.text().length() == 0;
-    }
-
-    private String getName(Object object) {
-        if (object instanceof String) {
-            return (String) object;
-        } else if (object instanceof QName) {
-            QName qname = (QName) object;
-            if (!namespaceAware) {
-                return qname.getLocalPart();
-            }
-            return qname.getQualifiedName();
-        } else if (object instanceof Node) {
-            Object name = ((Node) object).name();
-            return getName(name);
-        }
-        return object.toString();
-    }
-
-    private void printSimpleItemWithIndent(Object value) {
-        if (!preserveWhitespace) out.incrementIndent();
-        printSimpleItem(value);
-        if (!preserveWhitespace) out.decrementIndent();
-    }
-
-    // For ' and " we only escape if needed. As far as XML is concerned,
-    // we could always escape if we wanted to.
-    private void printEscaped(String s, boolean isAttributeValue) {
-        for (int i = 0; i < s.length(); i++) {
-            char c = s.charAt(i);
-            switch (c) {
-                case '<':
-                    out.print("&lt;");
-                    break;
-                case '>':
-                    out.print("&gt;");
-                    break;
-                case '&':
-                    out.print("&amp;");
-                    break;
-                case '\'':
-                    if (isAttributeValue && quote.equals("'"))
-                        out.print("&apos;");
-                    else
-                        out.print(c);
-                    break;
-                case '"':
-                    if (isAttributeValue && quote.equals("\""))
-                        out.print("&quot;");
-                    else
-                        out.print(c);
-                    break;
-                case '\n':
-                    if (isAttributeValue)
-                        out.print("&#10;");
-                    else
-                        out.print(c);
-                    break;
-                case '\r':
-                    if (isAttributeValue)
-                        out.print("&#13;");
-                    else
-                        out.print(c);
-                    break;
-                default:
-                    out.print(c);
-            }
-        }
-    }
-
-    @Deprecated
-    protected static class NamespaceContext {
-        private final Map<String, String> namespaceMap;
-
-        public NamespaceContext() {
-            namespaceMap = new HashMap<String, String>();
-        }
-
-        public NamespaceContext(NamespaceContext context) {
-            this();
-            namespaceMap.putAll(context.namespaceMap);
-        }
-
-        public boolean isPrefixRegistered(String prefix, String uri) {
-            return namespaceMap.containsKey(prefix) && namespaceMap.get(prefix).equals(uri);
-        }
-
-        public void registerNamespacePrefix(String prefix, String uri) {
-            if (!isPrefixRegistered(prefix, uri)) {
-                namespaceMap.put(prefix, uri);
-            }
-        }
-
-        public String getNamespace(String prefix) {
-            Object uri = namespaceMap.get(prefix);
-            return (uri == null) ? null : uri.toString();
-        }
-    }
-}
diff --git a/subprojects/groovy-xml/src/main/java/groovy/util/XmlParser.java b/subprojects/groovy-xml/src/main/java/groovy/util/XmlParser.java
deleted file mode 100644
index ce28050..0000000
--- a/subprojects/groovy-xml/src/main/java/groovy/util/XmlParser.java
+++ /dev/null
@@ -1,505 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package groovy.util;
-
-import groovy.xml.FactorySupport;
-import groovy.xml.QName;
-import org.xml.sax.Attributes;
-import org.xml.sax.ContentHandler;
-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.SAXNotRecognizedException;
-import org.xml.sax.SAXNotSupportedException;
-import org.xml.sax.XMLReader;
-
-import javax.xml.XMLConstants;
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.parsers.SAXParser;
-import javax.xml.parsers.SAXParserFactory;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.Reader;
-import java.io.StringReader;
-import java.util.ArrayList;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-
-/**
- * A helper class for parsing XML into a tree of Node instances for a
- * simple way of processing XML. This parser does not preserve the XML
- * InfoSet - if that's what you need try using W3C DOM, dom4j, JDOM, XOM etc.
- * This parser ignores comments and processing instructions and converts
- * the XML into a Node for each element in the XML with attributes
- * and child Nodes and Strings. This simple model is sufficient for
- * most simple use cases of processing XML.
- * <p>
- * Example usage:
- * <pre class="groovyTestCase">
- * def xml = '&lt;root&gt;&lt;one a1="uno!"/&gt;&lt;two&gt;Some text!&lt;/two&gt;&lt;/root&gt;'
- * def rootNode = new XmlParser().parseText(xml)
- * assert rootNode.name() == 'root'
- * assert rootNode.one[0].@a1 == 'uno!'
- * assert rootNode.two.text() == 'Some text!'
- * rootNode.children().each { assert it.name() in ['one','two'] }
- * </pre>
- *
- * @deprecated use {@link groovy.xml.XmlParser}
- */
-@Deprecated
-public class XmlParser implements ContentHandler {
-
-    private StringBuilder bodyText = new StringBuilder();
-    private final List<Node> stack = new ArrayList<Node>();
-    private Locator locator;
-    private final XMLReader reader;
-    private Node parent;
-
-    private boolean trimWhitespace = false;
-    private boolean keepIgnorableWhitespace = false;
-    private boolean namespaceAware;
-
-    /**
-     * Creates a non-validating and namespace-aware <code>XmlParser</code> which does not allow DOCTYPE declarations in documents.
-     *
-     * @throws ParserConfigurationException if no parser which satisfies the requested configuration can be created.
-     * @throws SAXException for SAX errors.
-     */
-    public XmlParser() throws ParserConfigurationException, SAXException {
-        this(false, true);
-    }
-
-    /**
-     * Creates a <code>XmlParser</code> which does not allow DOCTYPE declarations in documents.
-     *
-     * @param validating <code>true</code> if the parser should validate documents as they are parsed; false otherwise.
-     * @param namespaceAware <code>true</code> if the parser should provide support for XML namespaces; <code>false</code> otherwise.
-     * @throws ParserConfigurationException if no parser which satisfies the requested configuration can be created.
-     * @throws SAXException for SAX errors.
-     */
-    public XmlParser(boolean validating, boolean namespaceAware) throws ParserConfigurationException, SAXException {
-        this(validating, namespaceAware, false);
-    }
-
-    /**
-     * Creates a <code>XmlParser</code>.
-     *
-     * @param validating <code>true</code> if the parser should validate documents as they are parsed; false otherwise.
-     * @param namespaceAware <code>true</code> if the parser should provide support for XML namespaces; <code>false</code> otherwise.
-     * @param allowDocTypeDeclaration <code>true</code> if the parser should provide support for DOCTYPE declarations; <code>false</code> otherwise.
-     * @throws ParserConfigurationException if no parser which satisfies the requested configuration can be created.
-     * @throws SAXException for SAX errors.
-     */
-    public XmlParser(boolean validating, boolean namespaceAware, boolean allowDocTypeDeclaration) throws ParserConfigurationException, SAXException {
-        SAXParserFactory factory = FactorySupport.createSaxParserFactory();
-        factory.setNamespaceAware(namespaceAware);
-        this.namespaceAware = namespaceAware;
-        factory.setValidating(validating);
-        setQuietly(factory, XMLConstants.FEATURE_SECURE_PROCESSING, true);
-        setQuietly(factory, "http://apache.org/xml/features/disallow-doctype-decl", !allowDocTypeDeclaration);
-        reader = factory.newSAXParser().getXMLReader();
-    }
-
-    public XmlParser(XMLReader reader) {
-        this.reader = reader;
-    }
-
-    public XmlParser(SAXParser parser) throws SAXException {
-        reader = parser.getXMLReader();
-    }
-
-    private static void setQuietly(SAXParserFactory factory, String feature, boolean value) {
-        try {
-            factory.setFeature(feature, value);
-        }
-        catch (ParserConfigurationException | SAXNotSupportedException | SAXNotRecognizedException ignored) { }
-    }
-
-    /**
-     * Returns the current trim whitespace setting.
-     *
-     * @return true if whitespace will be trimmed
-     */
-    public boolean isTrimWhitespace() {
-        return trimWhitespace;
-    }
-
-    /**
-     * Sets the trim whitespace setting value.
-     *
-     * @param trimWhitespace the desired setting value
-     */
-    public void setTrimWhitespace(boolean trimWhitespace) {
-        this.trimWhitespace = trimWhitespace;
-    }
-
-    /**
-     * Returns the current keep ignorable whitespace setting.
-     *
-     * @return true if ignorable whitespace will be kept (default false)
-     */
-    public boolean isKeepIgnorableWhitespace() {
-        return keepIgnorableWhitespace;
-    }
-
-    /**
-     * Sets the keep ignorable whitespace setting value.
-     *
-     * @param keepIgnorableWhitespace the desired new value
-     */
-    public void setKeepIgnorableWhitespace(boolean keepIgnorableWhitespace) {
-        this.keepIgnorableWhitespace = keepIgnorableWhitespace;
-    }
-
-    /**
-     * Parses the content of the given file as XML turning it into a tree
-     * of Nodes.
-     *
-     * @param file the File containing the XML to be parsed
-     * @return the root node of the parsed tree of Nodes
-     * @throws SAXException Any SAX exception, possibly
-     *                      wrapping another exception.
-     * @throws IOException  An IO exception from the parser,
-     *                      possibly from a byte stream or character stream
-     *                      supplied by the application.
-     */
-    public Node parse(File file) throws IOException, SAXException {
-        InputSource input = new InputSource(new FileInputStream(file));
-        input.setSystemId("file://" + file.getAbsolutePath());
-        getXMLReader().parse(input);
-        return parent;
-
-    }
-
-    /**
-     * Parse the content of the specified input source into a tree of Nodes.
-     *
-     * @param input the InputSource for the XML to parse
-     * @return the root node of the parsed tree of Nodes
-     * @throws SAXException Any SAX exception, possibly
-     *                      wrapping another exception.
-     * @throws IOException  An IO exception from the parser,
-     *                      possibly from a byte stream or character stream
-     *                      supplied by the application.
-     */
-    public Node parse(InputSource input) throws IOException, SAXException {
-        getXMLReader().parse(input);
-        return parent;
-    }
-
-    /**
-     * Parse the content of the specified input stream into a tree of Nodes.
-     * <p>
-     * Note that using this method will not provide the parser with any URI
-     * for which to find DTDs etc
-     *
-     * @param input an InputStream containing the XML to be parsed
-     * @return the root node of the parsed tree of Nodes
-     * @throws SAXException Any SAX exception, possibly
-     *                      wrapping another exception.
-     * @throws IOException  An IO exception from the parser,
-     *                      possibly from a byte stream or character stream
-     *                      supplied by the application.
-     */
-    public Node parse(InputStream input) throws IOException, SAXException {
-        InputSource is = new InputSource(input);
-        getXMLReader().parse(is);
-        return parent;
-    }
-
-    /**
-     * Parse the content of the specified reader into a tree of Nodes.
-     * <p>
-     * Note that using this method will not provide the parser with any URI
-     * for which to find DTDs etc
-     *
-     * @param in a Reader to read the XML to be parsed
-     * @return the root node of the parsed tree of Nodes
-     * @throws SAXException Any SAX exception, possibly
-     *                      wrapping another exception.
-     * @throws IOException  An IO exception from the parser,
-     *                      possibly from a byte stream or character stream
-     *                      supplied by the application.
-     */
-    public Node parse(Reader in) throws IOException, SAXException {
-        InputSource is = new InputSource(in);
-        getXMLReader().parse(is);
-        return parent;
-    }
-
-    /**
-     * Parse the content of the specified URI into a tree of Nodes.
-     *
-     * @param uri a String containing a uri pointing to the XML to be parsed
-     * @return the root node of the parsed tree of Nodes
-     * @throws SAXException Any SAX exception, possibly
-     *                      wrapping another exception.
-     * @throws IOException  An IO exception from the parser,
-     *                      possibly from a byte stream or character stream
-     *                      supplied by the application.
-     */
-    public Node parse(String uri) throws IOException, SAXException {
-        InputSource is = new InputSource(uri);
-        getXMLReader().parse(is);
-        return parent;
-    }
-
-    /**
-     * A helper method to parse the given text as XML.
-     *
-     * @param text the XML text to parse
-     * @return the root node of the parsed tree of Nodes
-     * @throws SAXException Any SAX exception, possibly
-     *                      wrapping another exception.
-     * @throws IOException  An IO exception from the parser,
-     *                      possibly from a byte stream or character stream
-     *                      supplied by the application.
-     */
-    public Node parseText(String text) throws IOException, SAXException {
-        return parse(new StringReader(text));
-    }
-
-    /**
-     * Determine if namespace handling is enabled.
-     *
-     * @return true if namespace handling is enabled
-     */
-    public boolean isNamespaceAware() {
-        return namespaceAware;
-    }
-
-    /**
-     * Enable and/or disable namespace handling.
-     *
-     * @param namespaceAware the new desired value
-     */
-    public void setNamespaceAware(boolean namespaceAware) {
-        this.namespaceAware = namespaceAware;
-    }
-
-    // Delegated XMLReader methods
-    //------------------------------------------------------------------------
-
-    /* (non-Javadoc)
-     * @see org.xml.sax.XMLReader#getDTDHandler()
-     */
-    public DTDHandler getDTDHandler() {
-        return this.reader.getDTDHandler();
-    }
-
-    /* (non-Javadoc)
-     * @see org.xml.sax.XMLReader#getEntityResolver()
-     */
-    public EntityResolver getEntityResolver() {
-        return this.reader.getEntityResolver();
-    }
-
-    /* (non-Javadoc)
-     * @see org.xml.sax.XMLReader#getErrorHandler()
-     */
-    public ErrorHandler getErrorHandler() {
-        return this.reader.getErrorHandler();
-    }
-
-    /* (non-Javadoc)
-     * @see org.xml.sax.XMLReader#getFeature(java.lang.String)
-     */
-    public boolean getFeature(final String uri) throws SAXNotRecognizedException, SAXNotSupportedException {
-        return this.reader.getFeature(uri);
-    }
-
-    /* (non-Javadoc)
-     * @see org.xml.sax.XMLReader#getProperty(java.lang.String)
-     */
-    public Object getProperty(final String uri) throws SAXNotRecognizedException, SAXNotSupportedException {
-        return this.reader.getProperty(uri);
-    }
-
-    /* (non-Javadoc)
-     * @see org.xml.sax.XMLReader#setDTDHandler(org.xml.sax.DTDHandler)
-     */
-    public void setDTDHandler(final DTDHandler dtdHandler) {
-        this.reader.setDTDHandler(dtdHandler);
-    }
-
-    /* (non-Javadoc)
-     * @see org.xml.sax.XMLReader#setEntityResolver(org.xml.sax.EntityResolver)
-     */
-    public void setEntityResolver(final EntityResolver entityResolver) {
-        this.reader.setEntityResolver(entityResolver);
-    }
-
-    /* (non-Javadoc)
-     * @see org.xml.sax.XMLReader#setErrorHandler(org.xml.sax.ErrorHandler)
-     */
-    public void setErrorHandler(final ErrorHandler errorHandler) {
-        this.reader.setErrorHandler(errorHandler);
-    }
-
-    /* (non-Javadoc)
-     * @see org.xml.sax.XMLReader#setFeature(java.lang.String, boolean)
-     */
-    public void setFeature(final String uri, final boolean value) throws SAXNotRecognizedException, SAXNotSupportedException {
-        this.reader.setFeature(uri, value);
-    }
-
-    /* (non-Javadoc)
-     * @see org.xml.sax.XMLReader#setProperty(java.lang.String, java.lang.Object)
-     */
-    public void setProperty(final String uri, final Object value) throws SAXNotRecognizedException, SAXNotSupportedException {
-        reader.setProperty(uri, value);
-    }
-
-    // ContentHandler interface
-    //-------------------------------------------------------------------------                    
-    public void startDocument() throws SAXException {
-        parent = null;
-    }
-
-    public void endDocument() throws SAXException {
-        stack.clear();
-    }
-
-    public void startElement(String namespaceURI, String localName, String qName, Attributes list)
-            throws SAXException {
-        addTextToNode();
-
-        Object nodeName = getElementName(namespaceURI, localName, qName);
-
-        int size = list.getLength();
-        Map<Object, String> attributes = new LinkedHashMap<Object, String>(size);
-        for (int i = 0; i < size; i++) {
-            Object attributeName = getElementName(list.getURI(i), list.getLocalName(i), list.getQName(i));
-            String value = list.getValue(i);
-            attributes.put(attributeName, value);
-        }
-        parent = createNode(parent, nodeName, attributes);
-        stack.add(parent);
-    }
-
-    public void endElement(String namespaceURI, String localName, String qName) throws SAXException {
-        addTextToNode();
-
-        if (!stack.isEmpty()) {
-            stack.remove(stack.size() - 1);
-            if (!stack.isEmpty()) {
-                parent = stack.get(stack.size() - 1);
-            }
-        }
-    }
-
-    public void characters(char buffer[], int start, int length) throws SAXException {
-        bodyText.append(buffer, start, length);
-    }
-
-    public void startPrefixMapping(String prefix, String namespaceURI) throws SAXException {
-    }
-
-    public void endPrefixMapping(String prefix) throws SAXException {
-    }
-
-    public void ignorableWhitespace(char buffer[], int start, int len) throws SAXException {
-        if (keepIgnorableWhitespace) characters(buffer, start, len);
-    }
-
-    public void processingInstruction(String target, String data) throws SAXException {
-    }
-
-    public Locator getDocumentLocator() {
-        return locator;
-    }
-
-    public void setDocumentLocator(Locator locator) {
-        this.locator = locator;
-    }
-
-    public void skippedEntity(String name) throws SAXException {
-    }
-
-    // Implementation methods
-    //-------------------------------------------------------------------------
-    protected XMLReader getXMLReader() {
-        reader.setContentHandler(this);
-        return reader;
-    }
-
-    protected void addTextToNode() {
-        if (parent == null) {
-            // TODO store this on root node? reset bodyText?
-            return;
-        }
-        String text = bodyText.toString();
-        if (!trimWhitespace && keepIgnorableWhitespace) {
-            parent.children().add(text);
-        } else if (!trimWhitespace && text.trim().length() > 0) {
-            parent.children().add(text);
-        } else if (text.trim().length() > 0) {
-            parent.children().add(text.trim());
-        }
-        bodyText = new StringBuilder();
-    }
-
-    /**
-     * Creates a new node with the given parent, name, and attributes. The
-     * default implementation returns an instance of
-     * <code>groovy.util.Node</code>.
-     *
-     * @param parent     the parent node, or null if the node being created is the
-     *                   root node
-     * @param name       an Object representing the name of the node (typically
-     *                   an instance of {@link QName})
-     * @param attributes a Map of attribute names to attribute values
-     * @return a new Node instance representing the current node
-     */
-    protected Node createNode(Node parent, Object name, Map attributes) {
-        return new Node(parent, name, attributes);
-    }
-
-    /**
-     * Return a name given the namespaceURI, localName and qName.
-     *
-     * @param namespaceURI the namespace URI
-     * @param localName    the local name
-     * @param qName        the qualified name
-     * @return the newly created representation of the name
-     */
-    protected Object getElementName(String namespaceURI, String localName, String qName) {
-        String name = localName;
-        String prefix = "";
-        if ((name == null) || (name.length() < 1)) {
-            name = qName;
-        }
-        if (namespaceURI == null || namespaceURI.length() <= 0) {
-            return name;
-        }
-        if (qName != null && qName.length() > 0 && namespaceAware) {
-            int index = qName.lastIndexOf(":");
-            if (index > 0) {
-                prefix = qName.substring(0, index);
-            }
-        }
-        return new QName(namespaceURI, name, prefix);
-    }
-}
diff --git a/subprojects/groovy-xml/src/main/java/groovy/util/XmlSlurper.java b/subprojects/groovy-xml/src/main/java/groovy/util/XmlSlurper.java
deleted file mode 100644
index 90e6bb3..0000000
--- a/subprojects/groovy-xml/src/main/java/groovy/util/XmlSlurper.java
+++ /dev/null
@@ -1,467 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package groovy.util;
-
-import groovy.util.slurpersupport.GPathResult;
-import groovy.util.slurpersupport.NamespaceAwareHashMap;
-import groovy.util.slurpersupport.Node;
-import groovy.util.slurpersupport.NodeChild;
-import groovy.xml.FactorySupport;
-import groovy.xml.QName;
-import org.xml.sax.Attributes;
-import org.xml.sax.DTDHandler;
-import org.xml.sax.EntityResolver;
-import org.xml.sax.ErrorHandler;
-import org.xml.sax.InputSource;
-import org.xml.sax.SAXException;
-import org.xml.sax.SAXNotRecognizedException;
-import org.xml.sax.SAXNotSupportedException;
-import org.xml.sax.XMLReader;
-import org.xml.sax.helpers.DefaultHandler;
-
-import javax.xml.XMLConstants;
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.parsers.SAXParser;
-import javax.xml.parsers.SAXParserFactory;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.Reader;
-import java.io.StringReader;
-import java.net.URL;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Stack;
-
-/**
- * Parse XML into a document tree that may be traversed similar to XPath
- * expressions.  For example:
- * <pre class="groovyTestCase">
- * def rootNode = new XmlSlurper().parseText(
- *    '&lt;root&gt;&lt;one a1="uno!"/&gt;&lt;two&gt;Some text!&lt;/two&gt;&lt;/root&gt;' )
- *
- * assert rootNode.name() == 'root'
- * assert rootNode.one[0].@a1 == 'uno!'
- * assert rootNode.two.text() == 'Some text!'
- * rootNode.children().each { assert it.name() in ['one','two'] }
- * </pre>
- * <p>
- * Note that in some cases, a 'selector' expression may not resolve to a
- * single node.  For example:
- * <pre class="groovyTestCase">
- * def rootNode = new XmlSlurper().parseText(
- *    '''&lt;root&gt;
- *         &lt;a&gt;one!&lt;/a&gt;
- *         &lt;a&gt;two!&lt;/a&gt;
- *       &lt;/root&gt;''' )
- *
- * assert rootNode.a.size() == 2
- * rootNode.a.each { assert it.text() in ['one!','two!'] }
- * </pre>
- *
- * @see GPathResult
- * @deprecated use {@link groovy.xml.XmlSlurper}
- */
-@Deprecated
-public class XmlSlurper extends DefaultHandler {
-    private final XMLReader reader;
-    private Node currentNode = null;
-    private final Stack<Node> stack = new Stack<Node>();
-    private final StringBuilder charBuffer = new StringBuilder();
-    private final Map<String, String> namespaceTagHints = new HashMap<String, String>();
-    private boolean keepIgnorableWhitespace = false;
-    private boolean namespaceAware = false;
-
-    /**
-     * Creates a non-validating and namespace-aware <code>XmlSlurper</code> which does not allow DOCTYPE declarations in documents.
-     *
-     * @throws ParserConfigurationException if no parser which satisfies the requested configuration can be created.
-     * @throws SAXException for SAX errors.
-     */
-    public XmlSlurper() throws ParserConfigurationException, SAXException {
-        this(false, true);
-    }
-    
-    /**
-     * Creates a <code>XmlSlurper</code> which does not allow DOCTYPE declarations in documents.
-     * 
-     * @param validating <code>true</code> if the parser should validate documents as they are parsed; false otherwise.
-     * @param namespaceAware <code>true</code> if the parser should provide support for XML namespaces; <code>false</code> otherwise.
-     *
-     * @throws ParserConfigurationException if no parser which satisfies the requested configuration can be created.
-     * @throws SAXException for SAX errors.
-     */
-    public XmlSlurper(final boolean validating, final boolean namespaceAware) throws ParserConfigurationException, SAXException {
-        this(validating, namespaceAware, false);
-    }
-
-    /**
-     * Creates a <code>XmlSlurper</code>.
-     * 
-     * @param validating <code>true</code> if the parser should validate documents as they are parsed; false otherwise.
-     * @param namespaceAware <code>true</code> if the parser should provide support for XML namespaces; <code>false</code> otherwise.
-     * @param allowDocTypeDeclaration <code>true</code> if the parser should provide support for DOCTYPE declarations; <code>false</code> otherwise.
-     *
-     * @throws ParserConfigurationException if no parser which satisfies the requested configuration can be created.
-     * @throws SAXException for SAX errors.
-     */
-    public XmlSlurper(final boolean validating, final boolean namespaceAware, boolean allowDocTypeDeclaration) throws ParserConfigurationException, SAXException {
-        SAXParserFactory factory = FactorySupport.createSaxParserFactory();
-        factory.setNamespaceAware(namespaceAware);
-        this.namespaceAware = namespaceAware;
-        factory.setValidating(validating);
-        setQuietly(factory, XMLConstants.FEATURE_SECURE_PROCESSING, true);
-        setQuietly(factory, "http://apache.org/xml/features/disallow-doctype-decl", !allowDocTypeDeclaration);
-        reader = factory.newSAXParser().getXMLReader();
-    }
-
-    public XmlSlurper(final XMLReader reader) {
-        this.reader = reader;
-    }
-
-    public XmlSlurper(final SAXParser parser) throws SAXException {
-        this(parser.getXMLReader());
-    }
-    
-    private static void setQuietly(SAXParserFactory factory, String feature, boolean value) {
-        try {
-            factory.setFeature(feature, value);
-        }
-        catch (ParserConfigurationException | SAXNotSupportedException | SAXNotRecognizedException ignored) { }
-    }
-
-    /**
-     * @deprecated use setKeepIgnorableWhitespace
-     * @param keepWhitespace If true then whitespace before elements is kept.
-     *                       The default is to discard the whitespace.
-     */
-    @Deprecated
-    public void setKeepWhitespace(boolean keepWhitespace) {
-        setKeepIgnorableWhitespace(keepWhitespace);
-    }
-
-    /**
-     * @param keepIgnorableWhitespace If true then ignorable whitespace (i.e. whitespace before elements) is kept.
-     *                       The default is to discard the whitespace.
-     */
-    public void setKeepIgnorableWhitespace(boolean keepIgnorableWhitespace) {
-        this.keepIgnorableWhitespace = keepIgnorableWhitespace;
-    }
-
-    /**
-     * @return true if ignorable whitespace is kept
-     */
-    public boolean isKeepIgnorableWhitespace() {
-        return keepIgnorableWhitespace;
-    }
-
-    /**
-     * @return The GPathResult instance created by consuming a stream of SAX events
-     *         Note if one of the parse methods has been called then this returns null
-     *         Note if this is called more than once all calls after the first will return null
-     */
-    public GPathResult getDocument() {
-        try {
-            // xml namespace is always defined
-            if (namespaceAware) {
-                namespaceTagHints.put("xml", "http://www.w3.org/XML/1998/namespace");
-            }
-            return new NodeChild(currentNode, null, namespaceTagHints);
-        } finally {
-            currentNode = null;
-        }
-    }
-
-    /**
-     * Parse the content of the specified input source into a GPathResult object
-     *
-     * @param input the InputSource to parse
-     * @return An object which supports GPath expressions
-     * @throws SAXException Any SAX exception, possibly wrapping another exception.
-     * @throws IOException An IO exception from the parser, possibly from a byte stream
-     *         or character stream supplied by the application.
-     */
-    public GPathResult parse(final InputSource input) throws IOException, SAXException {
-        reader.setContentHandler(this);
-        reader.parse(input);
-        return getDocument();
-    }
-
-    /**
-     * Parses the content of the given file as XML turning it into a GPathResult object
-     *
-     * @param file the File to parse
-     * @return An object which supports GPath expressions
-     * @throws SAXException Any SAX exception, possibly wrapping another exception.
-     * @throws IOException An IO exception from the parser, possibly from a byte stream
-     *         or character stream supplied by the application.
-     */
-    public GPathResult parse(final File file) throws IOException, SAXException {
-        final FileInputStream fis = new FileInputStream(file);
-        final InputSource input = new InputSource(fis);
-        input.setSystemId("file://" + file.getAbsolutePath());
-        try {
-            return parse(input);
-        } finally {
-            fis.close();
-        }
-    }
-
-    /**
-     * Parse the content of the specified input stream into an GPathResult Object.
-     * Note that using this method will not provide the parser with any URI
-     * for which to find DTDs etc. It is up to you to close the InputStream
-     * after parsing is complete (if required).
-     *
-     * @param input the InputStream to parse
-     * @return An object which supports GPath expressions
-     * @throws SAXException Any SAX exception, possibly wrapping another exception.
-     * @throws IOException An IO exception from the parser, possibly from a byte stream
-     *         or character stream supplied by the application.
-     */
-    public GPathResult parse(final InputStream input) throws IOException, SAXException {
-        return parse(new InputSource(input));
-    }
-
-    /**
-     * Parse the content of the specified reader into a GPathResult Object.
-     * Note that using this method will not provide the parser with any URI
-     * for which to find DTDs etc. It is up to you to close the Reader
-     * after parsing is complete (if required).
-     *
-     * @param in the Reader to parse
-     * @return An object which supports GPath expressions
-     * @throws SAXException Any SAX exception, possibly wrapping another exception.
-     * @throws IOException An IO exception from the parser, possibly from a byte stream
-     *         or character stream supplied by the application.
-     */
-    public GPathResult parse(final Reader in) throws IOException, SAXException {
-        return parse(new InputSource(in));
-    }
-
-    /**
-     * Parse the content of the specified URI into a GPathResult Object
-     *
-     * @param uri a String containing the URI to parse
-     * @return An object which supports GPath expressions
-     * @throws SAXException Any SAX exception, possibly wrapping another exception.
-     * @throws IOException An IO exception from the parser, possibly from a byte stream
-     *         or character stream supplied by the application.
-     */
-    public GPathResult parse(final String uri) throws IOException, SAXException {
-        return parse(new InputSource(uri));
-    }
-
-    /**
-     * A helper method to parse the given text as XML
-     *
-     * @param text a String containing XML to parse
-     * @return An object which supports GPath expressions
-     * @throws SAXException Any SAX exception, possibly wrapping another exception.
-     * @throws IOException An IO exception from the parser, possibly from a byte stream
-     *         or character stream supplied by the application.
-     */
-    public GPathResult parseText(final String text) throws IOException, SAXException {
-        return parse(new StringReader(text));
-    }
-
-    // Delegated XMLReader methods
-    //------------------------------------------------------------------------
-
-    /* (non-Javadoc)
-    * @see org.xml.sax.XMLReader#getDTDHandler()
-    */
-    public DTDHandler getDTDHandler() {
-        return reader.getDTDHandler();
-    }
-
-    /* (non-Javadoc)
-    * @see org.xml.sax.XMLReader#getEntityResolver()
-    */
-    public EntityResolver getEntityResolver() {
-        return reader.getEntityResolver();
-    }
-
-    /* (non-Javadoc)
-    * @see org.xml.sax.XMLReader#getErrorHandler()
-    */
-    public ErrorHandler getErrorHandler() {
-        return reader.getErrorHandler();
-    }
-
-    /* (non-Javadoc)
-    * @see org.xml.sax.XMLReader#getFeature(java.lang.String)
-    */
-    public boolean getFeature(final String uri) throws SAXNotRecognizedException, SAXNotSupportedException {
-        return reader.getFeature(uri);
-    }
-
-    /* (non-Javadoc)
-    * @see org.xml.sax.XMLReader#getProperty(java.lang.String)
-    */
-    public Object getProperty(final String uri) throws SAXNotRecognizedException, SAXNotSupportedException {
-        return reader.getProperty(uri);
-    }
-
-    /* (non-Javadoc)
-    * @see org.xml.sax.XMLReader#setDTDHandler(org.xml.sax.DTDHandler)
-    */
-    public void setDTDHandler(final DTDHandler dtdHandler) {
-        reader.setDTDHandler(dtdHandler);
-    }
-
-    /* (non-Javadoc)
-    * @see org.xml.sax.XMLReader#setEntityResolver(org.xml.sax.EntityResolver)
-    */
-    public void setEntityResolver(final EntityResolver entityResolver) {
-        reader.setEntityResolver(entityResolver);
-    }
-
-    /**
-     * Resolves entities against using the supplied URL as the base for relative URLs
-     *
-     * @param base The URL used to resolve relative URLs
-     */
-    public void setEntityBaseUrl(final URL base) {
-        reader.setEntityResolver(new EntityResolver() {
-            public InputSource resolveEntity(final String publicId, final String systemId) throws IOException {
-                return new InputSource(new URL(base, systemId).openStream());
-            }
-        });
-    }
-
-    /* (non-Javadoc)
-    * @see org.xml.sax.XMLReader#setErrorHandler(org.xml.sax.ErrorHandler)
-    */
-    public void setErrorHandler(final ErrorHandler errorHandler) {
-        reader.setErrorHandler(errorHandler);
-    }
-
-    /* (non-Javadoc)
-    * @see org.xml.sax.XMLReader#setFeature(java.lang.String, boolean)
-    */
-    public void setFeature(final String uri, final boolean value) throws SAXNotRecognizedException, SAXNotSupportedException {
-        reader.setFeature(uri, value);
-    }
-
-    /* (non-Javadoc)
-    * @see org.xml.sax.XMLReader#setProperty(java.lang.String, java.lang.Object)
-    */
-    public void setProperty(final String uri, final Object value) throws SAXNotRecognizedException, SAXNotSupportedException {
-        reader.setProperty(uri, value);
-    }
-
-    // ContentHandler interface
-    //-------------------------------------------------------------------------
-
-    /* (non-Javadoc)
-    * @see org.xml.sax.ContentHandler#startDocument()
-    */
-    public void startDocument() throws SAXException {
-        currentNode = null;
-        charBuffer.setLength(0);
-    }
-
-    /* (non-Javadoc)
-    * @see org.xml.sax.helpers.DefaultHandler#startPrefixMapping(java.lang.String, java.lang.String)
-    */
-    public void startPrefixMapping(final String tag, final String uri) throws SAXException {
-        if (namespaceAware) namespaceTagHints.put(tag, uri);
-    }
-
-    /* (non-Javadoc)
-    * @see org.xml.sax.ContentHandler#startElement(java.lang.String, java.lang.String, java.lang.String, org.xml.sax.Attributes)
-    */
-    public void startElement(final String namespaceURI, final String localName, final String qName, final Attributes atts) throws SAXException {
-        addCdata();
-
-        final Map<String, String> attributes = new NamespaceAwareHashMap();
-        final Map<String, String> attributeNamespaces = new HashMap<String, String>();
-
-        for (int i = atts.getLength() - 1; i != -1; i--) {
-            if (atts.getURI(i).length() == 0) {
-                attributes.put(atts.getQName(i), atts.getValue(i));
-            } else {
-                String key = new QName(atts.getURI(i), atts.getLocalName(i)).toString();
-                attributes.put(key, atts.getValue(i));
-                attributeNamespaces.put(key, atts.getURI(i));
-            }
-        }
-
-        final Node newElement;
-
-        if (namespaceURI.length() == 0) {
-            newElement = new Node(currentNode, qName, attributes, attributeNamespaces, namespaceURI);
-        } else {
-            newElement = new Node(currentNode, localName, attributes, attributeNamespaces, namespaceURI);
-        }
-
-        if (currentNode != null) {
-            currentNode.addChild(newElement);
-        }
-
-        stack.push(currentNode);
-        currentNode = newElement;
-    }
-
-    public void ignorableWhitespace(char buffer[], int start, int len) throws SAXException {
-        if (keepIgnorableWhitespace) characters(buffer, start, len);
-    }
-
-    /* (non-Javadoc)
-    * @see org.xml.sax.ContentHandler#characters(char[], int, int)
-    */
-    public void characters(final char[] ch, final int start, final int length) throws SAXException {
-        charBuffer.append(ch, start, length);
-    }
-
-    /* (non-Javadoc)
-    * @see org.xml.sax.ContentHandler#endElement(java.lang.String, java.lang.String, java.lang.String)
-    */
-    public void endElement(final String namespaceURI, final String localName, final String qName) throws SAXException {
-        addCdata();
-        Node oldCurrentNode = stack.pop();
-        if (oldCurrentNode != null) {
-            currentNode = oldCurrentNode;
-        }
-    }
-
-    /* (non-Javadoc)
-    * @see org.xml.sax.ContentHandler#endDocument()
-    */
-    public void endDocument() throws SAXException {
-    }
-
-    private void addCdata() {
-        if (charBuffer.length() != 0) {
-            //
-            // This element is preceded by CDATA if keepIgnorableWhitespace is false (the default setting) and
-            // it's not whitespace add it to the body
-            // Note that, according to the XML spec, we should preserve the CDATA if it's all whitespace
-            // but for the sort of work I'm doing ignoring the whitespace is preferable
-            //
-            final String cdata = charBuffer.toString();
-            charBuffer.setLength(0);
-            if (keepIgnorableWhitespace || cdata.trim().length() != 0) {
-                currentNode.addChild(cdata);
-            }
-        }
-    }
-}
diff --git a/subprojects/groovy-xml/src/main/java/groovy/util/XmlUtil.java b/subprojects/groovy-xml/src/main/java/groovy/util/XmlUtil.java
deleted file mode 100644
index 0443ca0..0000000
--- a/subprojects/groovy-xml/src/main/java/groovy/util/XmlUtil.java
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package groovy.util;
-
-import groovy.lang.Writable;
-import groovy.util.slurpersupport.GPathResult;
-import org.codehaus.groovy.runtime.InvokerHelper;
-
-import java.io.OutputStream;
-import java.io.Writer;
-
-/**
- * Used for pretty printing XML content and other XML related utilities.
- */
-@Deprecated
-public class XmlUtil {
-    /**
-     * Return a pretty version of the GPathResult.
-     *
-     * @param node a GPathResult to serialize to a String
-     * @return the pretty String representation of the GPathResult
-     */
-    @Deprecated
-    public static String serialize(GPathResult node) {
-        return groovy.xml.XmlUtil.serialize(asString(node));
-    }
-
-    /**
-     * Write a pretty version of the GPathResult to the OutputStream.
-     *
-     * @param node a GPathResult to serialize
-     * @param os   the OutputStream to write to
-     */
-    @Deprecated
-    public static void serialize(GPathResult node, OutputStream os) {
-        groovy.xml.XmlUtil.serialize(asString(node), os);
-    }
-
-    /**
-     * Write a pretty version of the GPathResult to the Writer.
-     *
-     * @param node a GPathResult to serialize
-     * @param w    the Writer to write to
-     */
-    @Deprecated
-    public static void serialize(GPathResult node, Writer w) {
-        groovy.xml.XmlUtil.serialize(asString(node), w);
-    }
-
-    private static String asString(GPathResult node) {
-        // little bit of hackery to avoid Groovy dependency in this file
-        try {
-            Object builder = Class.forName("groovy.xml.StreamingMarkupBuilder").getDeclaredConstructor().newInstance();
-            InvokerHelper.setProperty(builder, "encoding", "UTF-8");
-            Writable w = (Writable) InvokerHelper.invokeMethod(builder, "bindNode", node);
-            return "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + w.toString();
-        } catch (Exception e) {
-            return "Couldn't convert node to string because: " + e.getMessage();
-        }
-    }
-
-}
\ No newline at end of file
diff --git a/subprojects/groovy-xml/src/main/java/groovy/util/slurpersupport/Attribute.java b/subprojects/groovy-xml/src/main/java/groovy/util/slurpersupport/Attribute.java
deleted file mode 100644
index d8a3e20..0000000
--- a/subprojects/groovy-xml/src/main/java/groovy/util/slurpersupport/Attribute.java
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package groovy.util.slurpersupport;
-
-import groovy.lang.Closure;
-import groovy.lang.GroovyObject;
-import groovy.lang.GroovyRuntimeException;
-import org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation;
-
-import java.io.IOException;
-import java.io.Writer;
-import java.util.Iterator;
-import java.util.Map;
-
-/**
- * Lazy evaluated representation of a node attribute.
- */
-@Deprecated
-public class Attribute extends GPathResult {
-    private final String value;
-
-    /**
-     * @param name              of the attribute
-     * @param value             of the attribute
-     * @param parent            the GPathResult prior to the application of the expression creating this GPathResult
-     * @param namespacePrefix   the namespace prefix if any
-     * @param namespaceTagHints the known tag to namespace mappings
-     */
-    public Attribute(final String name, final String value, final GPathResult parent, final String namespacePrefix, final Map<String, String> namespaceTagHints) {
-        super(parent, name, namespacePrefix, namespaceTagHints);
-        this.value = value;
-    }
-
-    public String name() {
-        // this name contains @name we need to return name
-        return this.name.substring(1);
-    }
-
-    /**
-     * Returns the size of this Attribute, which is always <code>1</code>.
-     * @return <code>1</code>
-     */
-    public int size() {
-        return 1;
-    }
-
-    /**
-     * Returns the value of this Attribute.
-     * @return the value of this Attribute
-     */
-    public String text() {
-        return this.value;
-    }
-
-    /**
-     * Returns the URI of the namespace of this Attribute.
-     * @return the namespace of this Attribute
-     */
-    public String namespaceURI() {
-        if (namespacePrefix == null || namespacePrefix.isEmpty()) return "";
-        String uri = namespaceTagHints.get(namespacePrefix);
-        return uri == null ? "" : uri;
-    }
-
-    /**
-     * Throws a <code>GroovyRuntimeException</code>, because this method is not implemented yet.
-     */
-    public GPathResult parents() {
-        // TODO Auto-generated method stub
-        throw new GroovyRuntimeException("parents() not implemented yet");
-    }
-
-    /**
-     * Throws a <code>GroovyRuntimeException</code>, because an attribute can have no children.
-     */
-    public Iterator childNodes() {
-        throw new GroovyRuntimeException("can't call childNodes() in the attribute " + this.name);
-    }
-
-    public Iterator iterator() {
-        return nodeIterator();
-    }
-
-    public GPathResult find(final Closure closure) {
-        if (DefaultTypeTransformation.castToBoolean(closure.call(new Object[]{this}))) {
-            return this;
-        } else {
-            return new NoChildren(this, "", this.namespaceTagHints);
-        }
-    }
-
-    public GPathResult findAll(final Closure closure) {
-        return find(closure);
-    }
-
-    public Iterator nodeIterator() {
-        return createIterator(this);
-    }
-
-    public Writer writeTo(final Writer out) throws IOException {
-        out.write(this.value);
-        return out;
-    }
-
-    public void build(final GroovyObject builder) {
-        builder.getProperty("mkp");
-        builder.invokeMethod("yield", new Object[]{this.value});
-    }
-
-    /**
-     * NOP, because an attribute does not have any Node to replace.
-     */
-    protected void replaceNode(final Closure newValue) {
-    }
-
-    /**
-     * NOP, because an attribute does not have a Body.
-     */
-    protected void replaceBody(final Object newValue) {
-    }
-
-    /**
-     * NOP, because an node can not be appended to an attribute.
-     */
-    protected void appendNode(final Object newValue) {
-    }
-}
diff --git a/subprojects/groovy-xml/src/main/java/groovy/util/slurpersupport/Attributes.java b/subprojects/groovy-xml/src/main/java/groovy/util/slurpersupport/Attributes.java
deleted file mode 100644
index 8664dff..0000000
--- a/subprojects/groovy-xml/src/main/java/groovy/util/slurpersupport/Attributes.java
+++ /dev/null
@@ -1,140 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package groovy.util.slurpersupport;
-
-import groovy.lang.Closure;
-import groovy.lang.GroovyObject;
-import groovy.lang.GroovyRuntimeException;
-import groovy.xml.QName;
-
-import java.io.IOException;
-import java.io.Writer;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Lazy evaluated representation of a node's attributes.
- */
-@Deprecated
-public class Attributes extends NodeChildren {
-    final String attributeName;
-
-    /**
-     * @param parent the GPathResult prior to the application of the expression creating this GPathResult
-     * @param name if the GPathResult corresponds to something with a name, e.g. a node
-     * @param namespacePrefix the namespace prefix if any
-     * @param namespaceTagHints the known tag to namespace mappings
-     */
-    public Attributes(final GPathResult parent, final String name, final String namespacePrefix, final Map<String, String> namespaceTagHints) {
-        super(parent, name, namespacePrefix, namespaceTagHints);
-        this.attributeName = this.name.substring(1);
-    }
-
-    /**
-     * @param parent the GPathResult prior to the application of the expression creating this GPathResult
-     * @param name if the GPathResult corresponds to something with a name, e.g. a node
-     * @param namespaceTagHints the known tag to namespace mappings
-     */
-    public Attributes(final GPathResult parent, final String name, final Map<String, String> namespaceTagHints) {
-        this(parent, name, "*", namespaceTagHints);
-    }
-
-    public String name() {
-        // this name contains @name we need to return name
-        return this.name.substring(1);
-    }
-
-    /**
-     * Throws a <code>GroovyRuntimeException</code>, because attributes can have no children.
-     */
-    public Iterator childNodes() {
-        throw new GroovyRuntimeException("Can't get the child nodes on a GPath expression selecting attributes: ...." + this.parent.name() + "." + name() + ".childNodes()");
-    }
-
-    public Iterator iterator() {
-        return new NodeIterator(nodeIterator()) {
-            protected Object getNextNode(final Iterator iter) {
-                while (iter.hasNext()) {
-                    final Object next = iter.next();
-                    if (next instanceof Attribute) {
-                        return next;
-                    } else {
-                        String attributeKey = Attributes.this.attributeName;
-                        if (Attributes.this.namespacePrefix != null &&
-                                !"*".equals(Attributes.this.namespacePrefix) &&
-                                Attributes.this.namespacePrefix.length() > 0) {
-                            attributeKey = new QName(Attributes.this.lookupNamespace(Attributes.this.namespacePrefix), Attributes.this.attributeName).toString();
-                        }
-                        final String value = (String) ((Node) next).attributes().get(attributeKey);
-                        if (value != null) {
-                            return new Attribute(Attributes.this.name,
-                                    value,
-                                    new NodeChild((Node) next, Attributes.this.parent.parent, "", Attributes.this.namespaceTagHints),
-                                    (Attributes.this.namespacePrefix == null || "*".equals(Attributes.this.namespacePrefix)) ? "" : Attributes.this.namespacePrefix,
-                                    Attributes.this.namespaceTagHints);
-                        }
-                    }
-                }
-                return null;
-            }
-        };
-    }
-
-    public Iterator nodeIterator() {
-        return this.parent.nodeIterator();
-    }
-
-    public GPathResult parents() {
-        return super.parents();
-    }
-
-    public String text() {
-        final StringBuilder sb = new StringBuilder();
-        final Iterator iter = iterator();
-        while (iter.hasNext()) {
-            sb.append(iter.next());
-        }
-        return sb.toString();
-    }
-
-    public List list() {
-        final Iterator iter = iterator();
-        final List result = new ArrayList();
-        while (iter.hasNext()) {
-            result.add(iter.next());
-        }
-        return result;
-    }
-
-    public GPathResult findAll(final Closure closure) {
-        return new FilteredAttributes(this, closure, this.namespaceTagHints);
-    }
-
-    public Writer writeTo(final Writer out) throws IOException {
-        out.write(text());
-        return out;
-    }
-
-    public void build(final GroovyObject builder) {
-        builder.getProperty("mkp");
-        builder.invokeMethod("yield", new Object[]{text()});
-    }
-}
diff --git a/subprojects/groovy-xml/src/main/java/groovy/util/slurpersupport/FilteredAttributes.java b/subprojects/groovy-xml/src/main/java/groovy/util/slurpersupport/FilteredAttributes.java
deleted file mode 100644
index 56fbb1a..0000000
--- a/subprojects/groovy-xml/src/main/java/groovy/util/slurpersupport/FilteredAttributes.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package groovy.util.slurpersupport;
-
-import groovy.lang.Closure;
-import org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation;
-
-import java.util.Iterator;
-import java.util.Map;
-
-/**
- * Lazy evaluated representation of a node's attributes filtered by a Closure.
- */
-@Deprecated
-public class FilteredAttributes extends Attributes {
-    private final Closure closure;
-
-    /**
-     * @param parent the GPathResult prior to the application of the expression creating this GPathResult
-     * @param closure the Closure to use to filter the attributes
-     * @param namespaceTagHints the known tag to namespace mappings
-     */
-    public FilteredAttributes(final GPathResult parent, final Closure closure, final Map<String, String> namespaceTagHints) {
-        super(parent, parent.name, namespaceTagHints);
-        this.closure = closure;
-    }
-
-    public Iterator nodeIterator() {
-        return new NodeIterator(this.parent.iterator())
-        {
-            protected Object getNextNode(final Iterator iter) {
-                while (iter.hasNext()) {
-                    final Object node = iter.next();
-                    if (DefaultTypeTransformation.castToBoolean(FilteredAttributes.this.closure.call(new Object[]{node}))) {
-                        return node;
-                    }
-                }
-                return null;
-            }
-        };
-    }
-
-}
diff --git a/subprojects/groovy-xml/src/main/java/groovy/util/slurpersupport/FilteredNodeChildren.java b/subprojects/groovy-xml/src/main/java/groovy/util/slurpersupport/FilteredNodeChildren.java
deleted file mode 100644
index 0459427..0000000
--- a/subprojects/groovy-xml/src/main/java/groovy/util/slurpersupport/FilteredNodeChildren.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package groovy.util.slurpersupport;
-
-import groovy.lang.Closure;
-import org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation;
-
-import java.util.Iterator;
-import java.util.Map;
-
-/**
- * Lazy evaluated representation of child nodes filtered by a Closure.
- */
-@Deprecated
-public class FilteredNodeChildren extends NodeChildren {
-    private final Closure closure;
-
-    /**
-     * @param parent the GPathResult prior to the application of the expression creating this GPathResult
-     * @param closure the Closure to use to filter the nodes
-     * @param namespaceTagHints the known tag to namespace mappings
-     */
-    public FilteredNodeChildren(final GPathResult parent, final Closure closure, final Map<String, String> namespaceTagHints) {
-        super(parent, parent.name, namespaceTagHints);
-        this.closure = closure;
-    }
-
-    public GPathResult pop() {
-        return this.parent.parent;
-    }
-
-    public Iterator nodeIterator() {
-        return new NodeIterator(this.parent.nodeIterator()) {
-            protected Object getNextNode(final Iterator iter) {
-                while (iter.hasNext()) {
-                    final Object node = iter.next();
-                    if (closureYieldsTrueForNode(new NodeChild((Node) node, FilteredNodeChildren.this.parent, FilteredNodeChildren.this.namespaceTagHints))) {
-                        return node;
-                    }
-                }
-                return null;
-            }
-        };
-    }
-
-    private boolean closureYieldsTrueForNode(Object childNode) {
-        return DefaultTypeTransformation.castToBoolean(FilteredNodeChildren.this.closure.call(new Object[]{childNode}));
-    }
-}
diff --git a/subprojects/groovy-xml/src/main/java/groovy/util/slurpersupport/GPathResult.java b/subprojects/groovy-xml/src/main/java/groovy/util/slurpersupport/GPathResult.java
deleted file mode 100644
index e4f8438..0000000
--- a/subprojects/groovy-xml/src/main/java/groovy/util/slurpersupport/GPathResult.java
+++ /dev/null
@@ -1,711 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package groovy.util.slurpersupport;
-
-import groovy.lang.Buildable;
-import groovy.lang.Closure;
-import groovy.lang.DelegatingMetaClass;
-import groovy.lang.GString;
-import groovy.lang.GroovyObject;
-import groovy.lang.GroovyObjectSupport;
-import groovy.lang.IntRange;
-import groovy.lang.MetaClass;
-import groovy.lang.Writable;
-import org.codehaus.groovy.runtime.DefaultGroovyMethods;
-import org.codehaus.groovy.runtime.ResourceGroovyMethods;
-import org.codehaus.groovy.runtime.StringGroovyMethods;
-
-import java.math.BigDecimal;
-import java.math.BigInteger;
-import java.net.MalformedURLException;
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Stack;
-
-/**
- * Base class for representing lazy evaluated GPath expressions.
- */
-@Deprecated
-public abstract class GPathResult extends GroovyObjectSupport implements Writable, Buildable, Iterable {
-    protected final GPathResult parent;
-    protected final String name;
-    protected final String namespacePrefix;
-    protected final Map namespaceMap = new HashMap();
-    protected final Map<String, String> namespaceTagHints;
-
-    /**
-     * Creates a new GPathResult named <code>name</code> with the parent <code>parent</code>,
-     * the namespacePrefix <code>namespacePrefix</code> and the namespaceTagHints specified in
-     * the <code>namespaceTagHints</code> Map.
-     *
-     * @param parent the GPathResult prior to the application of the expression creating this GPathResult
-     * @param name if the GPathResult corresponds to something with a name, e.g. a node
-     * @param namespacePrefix the namespace prefix if any
-     * @param namespaceTagHints the known tag to namespace mappings
-     */
-    public GPathResult(final GPathResult parent, final String name, final String namespacePrefix, final Map<String, String> namespaceTagHints) {
-        if (parent == null) {
-            // we are the top of the tree
-            this.parent = this;
-            this.namespaceMap.put("xml", "http://www.w3.org/XML/1998/namespace");  // The XML namespace is always defined
-        } else {
-            this.parent = parent;
-            this.namespaceMap.putAll(parent.namespaceMap);
-        }
-        this.name = name;
-        this.namespacePrefix = namespacePrefix;
-        this.namespaceTagHints = namespaceTagHints;
-
-        setMetaClass(getMetaClass()); // wrap the standard MetaClass with the delegate
-    }
-
-    /**
-     * Replaces the MetaClass of this GPathResult.
-     *
-     * @param metaClass the new MetaClass
-     */
-    @Override
-    public void setMetaClass(final MetaClass metaClass) {
-        final MetaClass newMetaClass = new DelegatingMetaClass(metaClass) {
-            @Override
-            public Object getAttribute(final Object object, final String attribute) {
-                return GPathResult.this.getProperty("@" + attribute);
-            }
-
-            @Override
-            public void setAttribute(final Object object, final String attribute, final Object newValue) {
-                GPathResult.this.setProperty("@" + attribute, newValue);
-            }
-        };
-        super.setMetaClass(newMetaClass);
-    }
-
-    /**
-     * Returns the specified Property of this GPathResult.
-     * <p>
-     * Realizes the follow shortcuts:
-     * <ul>
-     * <li><code>'..'</code> for <code>parent()</code>
-     * <li><code>'*'</code> for <code>children()</code>
-     * <li><code>'**'</code> for <code>depthFirst()</code>
-     * <li><code>'@'</code> for attribute access
-     * </ul>
-     * @param property the Property to fetch
-     */
-    public Object getProperty(final String property) {
-        if ("..".equals(property)) {
-            return parent();
-        } else if ("*".equals(property)) {
-            return children();
-        } else if ("**".equals(property)) {
-            return depthFirst();
-        } else if (property.startsWith("@")) {
-            if (property.contains(":") && !this.namespaceTagHints.isEmpty()) {
-                final int i = property.indexOf(":");
-                return new Attributes(this, "@" + property.substring(i + 1), property.substring(1, i), this.namespaceTagHints);
-            } else {
-                return new Attributes(this, property, this.namespaceTagHints);
-            }
-        } else {
-            if (property.contains(":") && !this.namespaceTagHints.isEmpty()) {
-                final int i = property.indexOf(":");
-                return new NodeChildren(this, property.substring(i + 1), property.substring(0, i), this.namespaceTagHints);
-            } else {
-                return new NodeChildren(this, property, this.namespaceTagHints);
-            }
-        }
-    }
-
-    /**
-     * Replaces the specified property of this GPathResult with a new value.
-     *
-     * @param property the property of this GPathResult to replace
-     * @param newValue the new value of the property
-     */
-    public void setProperty(final String property, final Object newValue) {
-        if (property.startsWith("@")) {
-            if (newValue instanceof String || newValue instanceof GString) {
-                final Iterator iter = iterator();
-
-                while (iter.hasNext()) {
-                    final NodeChild child = (NodeChild) iter.next();
-
-                    child.attributes().put(property.substring(1), newValue);
-                }
-            }
-        } else {
-            final GPathResult result = new NodeChildren(this, property, this.namespaceTagHints);
-
-            if (newValue instanceof Map) {
-                for (Object o : ((Map) newValue).entrySet()) {
-                    final Map.Entry entry = (Map.Entry) o;
-                    result.setProperty("@" + entry.getKey(), entry.getValue());
-                }
-            } else {
-                if (newValue instanceof Closure) {
-                    result.replaceNode((Closure) newValue);
-                } else {
-                    result.replaceBody(newValue);
-                }
-            }
-        }
-    }
-
-    /**
-     * Overloads the left shift operator to provide an easy way to
-     * lazily append Objects to this GPathResult.
-     *
-     * @param newValue the Object to append
-     * @return <code>this</code>
-     */
-    public Object leftShift(final Object newValue) {
-        appendNode(newValue);
-        return this;
-    }
-
-    /**
-     * Lazily adds the specified Object to this GPathResult.
-     *
-     * @param newValue the Object to add
-     * @return <code>this</code>
-     */
-    public Object plus(final Object newValue) {
-        this.replaceNode(new Closure(this) {
-            public void doCall(Object[] args) {
-                final GroovyObject delegate = (GroovyObject) getDelegate();
-                delegate.getProperty("mkp");
-                delegate.invokeMethod("yield", args);
-                delegate.getProperty("mkp");
-                delegate.invokeMethod("yield", new Object[]{newValue});
-            }
-        });
-
-        return this;
-    }
-
-    protected abstract void replaceNode(Closure newValue);
-
-    protected abstract void replaceBody(Object newValue);
-    
-    protected abstract void appendNode(Object newValue);
-
-    /**
-     * Returns the name of this GPathResult.
-     *
-     * @return the name of this GPathResult
-     */
-    public String name() {
-        return this.name;
-    }
-
-    /**
-     * Returns the parent of this GPathResult. If this GPathResult has no parent the GPathResult itself is returned.
-     * This is no navigation in the XML tree. It is backtracking on the GPath expression chain.
-     * It is the behavior of parent() prior to 2.2.0.
-     * Backtracking on '..' actually goes down one level in the tree again.
-     * find() and findAll() are popped along with the level they have been applied to.
-     *
-     * @return the parent or <code>this</code>
-     */
-    public GPathResult pop() {
-        return this.parent;
-    }
-
-    /**
-     * Returns as GPathResult with the parent nodes of the current GPathResult
-     *
-     * @return the parents GPathResult or <code>this</code> for the root
-     */
-    public GPathResult parent() {
-        return new NodeParents(this, this.namespaceTagHints);
-    }
-
-    /**
-     * Returns the children of this GPathResult as a GPathResult object.
-     *
-     * @return the children of this GPathResult
-     */
-    public GPathResult children() {
-        return new NodeChildren(this, this.namespaceTagHints);
-    }
-
-    /**
-     * Returns the namespace mapped to the specified prefix.
-     *
-     * @param prefix the prefix lookup
-     * @return the namespace of the prefix
-     */
-    public String lookupNamespace(final String prefix) {
-        Object namespace = namespaceMap.get(prefix);
-        if (namespace != null) {
-            return namespace.toString();
-        }
-        return this.namespaceTagHints.isEmpty() ? prefix : this.namespaceTagHints.get(prefix);
-    }
-
-    /**
-     * Returns the text of this GPathResult.
-     *
-     * @return the GPathResult, converted to a <code>String</code>
-     */
-    public String toString() {
-        return text();
-    }
-
-    /**
-     * Converts the text of this GPathResult to a Integer object.
-     *
-     * @return the GPathResult, converted to a <code>Integer</code>
-     */
-    public Integer toInteger() {
-        if(textIsEmptyOrNull()){
-            return null;
-        }
-        return StringGroovyMethods.toInteger((CharSequence)text());
-    }
-
-    /**
-     * Converts the text of this GPathResult to a Long object.
-     *
-     * @return the GPathResult, converted to a <code>Long</code>
-     */
-    public Long toLong() {
-        if(textIsEmptyOrNull()){
-            return null;
-        }
-        return StringGroovyMethods.toLong((CharSequence)text());
-    }
-
-    /**
-     * Converts the text of this GPathResult to a Float object.
-     *
-     * @return the GPathResult, converted to a <code>Float</code>
-     */
-    public Float toFloat() {
-        if(textIsEmptyOrNull()){
-            return null;
-        }
-        return StringGroovyMethods.toFloat((CharSequence)text());
-    }
-
-    /**
-     * Converts the text of this GPathResult to a Double object.
-     *
-     * @return the GPathResult, converted to a <code>Double</code>
-     */
-    public Double toDouble() {
-        if(textIsEmptyOrNull()){
-            return null;
-        }
-        return StringGroovyMethods.toDouble((CharSequence)text());
-    }
-
-    /**
-     * Converts the text of this GPathResult to a BigDecimal object.
-     *
-     * @return the GPathResult, converted to a <code>BigDecimal</code>
-     */
-    public BigDecimal toBigDecimal() {
-        if(textIsEmptyOrNull()){
-            return null;
-        }
-        return StringGroovyMethods.toBigDecimal((CharSequence)text());
-    }
-
-    /**
-     * Converts the text of this GPathResult to a BigInteger object.
-     *
-     * @return the GPathResult, converted to a <code>BigInteger</code>
-     */
-    public BigInteger toBigInteger() {
-        if(textIsEmptyOrNull()){
-            return null;
-        }
-        return StringGroovyMethods.toBigInteger((CharSequence)text());
-    }
-
-    private boolean textIsEmptyOrNull() {
-        String t = text();
-        return null == t || 0 == t.length();
-    }
-
-    /**
-     * Converts the text of this GPathResult to a URL object.
-     *
-     * @return the GPathResult, converted to a <code>URL</code>
-     */
-    public URL toURL() throws MalformedURLException {
-        return ResourceGroovyMethods.toURL((CharSequence)text());
-    }
-
-    /**
-     * Converts the text of this GPathResult to a URI object.
-     *
-     * @return the GPathResult, converted to a <code>URI</code>
-     */
-    public URI toURI() throws URISyntaxException {
-        return ResourceGroovyMethods.toURI((CharSequence)text());
-    }
-
-    /**
-     * Converts the text of this GPathResult to a Boolean object.
-     *
-     * @return the GPathResult, converted to a <code>Boolean</code>
-     */
-    public Boolean toBoolean() {
-        return StringGroovyMethods.toBoolean(text());
-    }
-
-    /**
-     * Adds the specified map of prefix to namespace mappings to this GPathResult.
-     * Already existing prefixes are overwritten.
-     *
-     * @param newNamespaceMapping the mappings to add
-     * @return <code>this</code>
-     */
-    public GPathResult declareNamespace(final Map newNamespaceMapping) {
-        this.namespaceMap.putAll(newNamespaceMapping);
-        return this;
-    }
-
-    @Override
-    public int hashCode() {
-        return text().hashCode();
-    }
-
-    @Override
-    public boolean equals(Object obj) {
-        if (null == obj) {
-            return false;
-        }
-
-        return text().equals(obj.toString());
-    }
-
-    /**
-     * Supports the subscript operator for a GPathResult.
-     * <pre class="groovyTestCase">
-     * import groovy.util.slurpersupport.*
-     * def text = """
-     * &lt;characterList&gt;
-     *   &lt;character/&gt;
-     *   &lt;character&gt;
-     *     &lt;name&gt;Gromit&lt;/name&gt;
-     *   &lt;/character&gt;
-     * &lt;/characterList&gt;"""
-     *
-     * GPathResult characterList = new XmlSlurper().parseText(text)
-     *
-     * assert characterList.character[1].name == 'Gromit'
-     * </pre>
-     * @param index an index
-     * @return the value at the given index
-     */
-    public Object getAt(final int index) {
-        if (index < 0) {
-            // calculate whole list in this case
-            // recommend avoiding -ve's as this is obviously not as efficient
-            List list = list();
-            int adjustedIndex = index + list.size();
-            if (adjustedIndex >= 0 && adjustedIndex < list.size())
-                return list.get(adjustedIndex);
-        } else {
-            final Iterator iter = iterator();
-            int count = 0;
-
-            while (iter.hasNext()) {
-                if (count++ == index) {
-                    return iter.next();
-                } else {
-                    iter.next();
-                }
-            }
-        }
-
-        return new NoChildren(this, this.name, this.namespaceTagHints);
-    }
-
-    /**
-     * Supports the range subscript operator for a GPathResult.
-     * <pre class="groovyTestCase">
-     * import groovy.util.slurpersupport.*
-     * def text = """
-     * &lt;characterList&gt;
-     *   &lt;character&gt;Wallace&lt;/character&gt;
-     *   &lt;character&gt;Gromit&lt;/character&gt;
-     *   &lt;character&gt;Shaun&lt;/character&gt;
-     * &lt;/characterList&gt;"""
-     *
-     * GPathResult characterList = new XmlSlurper().parseText(text)
-     *
-     * assert characterList.character[1..2].join(',') == 'Gromit,Shaun'
-     * </pre>
-     * @param range a Range indicating the items to get
-     * @return a new list based on range borders
-     */
-    public Object getAt(final IntRange range) {
-        return DefaultGroovyMethods.getAt(list(), range);
-    }
-
-    /**
-     * A helper method to allow GPathResults to work with subscript operators
-     * @param index an index
-     * @param newValue the value to put at the given index
-     */
-    public void putAt(final int index, final Object newValue) {
-        final GPathResult result = (GPathResult)getAt(index);
-        if (newValue instanceof Closure) {
-            result.replaceNode((Closure)newValue);
-        } else {
-            result.replaceBody(newValue);
-        }
-    }
-
-    /**
-     * Provides an Iterator over all the nodes of this GPathResult using a depth-first traversal.
-     *
-     * @return the <code>Iterator</code> of (depth-first) ordered GPathResults
-     */
-    public Iterator depthFirst() {
-        return new Iterator() {
-            private final List list = new LinkedList();
-            private final Stack stack = new Stack();
-            private Iterator iter = iterator();
-            private GPathResult next = getNextByDepth();
-
-            public boolean hasNext() {
-                return this.next != null;
-            }
-
-            public Object next() {
-                try {
-                    return this.next;
-                } finally {
-                    this.next = getNextByDepth();
-                }
-            }
-
-            public void remove() {
-                throw new UnsupportedOperationException();
-            }
-
-            private GPathResult getNextByDepth() {
-                while (this.iter.hasNext()) {
-                    final GPathResult node = (GPathResult) this.iter.next();
-                    this.list.add(node);
-                    this.stack.push(this.iter);
-                    this.iter = node.children().iterator();
-                }
-
-                if (this.list.isEmpty()) {
-                    return null;
-                } else {
-                    GPathResult result = (GPathResult) this.list.get(0);
-                    this.list.remove(0);
-                    this.iter = (Iterator) this.stack.pop();
-                    return result;
-                }
-            }
-        };
-    }
-
-    /**
-     * Provides an Iterator over all the nodes of this GPathResult using a breadth-first traversal.
-     *
-     * @return the <code>Iterator</code> of (breadth-first) ordered GPathResults
-     */
-    public Iterator breadthFirst() {
-        return new Iterator() {
-            private final List list = new LinkedList();
-            private Iterator iter = iterator();
-            private GPathResult next = getNextByBreadth();
-
-            public boolean hasNext() {
-                return this.next != null;
-            }
-
-            public Object next() {
-                try {
-                    return this.next;
-                } finally {
-                    this.next = getNextByBreadth();
-                }
-            }
-
-            public void remove() {
-                throw new UnsupportedOperationException();
-            }
-
-            private GPathResult getNextByBreadth() {
-                List children = new ArrayList();
-                while (this.iter.hasNext() || !children.isEmpty()) {
-                    if (this.iter.hasNext()) {
-                        final GPathResult node = (GPathResult) this.iter.next();
-                        this.list.add(node);
-                        this.list.add(this.iter);
-                        children.add(node.children());
-                    } else {
-                        List nextLevel = new ArrayList();
-                        for (Object child : children) {
-                            GPathResult next = (GPathResult) child;
-                            Iterator iterator = next.iterator();
-                            while (iterator.hasNext()) {
-                                nextLevel.add(iterator.next());
-                            }
-                        }
-                        this.iter = nextLevel.iterator();
-                        children = new ArrayList();
-                    }
-                }
-                if (this.list.isEmpty()) {
-                    return null;
-                } else {
-                    GPathResult result = (GPathResult) this.list.get(0);
-                    this.list.remove(0);
-                    this.iter = (Iterator) this.list.get(0);
-                    this.list.remove(0);
-                    return result;
-                }
-            }
-        };
-    }
-
-    /**
-     * Creates a list of objects representing this GPathResult.
-     *
-     * @return a list representing of this GPathResult
-     */
-    public List list() {
-        final Iterator iter = nodeIterator();
-        final List result = new LinkedList();
-        while (iter.hasNext()) {
-            result.add(new NodeChild((Node) iter.next(), this.parent, this.namespacePrefix, this.namespaceTagHints));
-        }
-        return result;
-    }
-
-    /**
-     * Returns true if the GPathResult is empty, i.e. if, and only if, <code>size()</code> is 0.
-     *
-     * @return true if the GPathResult is empty
-     */
-    public boolean isEmpty() {
-        return size() == 0;
-    }
-
-    /**
-     * Creates a Closure representing the body of this GPathResult.
-     *
-     * @return the body of this GPathResult, converted to a <code>Closure</code>
-     */
-    public Closure getBody() {
-        return new Closure(this.parent,this) {
-            public void doCall(Object[] args) {
-                final GroovyObject delegate = (GroovyObject)getDelegate();
-                final GPathResult thisObject = (GPathResult)getThisObject();
-
-                Node node = (Node)thisObject.getAt(0);
-                List children = node.children();
-
-                for (Object child : children) {
-                    delegate.getProperty("mkp");
-                    if (child instanceof Node) {
-                        delegate.invokeMethod("yield", new Object[]{new NodeChild((Node) child, thisObject, "*", null)});
-                    } else {
-                        delegate.invokeMethod("yield", new Object[]{child});
-                    }
-                }                
-            }
-        };
-    }
-
-    /**
-     * Returns the size of this GPathResult.
-     * @return the size of this GPathResult
-     */
-    public abstract int size();
-
-    /**
-     * Returns the text of this GPathResult as a <code>String</code>.
-     * @return the text of this GPathResult
-     */
-    public abstract String text();
-
-    /**
-     * Returns the parents of this GPathResult as a <code>GPathResult</code>.
-     * Warning: The subclasses of this package do not implement this method yet.
-     * @return the parents of this GPathResult
-     */
-    public abstract GPathResult parents();
-
-    /**
-     * Returns an iterator over the child nodes of this GPathResult.
-     * @return an iterator over the child nodes of this GPathResult
-     */
-    public abstract Iterator childNodes();
-
-    public abstract Iterator iterator();
-
-    /**
-     * Returns the first child of this GPathResult matching the condition(s)
-     * specified in the passed closure.
-     * @param closure a closure to filters the children of this GPathResult
-     * @return the first child matching the closure
-     */
-    public abstract GPathResult find(Closure closure);
-
-    /**
-     * Returns the children of this GPathResult matching the condition(s)
-     * specified in the passed closure.
-     * @param closure a closure to filters the children of this GPathResult
-     * @return the children matching the closure
-     */
-    public abstract GPathResult findAll(Closure closure);
-
-    public abstract Iterator nodeIterator();
-
-    protected Iterator createIterator(final Object obj) {
-        return new Iterator() {
-            private boolean hasNext = true;
-
-            public boolean hasNext() {
-                return this.hasNext;
-            }
-
-            public Object next() {
-                try {
-                    return (this.hasNext) ? obj : null;
-                } finally {
-                    this.hasNext = false;
-                }
-            }
-
-            public void remove() {
-                throw new UnsupportedOperationException();
-            }
-        };
-    }
-}
diff --git a/subprojects/groovy-xml/src/main/java/groovy/util/slurpersupport/NamespaceAwareHashMap.java b/subprojects/groovy-xml/src/main/java/groovy/util/slurpersupport/NamespaceAwareHashMap.java
deleted file mode 100644
index 7199765..0000000
--- a/subprojects/groovy-xml/src/main/java/groovy/util/slurpersupport/NamespaceAwareHashMap.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package groovy.util.slurpersupport;
-
-import groovy.xml.QName;
-
-import java.util.HashMap;
-import java.util.Map;
-
-@Deprecated
-public class NamespaceAwareHashMap extends HashMap<String, String> {
-    public void setNamespaceTagHints(Map namespaceTagHints) {
-        this.namespaceTagHints = namespaceTagHints;
-    }
-
-    private Map namespaceTagHints = null;
-
-    public Map getNamespaceTagHints() {
-        return namespaceTagHints;
-    }
-
-    @Override
-    public String get(Object key) {
-        key = adjustForNamespaceIfNeeded(key);
-        return super.get(key);
-    }
-
-    @Override
-    public String remove(Object key) {
-        key = adjustForNamespaceIfNeeded(key).toString();
-        return super.remove(key);
-    }
-
-    @Override
-    public boolean containsKey(Object key) {
-        key = adjustForNamespaceIfNeeded(key).toString();
-        return super.containsKey(key);
-    }
-
-    @Override
-    public String put(String key, String value) {
-        key = adjustForNamespaceIfNeeded(key).toString();
-        return super.put(key, value);
-    }
-
-    @Override
-    public void putAll(Map<? extends String, ? extends String> m) {
-        for (Object o : m.entrySet())
-            if (o instanceof Map.Entry) {
-                Map.Entry<String, String> e = (Map.Entry) o;
-                put(e.getKey(), e.getValue());
-            }
-    }
-
-    private Object adjustForNamespaceIfNeeded(Object key) {
-        String keyString = key.toString();
-        if (keyString.contains("{") || namespaceTagHints == null || namespaceTagHints.isEmpty() || !keyString.contains(":")) {
-            return key;
-        }
-        final int i = keyString.indexOf(":");
-        return new QName(namespaceTagHints.get(keyString.substring(0, i)).toString(), keyString.substring(i + 1)).toString();
-    }
-}
diff --git a/subprojects/groovy-xml/src/main/java/groovy/util/slurpersupport/NoChildren.java b/subprojects/groovy-xml/src/main/java/groovy/util/slurpersupport/NoChildren.java
deleted file mode 100644
index 8f6de18..0000000
--- a/subprojects/groovy-xml/src/main/java/groovy/util/slurpersupport/NoChildren.java
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package groovy.util.slurpersupport;
-
-import groovy.lang.Closure;
-import groovy.lang.GroovyObject;
-import groovy.lang.GroovyRuntimeException;
-
-import java.io.IOException;
-import java.io.Writer;
-import java.util.Iterator;
-import java.util.Map;
-
-/**
- * Lazy evaluated representation of a GPath expression returning no children.
- *
- * As this class represents a GPath expression with no results, all methods
- * are either NOPs or return an empty result.
- */
-@Deprecated
-public class NoChildren extends GPathResult {
-
-    /**
-     * @param parent            the GPathResult prior to the application of the expression creating this GPathResult
-     * @param name              if the GPathResult corresponds to something with a name, e.g. a node
-     * @param namespaceTagHints the known tag to namespace mappings
-     */
-    public NoChildren(final GPathResult parent, final String name, final Map<String, String> namespaceTagHints) {
-        super(parent, name, "*", namespaceTagHints);
-    }
-
-    /**
-     * Returns <code>0</code>.
-     * @return <code>0</code>
-     */
-    public int size() {
-        return 0;
-    }
-
-    /**
-     * Returns an empty <code>String</code>.
-     * @return an empty <code>String</code>
-     */
-    public String text() {
-        return "";
-    }
-
-    /**
-     * Throws a <code>GroovyRuntimeException</code>, because it is not implemented yet.
-     */
-    public GPathResult parents() {
-        // TODO Auto-generated method stub
-        throw new GroovyRuntimeException("parents() not implemented yet");
-    }
-
-    /**
-     * Returns an empty <code>Iterator</code>.
-     * @return an empty <code>Iterator</code>
-     */
-    public Iterator childNodes() {
-        return iterator();
-    }
-
-    /**
-     * Returns an empty <code>Iterator</code>.
-     * @return an empty <code>Iterator</code>
-     */
-    public Iterator iterator() {
-        return new Iterator() {
-            public boolean hasNext() {
-                return false;
-            }
-
-            public Object next() {
-                return null;
-            }
-
-            public void remove() {
-                throw new UnsupportedOperationException();
-            }
-        };
-    }
-
-    /**
-     * Returns <code>this</code>.
-     * @return <code>this</code>
-     */
-    public GPathResult find(final Closure closure) {
-        return this;
-    }
-
-    /**
-     * Returns <code>this</code>.
-     * @return <code>this</code>
-     */
-    public GPathResult findAll(final Closure closure) {
-        return this;
-    }
-
-    /**
-     * Returns an empty iterator.
-     * @return an empty iterator
-     */
-    public Iterator nodeIterator() {
-        return iterator();
-    }
-
-    /**
-     * Does not write any output, just returns the writer.
-     *
-     * @return the <code>Writer</code> which was passed in
-     */
-    public Writer writeTo(final Writer out) throws IOException {
-        return out;
-    }
-
-    /**
-     * NOP
-     */
-    public void build(final GroovyObject builder) {
-    }
-
-    /**
-     * NOP
-     */
-    protected void replaceNode(final Closure newValue) {
-        // No elements match GPath expression - do nothing
-    }
-
-    /**
-     * NOP
-     */
-    protected void replaceBody(final Object newValue) {
-        // No elements match GPath expression - do nothing
-    }
-
-    /**
-     * NOP
-     */
-    protected void appendNode(final Object newValue) {
-        // TODO consider creating an element for this
-    }
-
-    /**
-     * Returns <code>false</code>.
-     * @return <code>false</code>
-     */
-    public boolean asBoolean() {
-        return false;
-    }
-}
diff --git a/subprojects/groovy-xml/src/main/java/groovy/util/slurpersupport/Node.java b/subprojects/groovy-xml/src/main/java/groovy/util/slurpersupport/Node.java
deleted file mode 100644
index 596d3bb..0000000
--- a/subprojects/groovy-xml/src/main/java/groovy/util/slurpersupport/Node.java
+++ /dev/null
@@ -1,339 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package groovy.util.slurpersupport;
-
-import groovy.lang.Buildable;
-import groovy.lang.Closure;
-import groovy.lang.GroovyObject;
-import groovy.lang.Writable;
-
-import java.io.IOException;
-import java.io.Writer;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-import java.util.Stack;
-
-/**
- * Represents a node.
- */
-@Deprecated
-public class Node implements Writable {
-    private final String name;
-    private final Map attributes;
-    private final Map attributeNamespaces;
-    private final String namespaceURI;
-    private final List children = new LinkedList();
-    private final Stack replacementNodeStack = new Stack();
-    private final Node parent;
-
-    /**
-     * @param parent the parent node
-     * @param name the name for the node
-     * @param attributes the attributes for the node
-     * @param attributeNamespaces the namespace mappings for attributes
-     * @param namespaceURI the namespace URI if any
-     */
-    public Node(final Node parent, final String name, final Map attributes, final Map attributeNamespaces, final String namespaceURI) {
-        this.name = name;
-        this.attributes = attributes;
-        this.attributeNamespaces = attributeNamespaces;
-        this.namespaceURI = namespaceURI;
-        this.parent = parent;
-    }
-
-    /**
-     * Returns the name of this Node.
-     * @return the name of this Node
-     */
-    public String name() {
-        return this.name;
-    }
-
-    /**
-     * Returns the parent of this Node.
-     * @return the parent of this Node
-     */
-    public Node parent() {
-        return this.parent;
-    }
-
-    /**
-     * Returns the URI of the namespace of this Node.
-     * @return the namespace of this Node
-     */
-    public String namespaceURI() {
-        return this.namespaceURI;
-    }
-
-    /**
-     * Returns a map of the attributes of this Node.
-     * @return a map of the attributes of this Node
-     */
-    public Map attributes() {
-        return this.attributes;
-    }
-
-    /**
-     * Returns a list of the children of this Node.
-     * @return a list of the children of this Node
-     */
-    public List children() {
-        return this.children;
-    }
-
-    /**
-     * Adds an object as a new child to this Node.
-     * @param child the object to add as a child
-     */
-    public void addChild(final Object child) {
-        this.children.add(child);
-    }
-
-    public void replaceNode(final Closure replacementClosure, final GPathResult result) {
-        this.replacementNodeStack.push(new ReplacementNode() {
-            public void build(final GroovyObject builder, final Map namespaceMap, final Map<String, String> namespaceTagHints) {
-                final Closure c = (Closure) replacementClosure.clone();
-                Node.this.replacementNodeStack.pop(); // disable the replacement whilst the closure is being executed
-                c.setDelegate(builder);
-                c.call(new Object[]{result});
-                Node.this.replacementNodeStack.push(this);
-            }
-        });
-    }
-
-    /**
-     * Replaces the current body of this Node with the passed object.
-     * @param newValue the new body
-     */
-    protected void replaceBody(final Object newValue) {
-        this.children.clear();
-        this.children.add(newValue);
-    }
-
-    protected void appendNode(final Object newValue, final GPathResult result) {
-        if (newValue instanceof Closure) {
-            this.children.add(new ReplacementNode() {
-                public void build(final GroovyObject builder, final Map namespaceMap, final Map<String, String> namespaceTagHints) {
-                    final Closure c = (Closure) ((Closure) newValue).clone();
-                    c.setDelegate(builder);
-                    c.call(new Object[]{result});
-                }
-            });
-        } else {
-            this.children.add(newValue);
-        }
-    }
-
-    /**
-     * Returns a string containing the text of the children of this Node.
-     * @return a string containing the text of the children of this Node
-     */
-    public String text() {
-        final StringBuilder sb = new StringBuilder();
-        for (Object child : this.children) {
-            if (child instanceof Node) {
-                sb.append(((Node) child).text());
-            } else {
-                sb.append(child);
-            }
-        }
-        return sb.toString();
-    }
-
-    /**
-     * Returns the list of any direct String nodes of this node.
-     *
-     * @return the list of String values from this node
-     * @since 2.3.0
-     */
-    public List<String> localText() {
-        final List<String> result = new ArrayList<String>();
-        for (Object child : this.children) {
-            if (!(child instanceof Node)) {
-                result.add(child.toString());
-            }
-        }
-        return result;
-    }
-
-    /**
-     * Returns an iterator over the child nodes of this Node.
-     * @return an iterator over the child nodes of this Node
-     */
-    public Iterator childNodes() {
-        return new Iterator() {
-            private final Iterator iter = Node.this.children.iterator();
-            private Object nextElementNodes = getNextElementNodes();
-
-            public boolean hasNext() {
-                return this.nextElementNodes != null;
-            }
-
-            public Object next() {
-                try {
-                    return this.nextElementNodes;
-                } finally {
-                    this.nextElementNodes = getNextElementNodes();
-                }
-            }
-
-            public void remove() {
-                throw new UnsupportedOperationException();
-            }
-
-            private Object getNextElementNodes() {
-                while (iter.hasNext()) {
-                    final Object node = iter.next();
-                    if (node instanceof Node) {
-                        return node;
-                    }
-                }
-                return null;
-            }
-        };
-    }
-
-    public Writer writeTo(final Writer out) throws IOException {
-        if (this.replacementNodeStack.empty()) {
-            for (Object child : this.children) {
-                if (child instanceof Writable) {
-                    ((Writable) child).writeTo(out);
-                } else {
-                    out.write(child.toString());
-                }
-            }
-            return out;
-        } else {
-            return ((Writable) this.replacementNodeStack.peek()).writeTo(out);
-        }
-    }
-
-    public void build(final GroovyObject builder, final Map namespaceMap, final Map<String, String> namespaceTagHints) {
-        if (this.replacementNodeStack.empty()) {
-            final Closure rest = new Closure(null) {
-                public Object doCall(final Object o) {
-                    buildChildren(builder, namespaceMap, namespaceTagHints);
-                    return null;
-                }
-            };
-
-            if (this.namespaceURI.length() == 0 && this.attributeNamespaces.isEmpty()) {
-                builder.invokeMethod(this.name, new Object[]{this.attributes, rest});
-            } else {
-                final List newTags = new LinkedList();
-                builder.getProperty("mkp");
-                final List namespaces = (List) builder.invokeMethod("getNamespaces", new Object[]{});
-
-                final Map current = (Map) namespaces.get(0);
-                final Map pending = (Map) namespaces.get(1);
-
-                if (this.attributeNamespaces.isEmpty()) {
-                    builder.getProperty(getTagFor(this.namespaceURI, current, pending, namespaceMap, namespaceTagHints, newTags, builder));
-                    builder.invokeMethod(this.name, new Object[]{this.attributes, rest});
-                } else {
-                    final Map attributesWithNamespaces = new HashMap(this.attributes);
-                    for (Object key : this.attributes.keySet()) {
-                        final Object attributeNamespaceURI = this.attributeNamespaces.get(key);
-                        if (attributeNamespaceURI != null) {
-                            attributesWithNamespaces.put(getTagFor(attributeNamespaceURI, current, pending, namespaceMap, namespaceTagHints, newTags, builder) +
-                                    "$" + key, attributesWithNamespaces.remove(key));
-                        }
-                    }
-                    builder.getProperty(getTagFor(this.namespaceURI, current, pending, namespaceMap, namespaceTagHints, newTags, builder));
-                    builder.invokeMethod(this.name, new Object[]{attributesWithNamespaces, rest});
-                }
-
-                // remove the new tags we had to define for this element
-                if (!newTags.isEmpty()) {
-                    final Iterator iter = newTags.iterator();
-                    do {
-                        pending.remove(iter.next());
-                    } while (iter.hasNext());
-                }
-            }
-        } else {
-            ((ReplacementNode) this.replacementNodeStack.peek()).build(builder, namespaceMap, namespaceTagHints);
-        }
-    }
-
-    private static String getTagFor(final Object namespaceURI, final Map current,
-                                    final Map pending, final Map local, final Map tagHints,
-                                    final List newTags, final GroovyObject builder) {
-        String tag = findNamespaceTag(pending, namespaceURI); // look in the namespaces whose declaration has already been emitted
-        if (tag == null) {
-            tag = findNamespaceTag(current, namespaceURI);  // look in the namespaces who will be declared at the next element
-
-            if (tag == null) {
-                // we have to declare the namespace - choose a tag
-                tag = findNamespaceTag(local, namespaceURI);  // If the namespace has been declared in the GPath expression use that tag
-
-                if (tag == null || tag.length() == 0) {
-                    tag = findNamespaceTag(tagHints, namespaceURI);  // If the namespace has been used in the parse document use that tag
-                }
-
-                if (tag == null || tag.length() == 0) { // otherwise make up a new tag and check it has not been used before
-                    int suffix = 0;
-                    do {
-                        final String possibleTag = "tag" + suffix++;
-
-                        if (!pending.containsKey(possibleTag) && !current.containsKey(possibleTag) && !local.containsKey(possibleTag)) {
-                            tag = possibleTag;
-                        }
-                    } while (tag == null);
-                }
-
-                final Map newNamespace = new HashMap();
-                newNamespace.put(tag, namespaceURI);
-                builder.getProperty("mkp");
-                builder.invokeMethod("declareNamespace", new Object[]{newNamespace});
-                newTags.add(tag);
-            }
-        }
-        return tag;
-    }
-
-    private static String findNamespaceTag(final Map tagMap, final Object namespaceURI) {
-        if (tagMap.containsValue(namespaceURI)) {
-            for (Object o : tagMap.entrySet()) {
-                final Map.Entry entry = (Map.Entry) o;
-                if (namespaceURI.equals(entry.getValue())) {
-                    return (String) entry.getKey();
-                }
-            }
-        }
-        return null;
-    }
-
-    private void buildChildren(final GroovyObject builder, final Map namespaceMap, final Map<String, String> namespaceTagHints) {
-        for (Object child : this.children) {
-            if (child instanceof Node) {
-                ((Node) child).build(builder, namespaceMap, namespaceTagHints);
-            } else if (child instanceof Buildable) {
-                ((Buildable) child).build(builder);
-            } else {
-                builder.getProperty("mkp");
-                builder.invokeMethod("yield", new Object[]{child});
-            }
-        }
-    }
-}
diff --git a/subprojects/groovy-xml/src/main/java/groovy/util/slurpersupport/NodeChild.java b/subprojects/groovy-xml/src/main/java/groovy/util/slurpersupport/NodeChild.java
deleted file mode 100644
index 9d97d0e..0000000
--- a/subprojects/groovy-xml/src/main/java/groovy/util/slurpersupport/NodeChild.java
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package groovy.util.slurpersupport;
-
-import groovy.lang.Closure;
-import groovy.lang.GroovyObject;
-import groovy.lang.GroovyRuntimeException;
-import org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation;
-
-import java.io.IOException;
-import java.io.Writer;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-
-/**
- * Lazy evaluated representation of a child node.
- */
-@Deprecated
-public class NodeChild extends GPathResult {
-    private final Node node;
-
-    /**
-     * @param node a node
-     * @param parent the GPathResult prior to the application of the expression creating this GPathResult
-     * @param namespacePrefix the namespace prefix if any
-     * @param namespaceTagHints the known tag to namespace mappings
-     */
-    public NodeChild(final Node node, final GPathResult parent, final String namespacePrefix, final Map<String, String> namespaceTagHints) {
-        super(parent, node.name(), namespacePrefix, namespaceTagHints);
-        this.node = node;
-        ((NamespaceAwareHashMap)this.node.attributes()).setNamespaceTagHints(namespaceTagHints);
-    }
-
-    /**
-     * @param node a node
-     * @param parent the GPathResult prior to the application of the expression creating this GPathResult
-     * @param namespaceTagHints the known tag to namespace mappings
-     */
-    public NodeChild(final Node node, final GPathResult parent, final Map<String, String> namespaceTagHints) {
-        this(node, parent, "*", namespaceTagHints);
-    }
-    
-    public GPathResult parent() {
-        if (node.parent() != null)
-            return new NodeChild(node.parent(), this, namespaceTagHints);
-        else
-            return this;
-    }
-
-    public int size() {
-        return 1;
-    }
-
-    public String text() {
-        return this.node.text();
-    }
-
-    /**
-     * Returns the list of any direct String nodes of this NodeChild.
-     *
-     * @return the list of String values from this node
-     * @since 2.3.0
-     */
-    public List<String> localText() {
-        return this.node.localText();
-    }
-
-    /**
-     * Returns the URI of the namespace of this NodeChild.
-     * @return the namespace of this NodeChild
-     */
-    public String namespaceURI() {
-        return this.node.namespaceURI();
-    }
-
-    /**
-     * Throws a <code>GroovyRuntimeException</code>, because this method is not implemented yet.
-     */
-    public GPathResult parents() {
-        // TODO Auto-generated method stub
-        throw new GroovyRuntimeException("parents() not implemented yet");
-    }
-
-    public Iterator iterator() {
-        return createIterator(this);
-    }
-
-    public Iterator nodeIterator() {
-        return createIterator(this.node);
-    }
-
-    public Object getAt(final int index) {
-        if (index == 0) {
-            return node;
-        } else {
-            throw new ArrayIndexOutOfBoundsException(index);
-        }
-    }
-
-    /**
-     * Returns a map containing all attributes of the Node of this NodeChild.
-     * @return a map containing all attributes
-     */
-    public Map attributes() {
-        return this.node.attributes();
-    }
-
-    public Iterator childNodes() {
-        return this.node.childNodes();
-    }
-
-    public GPathResult find(final Closure closure) {
-        if (DefaultTypeTransformation.castToBoolean(closure.call(new Object[]{this.node}))) {
-            return this;
-        } else {
-            return new NoChildren(this, "", this.namespaceTagHints);
-        }
-    }
-
-    public GPathResult findAll(final Closure closure) {
-        return find(closure);
-    }
-
-    public void build(final GroovyObject builder) {
-        this.node.build(builder, this.namespaceMap, this.namespaceTagHints);
-    }
-
-    public Writer writeTo(final Writer out) throws IOException {
-        return this.node.writeTo(out);
-    }
-
-    protected void replaceNode(final Closure newValue) {
-        this.node.replaceNode(newValue, this);
-    }
-
-    protected void replaceBody(final Object newValue) {
-        this.node.replaceBody(newValue);
-    }
-
-    protected void appendNode(final Object newValue) {
-        this.node.appendNode(newValue, this);
-    }
-}
diff --git a/subprojects/groovy-xml/src/main/java/groovy/util/slurpersupport/NodeChildren.java b/subprojects/groovy-xml/src/main/java/groovy/util/slurpersupport/NodeChildren.java
deleted file mode 100644
index 8f1532c..0000000
--- a/subprojects/groovy-xml/src/main/java/groovy/util/slurpersupport/NodeChildren.java
+++ /dev/null
@@ -1,235 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package groovy.util.slurpersupport;
-
-import groovy.lang.Buildable;
-import groovy.lang.Closure;
-import groovy.lang.GroovyObject;
-import groovy.lang.GroovyRuntimeException;
-import org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation;
-
-import java.io.IOException;
-import java.io.Writer;
-import java.util.Iterator;
-import java.util.Map;
-
-/**
- * Lazy evaluated representation of child nodes.
- */
-@Deprecated
-public class NodeChildren extends GPathResult {
-    private int size = -1;
-
-    /**
-     * @param parent the GPathResult prior to the application of the expression creating this GPathResult
-     * @param name if the GPathResult corresponds to something with a name, e.g. a node
-     * @param namespacePrefix the namespace prefix if any
-     * @param namespaceTagHints the known tag to namespace mappings
-     */
-    public NodeChildren(final GPathResult parent, final String name, final String namespacePrefix, final Map<String, String> namespaceTagHints) {
-        super(parent, name, namespacePrefix, namespaceTagHints);
-    }
-
-    /**
-     * @param parent the GPathResult prior to the application of the expression creating this GPathResult
-     * @param name if the GPathResult corresponds to something with a name, e.g. a node
-     * @param namespaceTagHints the known tag to namespace mappings
-     */
-    public NodeChildren(final GPathResult parent, final String name, final Map<String, String> namespaceTagHints) {
-        this(parent, name, "*", namespaceTagHints);
-    }
-
-    /**
-     * @param parent the GPathResult prior to the application of the expression creating this GPathResult
-     * @param namespaceTagHints the known tag to namespace mappings
-     */
-    public NodeChildren(final GPathResult parent, final Map<String, String> namespaceTagHints) {
-        this(parent, "*", namespaceTagHints);
-    }
-
-    public Iterator childNodes() {
-        return new Iterator() {
-            private final Iterator iter = nodeIterator();
-            private Iterator childIter = nextChildIter();
-
-            public boolean hasNext() {
-                return childIter != null;
-            }
-
-            public Object next() {
-                while (childIter != null) {
-                    try {
-                        if (childIter.hasNext()) {
-                            return childIter.next();
-                        }
-                    } finally {
-                        if (!childIter.hasNext()) {
-                            childIter = nextChildIter();
-                        }
-                    }
-                }
-                return null;
-            }
-
-            public void remove() {
-                throw new UnsupportedOperationException();
-            }
-
-            private Iterator nextChildIter() {
-                while (iter.hasNext()) {
-                    final Node node = (Node)iter.next();
-                    final Iterator result = node.childNodes();
-                    if (result.hasNext()) return result;
-                }
-                return null;
-            }
-        };
-    }
-
-    public Iterator iterator() {
-        return new Iterator() {
-            final Iterator iter = nodeIterator();
-
-            public boolean hasNext() {
-                return iter.hasNext();
-            }
-
-            public Object next() {
-                return new NodeChild((Node) iter.next(), pop(), namespaceTagHints);
-            }
-
-            public void remove() {
-                throw new UnsupportedOperationException();
-            }
-        };
-    }
-
-    public Iterator nodeIterator() {
-        if ("*".equals(name)) {
-            return parent.childNodes();
-        } else {
-            return new NodeIterator(parent.childNodes()) {
-                protected Object getNextNode(Iterator iter) {
-                    while (iter.hasNext()) {
-                        final Node node = (Node) iter.next();
-                        if (name.equals(node.name())) {
-                            if ("*".equals(namespacePrefix) ||
-                                    ("".equals(namespacePrefix) && "".equals(node.namespaceURI())) ||
-                                    node.namespaceURI().equals(namespaceMap.get(namespacePrefix))) {
-                                return node;
-                            }
-                        }
-                    }
-                    return null;
-                }
-            };
-        }
-    }
-
-    /**
-     * Throws a <code>GroovyRuntimeException</code>, because it is not implemented yet.
-     */
-    public GPathResult parents() {
-        // TODO Auto-generated method stub
-        throw new GroovyRuntimeException("parents() not implemented yet");
-    }
-
-    public synchronized int size() {
-        if (this.size == -1) {
-            final Iterator iter = iterator();
-            this.size = 0;
-            while (iter.hasNext()) {
-                iter.next();
-                this.size++;
-            }
-        }
-        return this.size;
-    }
-
-    public String text() {
-        final StringBuilder buf = new StringBuilder();
-        final Iterator iter = nodeIterator();
-        while (iter.hasNext()) {
-            buf.append(((Node) iter.next()).text());
-        }
-        return buf.toString();
-    }
-
-    public GPathResult find(final Closure closure) {
-        final Iterator iter = iterator();
-        while (iter.hasNext()) {
-            final Object node = iter.next();
-            if (DefaultTypeTransformation.castToBoolean(closure.call(new Object[]{node}))) {
-                return (GPathResult) node;
-            }
-        }
-        return new NoChildren(this, this.name, namespaceTagHints);
-    }
-
-    public GPathResult findAll(final Closure closure) {
-        return new FilteredNodeChildren(this, closure, namespaceTagHints);
-    }
-
-    public void build(final GroovyObject builder) {
-        final Iterator iter = nodeIterator();
-        while (iter.hasNext()) {
-            final Object next = iter.next();
-            if (next instanceof Buildable) {
-                ((Buildable) next).build(builder);
-            } else {
-                ((Node) next).build(builder, namespaceMap, namespaceTagHints);
-            }
-        }
-    }
-
-    /* (non-Javadoc)
-    * @see groovy.lang.Writable#writeTo(java.io.Writer)
-    */
-    public Writer writeTo(final Writer out) throws IOException {
-        final Iterator iter = nodeIterator();
-        while (iter.hasNext()) {
-            ((Node) iter.next()).writeTo(out);
-        }
-        return out;
-    }
-
-    protected void replaceNode(final Closure newValue) {
-        final Iterator iter = iterator();
-        while (iter.hasNext()) {
-            final NodeChild result = (NodeChild) iter.next();
-            result.replaceNode(newValue);
-        }
-    }
-
-    protected void replaceBody(final Object newValue) {
-        final Iterator iter = iterator();
-        while (iter.hasNext()) {
-            final NodeChild result = (NodeChild) iter.next();
-            result.replaceBody(newValue);
-        }
-    }
-
-    protected void appendNode(final Object newValue) {
-        final Iterator iter = iterator();
-        while (iter.hasNext()) {
-            final NodeChild result = (NodeChild) iter.next();
-            result.appendNode(newValue);
-        }
-    }
-}
diff --git a/subprojects/groovy-xml/src/main/java/groovy/util/slurpersupport/NodeIterator.java b/subprojects/groovy-xml/src/main/java/groovy/util/slurpersupport/NodeIterator.java
deleted file mode 100644
index 0f092d7..0000000
--- a/subprojects/groovy-xml/src/main/java/groovy/util/slurpersupport/NodeIterator.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package groovy.util.slurpersupport;
-
-import java.util.Iterator;
-
-/**
- * Helper class for iterating through nodes.
- */
-@Deprecated
-public abstract class NodeIterator implements Iterator {
-    private static final Object DELAYED_INIT = new Object();
-    private final Iterator iter;
-    private Object nextNode;
-
-    public NodeIterator(final Iterator iter) {
-        this.iter = iter;
-        this.nextNode = DELAYED_INIT;
-    }
-
-    private void initNextNode(){
-        if (nextNode==DELAYED_INIT) nextNode = getNextNode(iter);
-    }
-
-    public boolean hasNext() {
-        initNextNode();
-        return this.nextNode != null;
-    }
-
-    public Object next() {
-        initNextNode();
-        try {
-            return this.nextNode;
-        } finally {
-            this.nextNode = getNextNode(this.iter);
-        }
-    }
-
-    public void remove() {
-        throw new UnsupportedOperationException();
-    }
-
-    protected abstract Object getNextNode(final Iterator iter);
-}
diff --git a/subprojects/groovy-xml/src/main/java/groovy/util/slurpersupport/NodeParents.java b/subprojects/groovy-xml/src/main/java/groovy/util/slurpersupport/NodeParents.java
deleted file mode 100644
index dcf7913..0000000
--- a/subprojects/groovy-xml/src/main/java/groovy/util/slurpersupport/NodeParents.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package groovy.util.slurpersupport;
-
-import java.util.Iterator;
-import java.util.Map;
-
-/**
-* Lazy evaluated representation of parent nodes without duplicates
-*/
-@Deprecated
-public class NodeParents extends NodeChildren {
-    
-    /**
-     * @param parent the GPathResult prior to the application of the expression creating this GPathResult
-     * @param namespaceTagHints the known tag to namespace mappings
-     */
-    public NodeParents(final GPathResult parent, final Map<String, String> namespaceTagHints) {
-        super(parent, parent.parent.name, namespaceTagHints);
-    }
-
-    public Iterator nodeIterator() {
-        return new NodeIterator(this.parent.nodeIterator()) {
-            
-            private Node prev = null;
-            
-            protected Object getNextNode(final Iterator iter) {
-                while (iter.hasNext()) {
-                    final Node node = ((Node)iter.next()).parent();
-                    if (node != null && node != prev) {
-                        prev = node;
-                        return node;
-                    }
-                }
-                return null;
-            }
-        };
-    }
-    
-}
diff --git a/subprojects/groovy-xml/src/main/java/groovy/util/slurpersupport/ReplacementNode.java b/subprojects/groovy-xml/src/main/java/groovy/util/slurpersupport/ReplacementNode.java
deleted file mode 100644
index 39654f7..0000000
--- a/subprojects/groovy-xml/src/main/java/groovy/util/slurpersupport/ReplacementNode.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package groovy.util.slurpersupport;
-
-import groovy.lang.Buildable;
-import groovy.lang.GroovyObject;
-import groovy.lang.Writable;
-
-import java.io.IOException;
-import java.io.Writer;
-import java.util.Map;
-
-/**
- * Helper base class used for lazy updates.
- */
-@Deprecated
-public abstract class ReplacementNode implements Buildable, Writable {
-    public abstract void build(GroovyObject builder, Map namespaceMap, Map<String, String> namespaceTagHints);
-    
-    public void build(final GroovyObject builder) {
-        build(builder, null, null);
-    }
-
-    /**
-     * NOP
-     * @return the Writer that was passed
-     */
-    public Writer writeTo(final Writer out) throws IOException {
-        return out;
-    }
-}
diff --git a/subprojects/groovy-xml/src/main/java/groovy/util/slurpersupport/package.html b/subprojects/groovy-xml/src/main/java/groovy/util/slurpersupport/package.html
deleted file mode 100644
index a47137e..0000000
--- a/subprojects/groovy-xml/src/main/java/groovy/util/slurpersupport/package.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<!--
-
-     Licensed to the Apache Software Foundation (ASF) under one
-     or more contributor license agreements.  See the NOTICE file
-     distributed with this work for additional information
-     regarding copyright ownership.  The ASF licenses this file
-     to you under the Apache License, Version 2.0 (the
-     "License"); you may not use this file except in compliance
-     with the License.  You may obtain a copy of the License at
-
-       http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing,
-     software distributed under the License is distributed on an
-     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-     KIND, either express or implied.  See the License for the
-     specific language governing permissions and limitations
-     under the License.
-
--->
-<html>
-  <head>
-    <title>package groovy.util.slurpersupport.*</title>
-  </head>
-  <body>
-    <p>Helper classes for XmlSlurper.</p>
-  </body>
-</html>
diff --git a/subprojects/groovy-xml/src/main/java/org/codehaus/groovy/runtime/XmlGroovyMethods.java b/subprojects/groovy-xml/src/main/java/org/codehaus/groovy/runtime/XmlGroovyMethods.java
deleted file mode 100644
index 3d899da..0000000
--- a/subprojects/groovy-xml/src/main/java/org/codehaus/groovy/runtime/XmlGroovyMethods.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.runtime;
-
-import groovy.xml.XmlUtil;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-
-import java.util.Iterator;
-
-/**
- * This class defines all the new XML-related groovy methods which enhance
- * the normal JDK XML classes when inside the Groovy environment.
- * Static methods are used with the first parameter the destination class.
- */
-@Deprecated
-public class XmlGroovyMethods {
-
-    /**
-     * Makes NodeList iterable by returning a read-only Iterator which traverses
-     * over each Node.
-     *
-     * @param nodeList a NodeList
-     * @return an Iterator for a NodeList
-     * @since 1.0
-     */
-    @Deprecated
-    public static Iterator<Node> iterator(final NodeList nodeList) {
-        return new Iterator<Node>() {
-            private int current /* = 0 */;
-
-            public boolean hasNext() {
-                return current < nodeList.getLength();
-            }
-
-            public Node next() {
-                return nodeList.item(current++);
-            }
-
-            public void remove() {
-                throw new UnsupportedOperationException("Cannot remove() from a NodeList iterator");
-            }
-        };
-    }
-
-    /**
-     * Transforms the element to its text equivalent.
-     * (The resulting string does not contain a xml declaration. Use {@code XmlUtil.serialize(element)} if you need the declaration.)
-     *
-     * @param element the element to serialize
-     * @return the string representation of the element
-     * @since 2.1
-     */
-    @Deprecated
-    public static String serialize(Element element) {
-        return XmlUtil.serialize(element).replaceFirst("<\\?xml version=\"1.0\".*\\?>", "");
-    }
-}
\ No newline at end of file
diff --git a/subprojects/groovy-xml/src/main/java/org/codehaus/groovy/tools/xml/DomToGroovy.java b/subprojects/groovy-xml/src/main/java/org/codehaus/groovy/tools/xml/DomToGroovy.java
deleted file mode 100644
index 46eaeb6..0000000
--- a/subprojects/groovy-xml/src/main/java/org/codehaus/groovy/tools/xml/DomToGroovy.java
+++ /dev/null
@@ -1,405 +0,0 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one
- *  or more contributor license agreements.  See the NOTICE file
- *  distributed with this work for additional information
- *  regarding copyright ownership.  The ASF licenses this file
- *  to you under the Apache License, Version 2.0 (the
- *  "License"); you may not use this file except in compliance
- *  with the License.  You may obtain a copy of the License at
- *
- *    http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing,
- *  software distributed under the License is distributed on an
- *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- *  KIND, either express or implied.  See the License for the
- *  specific language governing permissions and limitations
- *  under the License.
- */
-package org.codehaus.groovy.tools.xml;
-
-import groovy.util.IndentPrinter;
-import org.codehaus.groovy.syntax.Types;
-import org.w3c.dom.Attr;
-import org.w3c.dom.Comment;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.NamedNodeMap;
-import org.w3c.dom.Node;
-import org.w3c.dom.NodeList;
-import org.w3c.dom.ProcessingInstruction;
-import org.w3c.dom.Text;
-import org.xml.sax.InputSource;
-
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileReader;
-import java.io.FileWriter;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.PrintWriter;
-import java.io.Reader;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Map;
-
-/**
- * A SAX handler for turning XML into Groovy scripts
- */
-@Deprecated
-public class DomToGroovy {
-
-    protected IndentPrinter out;
-    protected boolean inMixed = false;
-    protected String qt = "'";
-    protected Collection<String> keywords = Types.getKeywords();
-
-    public DomToGroovy(PrintWriter out) {
-        this(new IndentPrinter(out));
-    }
-
-    // TODO allow string quoting delimiter to be specified, e.g. ' vs "
-    public DomToGroovy(IndentPrinter out) {
-        this.out = out;
-    }
-
-    public void print(Document document) {
-        printChildren(document, new HashMap());
-    }
-
-    public static void main(String[] args) {
-        if (args.length < 1) {
-            System.out.println("Usage: DomToGroovy infilename [outfilename]");
-            System.exit(1);
-        }
-        Document document = null;
-        try {
-            document = parse(args[0]);
-        } catch (Exception e) {
-            System.out.println("Unable to parse input file '" + args[0] + "': " + e.getMessage());
-            System.exit(1);
-        }
-        PrintWriter writer = null;
-        if (args.length < 2) {
-            writer = new PrintWriter(System.out);
-        } else {
-            try {
-                writer = new PrintWriter(new FileWriter(new File(args[1])));
-            } catch (IOException e) {
-                System.out.println("Unable to create output file '" + args[1] + "': " + e.getMessage());
-                System.exit(1);
-            }
-        }
-        DomToGroovy converter = new DomToGroovy(writer);
-        converter.out.incrementIndent();
-        writer.println("#!/bin/groovy");
-        writer.println();
-        writer.println("// generated from " + args[0]);
-        writer.println("System.out << new groovy.xml.StreamingMarkupBuilder().bind {");
-        converter.print(document);
-        writer.println("}");
-        writer.close();
-    }
-
-    // Implementation methods
-    //-------------------------------------------------------------------------
-
-    protected static Document parse(final String fileName) throws Exception {
-        return parse(new File(fileName));
-    }
-
-    public static Document parse(final File file) throws Exception {
-        return parse(new BufferedReader(new FileReader(file)));
-    }
-
-    public static Document parse(final Reader input) throws Exception {
-        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
-        factory.setNamespaceAware(true);
-        DocumentBuilder builder = factory.newDocumentBuilder();
-        return builder.parse(new InputSource(input));
-    }
-
-    public static Document parse(final InputStream input) throws Exception {
-        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
-        factory.setNamespaceAware(true);
-        DocumentBuilder builder = factory.newDocumentBuilder();
-        return builder.parse(new InputSource(input));
-    }
-
-    protected void print(Node node, Map namespaces, boolean endWithComma) {
-        switch (node.getNodeType()) {
-            case Node.ELEMENT_NODE :
-                printElement((Element) node, namespaces, endWithComma);
-                break;
-            case Node.PROCESSING_INSTRUCTION_NODE :
-                printPI((ProcessingInstruction) node, endWithComma);
-                break;
-            case Node.TEXT_NODE :
-                printText((Text) node, endWithComma);
-                break;
-            case Node.COMMENT_NODE :
-                printComment((Comment) node, endWithComma);
-                break;
-        }
-    }
-
-    protected void printElement(Element element, Map namespaces, boolean endWithComma) {
-        namespaces = defineNamespaces(element, namespaces);
-
-        element.normalize();
-        printIndent();
-
-        String prefix = element.getPrefix();
-        boolean hasPrefix = prefix != null && prefix.length() > 0;
-        String localName = getLocalName(element);
-        boolean isKeyword = checkEscaping(localName);
-        if (isKeyword || hasPrefix) print(qt);
-        if (hasPrefix) {
-            print(prefix);
-            print(".");
-        }
-        print(localName);
-        if (isKeyword || hasPrefix) print(qt);
-        print("(");
-
-        boolean hasAttributes = printAttributes(element);
-
-        NodeList list = element.getChildNodes();
-        int length = list.getLength();
-        if (length == 0) {
-            printEnd(")", endWithComma);
-        } else {
-            Node node = list.item(0);
-            if (length == 1 && node instanceof Text) {
-                Text textNode = (Text) node;
-                String text = getTextNodeData(textNode);
-                if (hasAttributes) print(", ");
-                printQuoted(text);
-                printEnd(")", endWithComma);
-            } else if (mixedContent(list)) {
-                println(") {");
-                out.incrementIndent();
-                boolean oldInMixed = inMixed;
-                inMixed = true;
-                for (node = element.getFirstChild(); node != null; node = node.getNextSibling()) {
-                    print(node, namespaces, false);
-                }
-                inMixed = oldInMixed;
-                out.decrementIndent();
-                printIndent();
-                printEnd("}", endWithComma);
-            } else {
-                println(") {");
-                out.incrementIndent();
-                printChildren(element, namespaces);
-                out.decrementIndent();
-                printIndent();
-                printEnd("}", endWithComma);
-            }
-        }
-    }
-
-    protected void printQuoted(String text) {
-        if (text.contains("\n")) {
-            print("'''");
-            print(text);
-            print("'''");
-        } else {
-            print(qt);
-            print(escapeQuote(text));
-            print(qt);
-        }
-    }
-
-    protected void printPI(ProcessingInstruction instruction, boolean endWithComma) {
-        printIndent();
-        print("mkp.pi(" + qt);
-        print(instruction.getTarget());
-        print(qt + ", " + qt);
-        print(instruction.getData());
-        printEnd(qt + ");", endWithComma);
-    }
-
-    protected void printComment(Comment comment, boolean endWithComma) {
-        String text = comment.getData().trim();
-        if (text.length() >0) {
-            printIndent();
-            print("/* ");
-            print(text);
-            printEnd(" */", endWithComma);
-        }
-    }
-
-    protected void printText(Text node, boolean endWithComma) {
-        String text = getTextNodeData(node);
-        if (text.length() > 0) {
-            printIndent();
-            if (inMixed) print("mkp.yield ");
-            printQuoted(text);
-            printEnd("", endWithComma);
-        }
-    }
-
-    protected String escapeQuote(String text) {
-        return text.replaceAll("\\\\", "\\\\\\\\").replaceAll(qt, "\\\\" + qt);
-    }
-
-    protected Map defineNamespaces(Element element, Map namespaces) {
-        Map answer = null;
-        String prefix = element.getPrefix();
-        if (prefix != null && prefix.length() > 0 && !namespaces.containsKey(prefix)) {
-            answer = new HashMap(namespaces);
-            defineNamespace(answer, prefix, element.getNamespaceURI());
-        }
-        NamedNodeMap attributes = element.getAttributes();
-        int length = attributes.getLength();
-        for (int i = 0; i < length; i++) {
-            Attr attribute = (Attr) attributes.item(i);
-            prefix = attribute.getPrefix();
-            if (prefix != null && prefix.length() > 0 && !namespaces.containsKey(prefix)) {
-                if (answer == null) {
-                    answer = new HashMap(namespaces);
-                }
-                defineNamespace(answer, prefix, attribute.getNamespaceURI());
-            }
-        }
-        return (answer != null) ? answer : namespaces;
-    }
-
-    protected void defineNamespace(Map namespaces, String prefix, String uri) {
-        namespaces.put(prefix, uri);
-        if (!prefix.equals("xmlns") && !prefix.equals("xml")) {
-            printIndent();
-            print("mkp.declareNamespace(");
-            print(prefix);
-            print(":" + qt);
-            print(uri);
-            println(qt + ")");
-        }
-    }
-
-    protected boolean printAttributes(Element element) {
-        boolean hasAttribute = false;
-        NamedNodeMap attributes = element.getAttributes();
-        int length = attributes.getLength();
-        if (length > 0) {
-            StringBuffer buffer = new StringBuffer();
-            for (int i = 0; i < length; i++) {
-                printAttributeWithPrefix((Attr) attributes.item(i), buffer);
-            }
-            for (int i = 0; i < length; i++) {
-                hasAttribute = printAttributeWithoutPrefix((Attr) attributes.item(i), hasAttribute);
-            }
-            if (buffer.length() > 0) {
-                if (hasAttribute) {
-                    print(", ");
-                }
-                print(buffer.toString());
-                hasAttribute = true;
-            }
-        }
-        return hasAttribute;
-    }
-
-    protected void printAttributeWithPrefix(Attr attribute, StringBuffer buffer) {
-        String prefix = attribute.getPrefix();
-        if (prefix != null && prefix.length() > 0 && !prefix.equals("xmlns")) {
-            if (buffer.length() > 0) {
-                buffer.append(", ");
-            }
-            buffer.append(qt);
-            buffer.append(prefix);
-            buffer.append(":");
-            buffer.append(getLocalName(attribute));
-            buffer.append(qt).append(":").append(qt);
-            buffer.append(escapeQuote(getAttributeValue(attribute)));
-            buffer.append(qt);
-        }
-    }
-
-    protected String getAttributeValue(Attr attribute) {
-        return attribute.getValue();
-    }
-
-    protected boolean printAttributeWithoutPrefix(Attr attribute, boolean hasAttribute) {
-        String prefix = attribute.getPrefix();
-        if (prefix == null || prefix.length() == 0) {
-            if (!hasAttribute) {
-                hasAttribute = true;
-            } else {
-                print(", ");
-            }
-            String localName = getLocalName(attribute);
-            boolean needsEscaping = checkEscaping(localName);
-            if (needsEscaping) print(qt);
-            print(localName);
-            if (needsEscaping) print(qt);
-            print(":");
-            printQuoted(getAttributeValue(attribute));
-        }
-        return hasAttribute;
-    }
-
-    protected boolean checkEscaping(String localName) {
-        return keywords.contains(localName) || localName.contains("-") || localName.contains(":") || localName.contains(".");
-    }
-
-    protected String getTextNodeData(Text node) {
-        return node.getData().trim();
-    }
-
-    protected boolean mixedContent(NodeList list) {
-        boolean hasText = false;
-        boolean hasElement = false;
-        for (int i = 0, size = list.getLength(); i < size; i++) {
-            Node node = list.item(i);
-            if (node instanceof Element) {
-                hasElement = true;
-            } else if (node instanceof Text) {
-                String text = getTextNodeData((Text) node);
-                if (text.length() > 0) {
-                    hasText = true;
-                }
-            }
-            if (hasText && hasElement) break;
-        }
-        return hasText && hasElement;
-    }
-
-    protected void printChildren(Node parent, Map namespaces) {
-        for (Node node = parent.getFirstChild(); node != null; node = node.getNextSibling()) {
-            print(node, namespaces, false);
-        }
-    }
-
-    protected String getLocalName(Node node) {
-        String answer = node.getLocalName();
-        if (answer == null) {
-            answer = node.getNodeName();
-        }
-        return answer.trim();
-    }
-
-    protected void printEnd(String text, boolean endWithComma) {
-        if (endWithComma) {
-            print(text);
-            println(",");
-        } else {
-            println(text);
-        }
-    }
-
-    protected void println(String text) {
-        out.println(text);
-    }
-
-    protected void print(String text) {
-        out.print(text);
-    }
-
-    protected void printIndent() {
-        out.printIndent();
-    }
-}


[groovy] 12/23: back down version number until we have a spock version that supports 4.0+

Posted by pa...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

paulk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git

commit 241b303297d3dba0311fb05bfee86f316540df76
Author: Paul King <pa...@asert.com.au>
AuthorDate: Wed Sep 18 19:49:32 2019 +1000

    back down version number until we have a spock version that supports 4.0+
---
 gradle.properties | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/gradle.properties b/gradle.properties
index 62d9a06..b58d14d 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -13,9 +13,9 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-groovyVersion = 4.0.0-SNAPSHOT
+groovyVersion = 3.9.98-SNAPSHOT
 # bundle version format: major('.'minor('.'micro('.'qualifier)?)?)? (first 3 only digits)
-groovyBundleVersion = 4.0.0.SNAPSHOT
+groovyBundleVersion = 3.9.98.SNAPSHOT
 
 gradle_version=5.6.2
 


[groovy] 18/23: don't use deprecated version of class

Posted by pa...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

paulk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git

commit 49c6df78406d3bfa994ed6cbebc35507a2fb5beb
Author: Paul King <pa...@asert.com.au>
AuthorDate: Thu Sep 19 21:28:46 2019 +1000

    don't use deprecated version of class
---
 config/codenarc/codenarc.groovy                    |  2 +-
 gradle/docs.gradle                                 |  6 ++--
 .../groovy/runtime/DefaultGroovyMethods.java       |  4 +--
 src/spec/doc/core-metaprogramming.adoc             |  2 +-
 src/spec/test/BaseScriptSpecTest.groovy            |  1 +
 src/spec/test/ClassDesignASTTransformsTest.groovy  |  2 ++
 src/spec/test/ClassTest.groovy                     |  2 ++
 src/spec/test/CloningASTTransformsTest.groovy      |  2 ++
 src/spec/test/ClosuresSpecTest.groovy              |  2 ++
 .../test/CodeGenerationASTTransformsTest.groovy    |  2 ++
 src/spec/test/CoercionTest.groovy                  |  2 ++
 src/spec/test/CommandChainsTest.groovy             |  2 ++
 .../CompilerDirectivesASTTransformsTest.groovy     |  2 ++
 src/spec/test/CustomizersTest.groovy               |  2 ++
 .../DeclarativeConcurrencyASTTransformsTest.groovy |  2 ++
 src/spec/test/DelegatesToSpecTest.groovy           |  2 ++
 src/spec/test/DesignPatternsTest.groovy            |  2 +-
 src/spec/test/DifferencesFromJavaTest.groovy       |  2 ++
 src/spec/test/ExtensionModuleSpecTest.groovy       |  2 ++
 src/spec/test/IntegrationTest.groovy               |  2 ++
 .../test/LogImprovementsASTTransformsTest.groovy   |  2 ++
 src/spec/test/PackageTest.groovy                   |  2 ++
 src/spec/test/PrimitiveTest.groovy                 |  2 ++
 .../test/SaferScriptingASTTransformsTest.groovy    |  2 ++
 src/spec/test/ScriptsAndClassesSpecTest.groovy     |  2 ++
 src/spec/test/SwingASTTransformsTest.groovy        |  2 ++
 src/spec/test/TestingASTTransformsTest.groovy      |  5 +++-
 src/spec/test/TraitsSpecificationTest.groovy       |  3 ++
 src/spec/test/builder/FileTreeBuilderTest.groovy   | 10 ++++---
 src/spec/test/builder/NodeBuilderTest.groovy       |  2 ++
 .../test/builder/ObjectGraphBuilderTest.groovy     |  1 +
 src/spec/test/cli/CliBuilderTestCase.groovy        |  2 ++
 src/spec/test/gdk/ConfigSlurperTest.groovy         |  2 ++
 src/spec/test/gdk/ExpandoTest.groovy               |  2 ++
 src/spec/test/gdk/ObservableTest.groovy            |  2 ++
 .../test/gdk/WorkingWithCollectionsTest.groovy     |  2 ++
 src/spec/test/gdk/WorkingWithIOSpecTest.groovy     |  3 +-
 .../metaprogramming/ASTMatcherFilteringTest.groovy |  1 +
 .../metaprogramming/ASTMatcherTestingTest.groovy   |  1 +
 .../test/metaprogramming/ASTXFormSpecTest.groovy   |  1 +
 src/spec/test/metaprogramming/CategoryTest.groovy  |  1 +
 .../metaprogramming/ExpandoMetaClassTest.groovy    |  2 ++
 .../test/metaprogramming/GroovyObjectTest.groovy   |  2 ++
 .../test/metaprogramming/InterceptableTest.groovy  |  2 ++
 .../InterceptionThroughMetaClassTest.groovy        |  1 +
 .../test/metaprogramming/MacroClassTest.groovy     |  1 +
 .../metaprogramming/MacroExpressionTest.groovy     |  1 +
 .../test/metaprogramming/MacroStatementTest.groovy |  1 +
 .../MacroVariableSubstitutionTest.groovy           |  1 +
 .../MethodPropertyMissingTest.groovy               |  2 ++
 ...taticPropertyMissingAndMethodMissingTest.groovy |  2 ++
 src/spec/test/objectorientation/MethodsTest.groovy |  2 ++
 src/spec/test/semantics/GPathTest.groovy           |  3 +-
 src/spec/test/semantics/LabelsTest.groovy          |  2 ++
 src/spec/test/semantics/PowerAssertTest.groovy     |  1 +
 src/spec/test/semantics/TheGroovyTruthTest.groovy  |  2 ++
 src/spec/test/testingguide/GDKMethodTests.groovy   |  2 ++
 .../testingguide/GroovyTestCaseExampleTests.groovy |  3 +-
 .../test/testingguide/MockingExampleTests.groovy   |  1 +
 src/spec/test/typing/OptionalTypingTest.groovy     |  2 ++
 .../test/typing/StaticCompilationIntroTest.groovy  |  2 ++
 .../typing/TypeCheckingExtensionSpecTest.groovy    |  1 +
 src/tck/test/gls/ch03/s01/Unicode1.groovy          |  4 ++-
 src/tck/test/gls/ch03/s01/Unicode2.groovy          |  4 ++-
 .../test/gls/ch03/s02/LexicalTranslation1.groovy   |  2 ++
 src/tck/test/gls/ch03/s02/Longest1.groovy          |  2 ++
 src/tck/test/gls/ch03/s03/UnicodeEscapes1.groovy   |  2 ++
 src/tck/test/gls/ch03/s03/UnicodeEscapes2.groovy   |  2 ++
 src/test/gls/CompilableTestSupport.groovy          |  1 +
 .../closures/AnnotationClosureTest.groovy          |  2 +-
 .../AnnotationClosureWithNonLocalVariable.groovy   |  2 ++
 src/test/gls/ch06/s05/GName1Test.groovy            |  1 +
 src/test/gls/closures/ResolveStrategyTest.groovy   |  1 +
 src/test/gls/innerClass/InnerClassTest.groovy      |  2 +-
 src/test/gls/innerClass/InnerInterfaceTest.groovy  |  2 ++
 .../gls/invocation/ClassDuplicationTest.groovy     |  2 ++
 src/test/gls/invocation/DefaultParamTest.groovy    |  1 +
 src/test/gls/scope/VariablePrecedenceTest.groovy   |  2 ++
 src/test/gls/syntax/Gep3OrderDslTest.groovy        |  1 +
 src/test/gls/syntax/Gep3Test.groovy                |  2 ++
 src/test/groovy/ActorTest.groovy                   |  2 ++
 src/test/groovy/AmbiguousInvocationTest.groovy     |  2 ++
 src/test/groovy/ArrayAutoboxingTest.groovy         |  2 ++
 src/test/groovy/ArrayCoerceTest.groovy             |  2 ++
 src/test/groovy/ArrayParamMethodTest.groovy        |  2 ++
 src/test/groovy/ArrayTest.groovy                   |  2 ++
 src/test/groovy/ArrayTypeTest.groovy               |  2 ++
 src/test/groovy/AsTest.groovy                      |  3 ++
 src/test/groovy/AssertNumberTest.groovy            |  2 ++
 src/test/groovy/AssertTest.groovy                  |  2 ++
 src/test/groovy/Base64Test.groovy                  |  2 ++
 src/test/groovy/BinaryStreamsTest.groovy           |  2 ++
 src/test/groovy/BindingTest.groovy                 |  2 ++
 src/test/groovy/BitSetTest.groovy                  |  2 ++
 src/test/groovy/CallInnerClassCtorTest.groovy      |  2 ++
 src/test/groovy/CastTest.groovy                    |  2 ++
 src/test/groovy/CategoryTest.groovy                |  2 ++
 src/test/groovy/ChainedAssignmentTest.groovy       |  2 ++
 src/test/groovy/ClassExpressionTest.groovy         |  2 ++
 src/test/groovy/ClassLoaderBug.groovy              |  2 ++
 src/test/groovy/ClassTest.groovy                   |  2 ++
 src/test/groovy/ClosureAsParamTest.groovy          |  2 ++
 src/test/groovy/ClosureCloneTest.groovy            |  2 ++
 src/test/groovy/ClosureComparatorTest.groovy       |  2 ++
 src/test/groovy/ClosureComposeTest.groovy          |  1 +
 src/test/groovy/ClosureCurryTest.groovy            |  1 +
 src/test/groovy/ClosureDefaultParameterTest.groovy |  2 ++
 src/test/groovy/ClosureInClosureTest.groovy        |  2 ++
 src/test/groovy/ClosureInStaticMethodTest.groovy   |  2 ++
 src/test/groovy/ClosureMethodCallTest.groovy       |  2 ++
 src/test/groovy/ClosureMethodTest.groovy           |  1 +
 src/test/groovy/ClosureMethodsOnFileTest.groovy    |  2 ++
 src/test/groovy/ClosureMissingMethodTest.groovy    |  2 ++
 src/test/groovy/ClosureReturnTest.groovy           |  2 ++
 .../ClosureReturnWithoutReturnStatementTest.groovy |  2 ++
 src/test/groovy/ClosureSugarTest.groovy            |  2 ++
 src/test/groovy/ClosureTest.groovy                 |  1 +
 .../groovy/ClosureUsingOuterVariablesTest.groovy   |  2 ++
 src/test/groovy/ClosureWithDefaultParamTest.groovy |  2 ++
 .../groovy/ClosureWithEmptyParametersTest.groovy   |  2 ++
 src/test/groovy/CollateTest.groovy                 |  2 ++
 src/test/groovy/CompareEqualsTest.groovy           |  2 ++
 src/test/groovy/CompareToTest.groovy               |  2 ++
 src/test/groovy/CompareTypesTest.groovy            |  4 ++-
 src/test/groovy/CompileOrderTest.groovy            |  2 ++
 src/test/groovy/CompilerErrorTest.groovy           |  2 ++
 src/test/groovy/Constructor2Test.groovy            |  2 ++
 src/test/groovy/ConstructorTest.groovy             |  2 ++
 src/test/groovy/CurlyBracketLayoutTest.groovy      |  2 ++
 src/test/groovy/DefaultParamClosureTest.groovy     |  2 ++
 src/test/groovy/DoWhileLoopTest.groovy             |  2 ++
 src/test/groovy/DollarEscapingTest.groovy          |  2 ++
 src/test/groovy/DownUpStepTest.groovy              |  2 ++
 src/test/groovy/DynamicMemberTest.groovy           |  2 ++
 src/test/groovy/EqualsTest.groovy                  |  2 ++
 src/test/groovy/EscapedUnicodeTest.groovy          |  2 ++
 src/test/groovy/ExceptionInClosureTest.groovy      |  2 ++
 src/test/groovy/ExpandoPropertyTest.groovy         |  2 ++
 src/test/groovy/FileTest.groovy                    |  2 ++
 src/test/groovy/FilterLineTest.groovy              |  2 ++
 src/test/groovy/FinallyTest.groovy                 |  2 ++
 .../groovy/ForLoopWithLocalVariablesTest.groovy    |  2 ++
 src/test/groovy/GStringTest.groovy                 |  2 ++
 src/test/groovy/GeneratorTest.groovy               |  2 ++
 src/test/groovy/GlobalPrintlnTest.groovy           |  2 ++
 .../groovy/GroovyCharSequenceMethodsTest.groovy    |  2 ++
 src/test/groovy/GroovyClosureMethodsTest.groovy    |  2 ++
 src/test/groovy/GroovyInterceptableTest.groovy     |  1 +
 src/test/groovy/GroovyMethodsTest.groovy           |  2 ++
 src/test/groovy/GroovyTruthTest.groovy             |  2 ++
 src/test/groovy/HeredocsTest.groovy                |  2 ++
 src/test/groovy/HexTest.groovy                     |  2 ++
 src/test/groovy/HomepageTest.groovy                |  2 ++
 src/test/groovy/IdentityClosureTest.groovy         |  2 ++
 src/test/groovy/IfElseCompactTest.groovy           |  2 ++
 src/test/groovy/IfElseTest.groovy                  |  2 ++
 src/test/groovy/IfPropertyTest.groovy              |  2 ++
 src/test/groovy/IfTest.groovy                      |  2 ++
 src/test/groovy/IfWithMethodCallTest.groovy        |  2 ++
 src/test/groovy/IllegalAccessScenariosTest.groovy  |  2 ++
 src/test/groovy/ImportTest.groovy                  |  2 ++
 src/test/groovy/InstanceofTest.groovy              |  2 ++
 .../groovy/InvokeNormalMethodsFirstTest.groovy     |  2 ++
 src/test/groovy/KeywordsInPropertyNamesTest.groovy |  2 ++
 src/test/groovy/LeftShiftTest.groovy               |  2 ++
 src/test/groovy/ListIteratingTest.groovy           |  2 ++
 src/test/groovy/ListTest.groovy                    |  1 +
 src/test/groovy/LiteralTypesTest.groovy            |  2 ++
 src/test/groovy/LittleClosureTest.groovy           |  2 ++
 src/test/groovy/LocalFieldTest.groovy              |  2 ++
 src/test/groovy/LocalPropertyTest.groovy           |  2 ++
 src/test/groovy/LocalVariableTest.groovy           |  2 ++
 src/test/groovy/LogicTest.groovy                   |  2 ++
 src/test/groovy/LoopBreakTest.groovy               |  2 ++
 src/test/groovy/MapConstructionTest.groovy         |  2 ++
 src/test/groovy/MapPropertyTest.groovy             |  2 ++
 src/test/groovy/MapTest.groovy                     |  2 ++
 src/test/groovy/MethodCallTest.groovy              |  2 ++
 .../groovy/MethodCallWithoutParenthesisTest.groovy |  2 ++
 .../MethodParameterAccessWithinClosureTest.groovy  |  2 ++
 src/test/groovy/MinMaxTest.groovy                  |  2 ++
 src/test/groovy/MinusEqualsTest.groovy             |  2 ++
 src/test/groovy/ModuloTest.groovy                  |  2 ++
 src/test/groovy/MultiCatchTest.groovy              |  1 +
 src/test/groovy/MultiDimArraysTest.groovy          |  2 ++
 .../groovy/MultilineChainExpressionTest.groovy     |  2 ++
 src/test/groovy/MultilineStringTest.groovy         |  2 ++
 src/test/groovy/MultiplyDivideEqualsTest.groovy    |  2 ++
 src/test/groovy/NamedParameterTest.groovy          |  1 +
 src/test/groovy/NestedClassTest.groovy             |  2 ++
 src/test/groovy/NullPropertyTest.groovy            |  2 ++
 src/test/groovy/OptionalReturnTest.groovy          |  2 ++
 src/test/groovy/OverloadInvokeMethodTest.groovy    |  2 ++
 src/test/groovy/OverridePropertyGetterTest.groovy  |  2 ++
 src/test/groovy/OverrideTest.groovy                |  2 ++
 src/test/groovy/PlusEqualsTest.groovy              |  2 ++
 src/test/groovy/PostfixTest.groovy                 |  2 ++
 src/test/groovy/PrefixTest.groovy                  |  2 ++
 src/test/groovy/PrimitiveArraysTest.groovy         |  2 ++
 src/test/groovy/PrimitiveDefaultValueTest.groovy   |  2 ++
 src/test/groovy/PrimitiveTypeFieldTest.groovy      |  2 ++
 src/test/groovy/PrimitiveTypesTest.groovy          |  2 ++
 src/test/groovy/PrintTest.groovy                   |  1 +
 ...ateVariableAccessFromAnotherInstanceTest.groovy |  2 ++
 src/test/groovy/ProcessTest.groovy                 |  2 ++
 src/test/groovy/Property2Test.groovy               |  2 ++
 src/test/groovy/PropertyTest.groovy                |  2 ++
 src/test/groovy/PropertyWithoutDotTest.groovy      |  2 ++
 src/test/groovy/RangeTest.groovy                   |  2 ++
 src/test/groovy/ReadLineTest.groovy                |  2 ++
 src/test/groovy/RegularExpressionsTest.groovy      |  2 ++
 src/test/groovy/ReturnTest.groovy                  |  2 ++
 src/test/groovy/SafeNavigationTest.groovy          |  2 ++
 src/test/groovy/SerializeTest.groovy               |  2 ++
 src/test/groovy/SetTest.groovy                     |  2 ++
 src/test/groovy/ShellTest.groovy                   |  2 ++
 src/test/groovy/SimplePostfixTest.groovy           |  2 ++
 src/test/groovy/SingletonBugTest.groovy            |  3 ++
 src/test/groovy/SliceTest.groovy                   |  2 ++
 src/test/groovy/SocketTest.groovy                  |  2 ++
 src/test/groovy/SortTest.groovy                    |  2 ++
 src/test/groovy/SpreadDotTest.groovy               |  2 ++
 src/test/groovy/SqlDateTest.groovy                 |  3 +-
 src/test/groovy/StackTraceTest.groovy              |  2 ++
 src/test/groovy/StaticMessageTest.groovy           |  2 ++
 src/test/groovy/StringBufferTest.groovy            |  2 ++
 src/test/groovy/StringTest.groovy                  |  2 ++
 src/test/groovy/SubscriptTest.groovy               |  2 ++
 src/test/groovy/SwitchTest.groovy                  |  2 ++
 .../groovy/SwitchWithDifferentTypesTest.groovy     |  2 ++
 src/test/groovy/TextPropertyTest.groovy            |  2 ++
 src/test/groovy/ThisAndSuperTest.groovy            |  2 ++
 src/test/groovy/ThreadMethodsTest.groovy           |  2 ++
 src/test/groovy/ThrowTest.groovy                   |  2 ++
 src/test/groovy/ToArrayBugTest.groovy              |  2 ++
 src/test/groovy/TripleQuotedStringTest.groovy      |  2 ++
 src/test/groovy/TypesafeMethodTest.groovy          |  2 ++
 src/test/groovy/UniqueOnCollectionTest.groovy      |  2 ++
 .../UniqueOnCollectionWithClosureTest.groovy       |  2 ++
 .../UniqueOnCollectionWithComparatorTest.groovy    |  2 ++
 src/test/groovy/UnsafeNavigationTest.groovy        |  2 ++
 src/test/groovy/VArgsTest.groovy                   |  2 ++
 src/test/groovy/ValidNameTest.groovy               |  2 ++
 src/test/groovy/VarargsMethodTest.groovy           |  2 ++
 src/test/groovy/VerbatimGStringTest.groovy         |  2 ++
 src/test/groovy/WhileLoopTest.groovy               |  2 ++
 .../PackageAndImportAnnotationTest.groovy          |  2 +-
 .../annotations/ParameterAnnotationTest.groovy     |  1 +
 src/test/groovy/beans/BindableTransformTest.groovy |  1 +
 .../groovy/beans/ListenerListTransformTest.groovy  |  2 ++
 src/test/groovy/beans/VetoableTransformTest.groovy |  1 +
 .../groovy/bugs/AmbiguousListOrMethodTest.groovy   |  2 ++
 src/test/groovy/bugs/AsBoolBug.groovy              |  2 ++
 .../bugs/AssignmentInsideExpressionBug.groovy      |  2 ++
 .../groovy/bugs/AttributeSetExpressionBug.groovy   |  2 ++
 .../groovy/bugs/AutoboxingOfComparisonsBug.groovy  |  2 ++
 .../bugs/BadLineNumberOnExceptionBugTest.groovy    |  6 ++--
 src/test/groovy/bugs/BadScriptNameBug.groovy       |  2 ++
 src/test/groovy/bugs/BenchmarkBug.groovy           |  2 ++
 src/test/groovy/bugs/BlockAsClosureBug.groovy      |  2 ++
 src/test/groovy/bugs/BooleanBug.groovy             |  2 ++
 src/test/groovy/bugs/ByteIndexBug.groovy           |  2 ++
 src/test/groovy/bugs/Bytecode2Bug.groovy           |  2 ++
 src/test/groovy/bugs/Bytecode3Bug.groovy           |  2 ++
 src/test/groovy/bugs/Bytecode4Bug.groovy           |  2 ++
 src/test/groovy/bugs/Bytecode5Bug.groovy           |  2 ++
 src/test/groovy/bugs/Bytecode6Bug.groovy           |  2 ++
 src/test/groovy/bugs/Bytecode7Bug.groovy           |  2 ++
 src/test/groovy/bugs/BytecodeBug.groovy            |  2 ++
 .../bugs/CallingClosuresWithClosuresBug.groovy     |  2 ++
 .../groovy/bugs/CastWhenUsingClosuresBug.groovy    |  2 ++
 src/test/groovy/bugs/ChristofsPropertyBug.groovy   |  2 ++
 .../groovy/bugs/ClassGeneratorFixesTest.groovy     |  2 ++
 src/test/groovy/bugs/ClassInNamedParamsBug.groovy  |  2 ++
 src/test/groovy/bugs/ClosureInClosureBug.groovy    |  2 ++
 .../groovy/bugs/ClosureTypedVariableBug.groovy     |  2 ++
 src/test/groovy/bugs/ClosureVariableBug.groovy     |  2 ++
 .../bugs/ClosureWithBitwiseDefaultParamTest.groovy |  2 ++
 src/test/groovy/bugs/ConstructorBug.groovy         |  1 +
 src/test/groovy/bugs/CustomMetaClassTest.groovy    |  2 ++
 src/test/groovy/bugs/DefVariableBug.groovy         |  2 ++
 .../bugs/DirectMethodCallWithVargsTest.groovy      |  1 +
 src/test/groovy/bugs/ForLoopBug.groovy             |  2 ++
 src/test/groovy/bugs/FullyQualifiedClassBug.groovy |  2 ++
 .../bugs/FullyQualifiedMethodReturnTypeBug.groovy  |  2 ++
 .../bugs/FullyQualifiedVariableTypeBug.groovy      |  2 ++
 src/test/groovy/bugs/GetterBug.groovy              |  2 ++
 src/test/groovy/bugs/Groovy1018_Bug.groovy         |  4 ++-
 src/test/groovy/bugs/Groovy1059_Bug.groovy         |  2 ++
 src/test/groovy/bugs/Groovy1081_Bug.groovy         |  2 ++
 src/test/groovy/bugs/Groovy1407_Bug.groovy         |  2 ++
 src/test/groovy/bugs/Groovy1462_Bug.groovy         |  2 ++
 src/test/groovy/bugs/Groovy1465Bug.groovy          |  1 +
 src/test/groovy/bugs/Groovy1593.groovy             |  2 ++
 src/test/groovy/bugs/Groovy1617_Bug.groovy         |  2 ++
 src/test/groovy/bugs/Groovy1706_Bug.groovy         |  2 ++
 src/test/groovy/bugs/Groovy2271Bug.groovy          |  1 +
 src/test/groovy/bugs/Groovy2339Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy2348Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy2350Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy2351Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy2391Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy239_Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy2432Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy2490Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy252_Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy2549Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy2556Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy2557Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy2558Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy2666Bug.groovy          |  1 +
 src/test/groovy/bugs/Groovy2773Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy278_Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy2801Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy2816Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy2849Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy2949Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy3069Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy308_Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy3135Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy3139Bug.groovy          |  1 +
 src/test/groovy/bugs/Groovy3156And2621Bug.groovy   |  2 ++
 src/test/groovy/bugs/Groovy3163Bug.groovy          | 32 ++++++++++------------
 src/test/groovy/bugs/Groovy3175_Bug.groovy         |  2 ++
 src/test/groovy/bugs/Groovy3205Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy3208Bug.groovy          |  4 ++-
 src/test/groovy/bugs/Groovy3235Bug.groovy          |  4 ++-
 src/test/groovy/bugs/Groovy3238Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy325_Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy3304Bug.groovy          |  1 +
 src/test/groovy/bugs/Groovy3305Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy3335Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy3339Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy3383Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy3389Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy3403Bug.groovy          |  1 +
 src/test/groovy/bugs/Groovy3405Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy3410Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy3424Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy3426Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy3446Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy3462Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy3464Bug.groovy          |  1 +
 src/test/groovy/bugs/Groovy3465Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy3498Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy3509Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy3511Bug.groovy          |  1 +
 src/test/groovy/bugs/Groovy3519Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy3560Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy3574Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy3590Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy3645Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy3658Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy3679Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy3716Bug.groovy          |  1 +
 src/test/groovy/bugs/Groovy3718Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy3720Bug.groovy          |  1 +
 src/test/groovy/bugs/Groovy3723Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy3726Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy3749Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy3770Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy3776Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy3784Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy3789Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy3799Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy3801Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy3818Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy3827Bug.groovy          |  1 +
 src/test/groovy/bugs/Groovy3830Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy3831Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy3834Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy3839Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy3863Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy3868Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy3871Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy3873Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy3876Bug.groovy          |  1 +
 src/test/groovy/bugs/Groovy3894Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy389_Bug.groovy          |  3 +-
 src/test/groovy/bugs/Groovy3904Bug.groovy          |  1 +
 src/test/groovy/bugs/Groovy3948Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy3949Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy4006Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy4009Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy4018Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy4029Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy4035Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy4038Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy4046Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy4069Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy4075Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy4078Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy4080Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy4098Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy4104Bug.groovy          |  1 +
 src/test/groovy/bugs/Groovy4106Bug.groovy          |  1 +
 src/test/groovy/bugs/Groovy4107Bug.groovy          |  1 +
 src/test/groovy/bugs/Groovy4111Bug.groovy          |  1 +
 src/test/groovy/bugs/Groovy4116Bug.groovy          |  1 +
 src/test/groovy/bugs/Groovy4119Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy4120Bug.groovy          |  1 +
 src/test/groovy/bugs/Groovy4121Bug.groovy          |  1 +
 src/test/groovy/bugs/Groovy4129Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy4131Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy4133Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy4134Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy4139Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy4170Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy4188Bug.groovy          |  1 +
 src/test/groovy/bugs/Groovy4191Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy4193Bug.groovy          |  1 +
 src/test/groovy/bugs/Groovy4202Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy4206Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy4235Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy4241Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy4243Bug.groovy          |  1 +
 src/test/groovy/bugs/Groovy4246Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy4247Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy4252Bug.groovy          |  1 +
 src/test/groovy/bugs/Groovy4257Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy4264Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy4272Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy4273Bug.groovy          |  1 +
 src/test/groovy/bugs/Groovy4287Bug.groovy          |  1 +
 src/test/groovy/bugs/Groovy4293Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy4386_Bug.groovy         |  1 +
 src/test/groovy/bugs/Groovy4393Bug.groovy          |  1 +
 src/test/groovy/bugs/Groovy4410Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy4414Bug.groovy          |  1 +
 src/test/groovy/bugs/Groovy4415Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy4416Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy4435Bug.groovy          |  1 +
 src/test/groovy/bugs/Groovy4449Bug.groovy          |  1 +
 ...Groovy4457GenericTypeDeclarationLeakTest.groovy |  2 ++
 src/test/groovy/bugs/Groovy4471Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy4480Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy4497Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy4516Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy4584Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy4720Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy4857Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy4861Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy4922Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy4958Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy4966Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy4967Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy4973Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy4980Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy4986Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy4989Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy4999Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy5025Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy5030Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy5033Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy5056Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy5061.groovy             |  1 +
 src/test/groovy/bugs/Groovy5101Test.groovy         |  2 ++
 src/test/groovy/bugs/Groovy5109Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy5122Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy5137Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy513_Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy5150Bug.groovy          |  1 +
 src/test/groovy/bugs/Groovy5152Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy5185Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy5193Bug.groovy          |  1 +
 src/test/groovy/bugs/Groovy5210Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy5212Bug.groovy          |  1 +
 src/test/groovy/bugs/Groovy5260Bug.groovy          |  1 +
 src/test/groovy/bugs/Groovy5272Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy5285Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy5396Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy5418Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy5425_Bug.groovy         |  2 ++
 src/test/groovy/bugs/Groovy5572Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy558_616_Bug.groovy      |  2 ++
 src/test/groovy/bugs/Groovy5687Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy5783Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy5802Bug.groovy          |  1 +
 src/test/groovy/bugs/Groovy5806Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy5852Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy5915Bug.groovy          |  1 +
 src/test/groovy/bugs/Groovy6042Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy6045Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy6072Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy6086Bug.groovy          |  1 +
 src/test/groovy/bugs/Groovy6271Bug.groovy          |  2 +-
 src/test/groovy/bugs/Groovy6374Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy6396Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy6508Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy6522Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy662Bug.groovy           |  2 ++
 src/test/groovy/bugs/Groovy666_Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy6722Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy674_Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy6755Bug.groovy          |  1 +
 src/test/groovy/bugs/Groovy675_Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy6764Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy6786Bug.groovy          |  2 +-
 src/test/groovy/bugs/Groovy6804Bug.groovy          |  2 +-
 src/test/groovy/bugs/Groovy6808Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy6811Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy6821Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy6830Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy6841Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy6862Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy6932Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy7031Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy7081Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy7204Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy7248Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy7291Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy7520Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy7584Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy7691Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy7709Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy770_Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy7721Bug.groovy          |  1 +
 src/test/groovy/bugs/Groovy7753Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy7797Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy779_Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy7812Bug.groovy          |  1 +
 src/test/groovy/bugs/Groovy7876Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy7912Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy7916Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy7917Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy7920Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy7921Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy7924Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy7933Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy7937Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy7938Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy7951Bug.groovy          |  1 +
 src/test/groovy/bugs/Groovy7958Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy7969Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy7970Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy7985Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy7994Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy7995Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy7996Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy8026Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy8030Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy8048Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy8055Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy8059Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy8060Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy8065Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy8084Bug.groovy          |  2 +-
 src/test/groovy/bugs/Groovy8085Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy8110Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy8138Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy8140Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy8176Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy8212Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy8229Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy8260Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy8313Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy831_Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy8327Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy8337Bug.groovy          |  2 +-
 src/test/groovy/bugs/Groovy8339Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy8383Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy8389Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy8409Bug.groovy          |  2 +-
 src/test/groovy/bugs/Groovy8439Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy8474Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy8523Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy8600Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy8609Bug.groovy          |  1 +
 src/test/groovy/bugs/Groovy8629Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy872Bug.groovy           |  2 ++
 src/test/groovy/bugs/Groovy8764Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy8816Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy8819Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy8833Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy8864Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy8868Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy8881Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy8887.groovy             |  2 ++
 src/test/groovy/bugs/Groovy8962.groovy             |  1 +
 src/test/groovy/bugs/Groovy9074.groovy             |  1 +
 src/test/groovy/bugs/Groovy965_Bug.groovy          |  2 ++
 src/test/groovy/bugs/Groovy996_Bug.groovy          |  2 ++
 src/test/groovy/bugs/GroovyInnerEnumBug.groovy     |  2 ++
 src/test/groovy/bugs/GuillaumesBug.groovy          |  2 ++
 src/test/groovy/bugs/GuillaumesMapBug.groovy       |  2 ++
 .../groovy/bugs/ImportNodeLineNumberTest.groovy    |  2 ++
 .../groovy/bugs/InconsistentStackHeightBug.groovy  |  2 ++
 src/test/groovy/bugs/InterfaceImplBug.groovy       |  1 +
 ...vokeNormalMethodFromBuilder_Groovy657Bug.groovy |  2 ++
 src/test/groovy/bugs/MarkupAndMethodBug.groovy     |  2 ++
 src/test/groovy/bugs/MetaClassCachingBug.groovy    |  2 ++
 ...MethodCallWithoutParensInStaticMethodBug.groovy |  2 ++
 src/test/groovy/bugs/MethodClosureTest.groovy      |  1 +
 src/test/groovy/bugs/MethodDispatchBug.groovy      |  2 ++
 src/test/groovy/bugs/MethodPointerBug.groovy       |  2 ++
 src/test/groovy/bugs/MorgansBug.groovy             |  2 ++
 src/test/groovy/bugs/NestedClosureBug.groovy       |  2 ++
 .../groovy/bugs/NullAsBooleanCoercionTest.groovy   |  2 ++
 src/test/groovy/bugs/NullCompareBug.groovy         |  2 ++
 .../groovy/bugs/OverloadInvokeMethodBug.groovy     |  2 ++
 src/test/groovy/bugs/POJOCallSiteBug.groovy        |  2 ++
 src/test/groovy/bugs/PrimitivePropertyBug.groovy   |  2 ++
 src/test/groovy/bugs/PrintlnWithNewBug.groovy      |  1 +
 src/test/groovy/bugs/PropertyNameBug.groovy        |  2 ++
 src/test/groovy/bugs/RodsBooleanBug.groovy         |  2 ++
 src/test/groovy/bugs/RodsBug.groovy                |  2 ++
 .../groovy/bugs/RussellsOptionalParenTest.groovy   |  2 ++
 src/test/groovy/bugs/SingleEvalTest.groovy         |  2 ++
 .../groovy/bugs/StaticClosurePropertyBug.groovy    |  2 ++
 src/test/groovy/bugs/StaticMethodCallBug.groovy    |  2 ++
 src/test/groovy/bugs/StaticMethodImportBug.groovy  |  3 +-
 .../bugs/StaticMethodImportGroovy935Bug.groovy     |  3 +-
 src/test/groovy/bugs/StaticPropertyBug.groovy      |  2 ++
 .../groovy/bugs/SubscriptAndExpressionBug.groovy   |  2 ++
 src/test/groovy/bugs/SuperMethod2Bug.groovy        |  3 +-
 src/test/groovy/bugs/SuperMethodBug.groovy         |  2 ++
 .../groovy/bugs/SynchronizedBytecodeBug.groovy     |  2 ++
 src/test/groovy/bugs/TernaryOperatorTest.groovy    |  2 ++
 src/test/groovy/bugs/ToStringBug.groovy            |  2 ++
 src/test/groovy/bugs/TryCatch2Bug.groovy           |  2 ++
 src/test/groovy/bugs/TryCatchBug.groovy            |  2 ++
 src/test/groovy/bugs/UnknownVariableBug.groovy     |  2 ++
 src/test/groovy/bugs/UseClosureInClosureBug.groovy |  2 ++
 src/test/groovy/bugs/UseStaticInClosureBug.groovy  |  2 ++
 src/test/groovy/bugs/VariablePrecedence.groovy     |  2 ++
 src/test/groovy/bugs/VariablePrecedenceTest.groovy |  2 ++
 src/test/groovy/bugs/VerifyErrorBug.groovy         |  2 ++
 src/test/groovy/bugs/WriteOnlyPropertyBug.groovy   |  2 ++
 src/test/groovy/bugs/ZoharsBug.groovy              |  2 ++
 .../bugs/groovy5912/otherpkg/Groovy5912Bug.groovy  |  2 ++
 .../groovy/bugs/groovy6938/Groovy6938Bug.groovy    |  2 ++
 .../groovy/bugs/groovy8531/Groovy8531Bug.groovy    |  2 ++
 src/test/groovy/bugs/groovy8757/UsageTest.groovy   |  2 ++
 .../SyntheticParameterAnnotationsBug.groovy        |  2 ++
 .../groovy/bugs/groovy9236/Groovy9236Bug.groovy    |  1 +
 src/test/groovy/execute/ExecuteTest.groovy         |  2 ++
 .../groovy/execute/ExecuteTest_LinuxSolaris.groovy |  1 +
 src/test/groovy/execute/ExecuteTest_Windows.groovy |  1 +
 src/test/groovy/gpath/GPathTest.groovy             |  2 ++
 src/test/groovy/gpath/NodeGPathTest.groovy         |  2 ++
 .../groovy/grape/GrabErrorIsolationTest.groovy     |  2 ++
 src/test/groovy/grape/GrabExcludeTest.groovy       |  1 +
 src/test/groovy/grape/GrabResolverTest.groovy      |  1 +
 src/test/groovy/grape/GrapeClassLoaderTest.groovy  |  3 ++
 src/test/groovy/io/LineColumnReaderTest.groovy     |  2 ++
 .../groovy/lang/BenchmarkInterceptorTest.groovy    |  2 ++
 src/test/groovy/lang/CategoryAnnotationTest.groovy |  2 ++
 src/test/groovy/lang/ClassReloadingTest.groovy     |  1 +
 src/test/groovy/lang/ClosureResolvingTest.groovy   |  2 ++
 .../groovy/lang/DelegatingMetaClassTest.groovy     |  2 ++
 src/test/groovy/lang/ExceptionTest.groovy          |  2 ++
 .../lang/ExpandoMetaClassConstructorTest.groovy    |  2 ++
 .../lang/ExpandoMetaClassCreationHandleTest.groovy |  4 ++-
 src/test/groovy/lang/ExpandoMetaClassTest.groovy   |  2 ++
 src/test/groovy/lang/GetMethodsTest.groovy         |  2 ++
 src/test/groovy/lang/GroovyClassLoaderTest.groovy  |  3 +-
 src/test/groovy/lang/GroovyCodeSourceTest.groovy   |  2 ++
 src/test/groovy/lang/GroovyShellTest2.groovy       |  2 ++
 src/test/groovy/lang/GroovySystemTest.groovy       |  2 ++
 .../groovy/lang/InnerClassResolvingTest.groovy     |  2 ++
 src/test/groovy/lang/IntRangeTest.groovy           |  4 ++-
 src/test/groovy/lang/InterceptorTest.groovy        |  1 +
 src/test/groovy/lang/MapOfClosureTest.groovy       |  2 ++
 src/test/groovy/lang/MetaClassPropertyTest.groovy  |  2 ++
 src/test/groovy/lang/MetaClassRegistryTest.groovy  |  2 ++
 src/test/groovy/lang/MethodMissingTest.groovy      |  2 ++
 src/test/groovy/lang/MixinAnnotationTest.groovy    |  5 ++--
 src/test/groovy/lang/MixinTest.groovy              |  2 ++
 src/test/groovy/lang/PropertyMissingTest.groovy    |  2 ++
 .../groovy/lang/ReferenceSerializationTest.groovy  |  2 ++
 src/test/groovy/lang/RespondsToTest.groovy         |  2 ++
 src/test/groovy/lang/ScriptCacheTest.groovy        |  2 ++
 .../lang/ScriptSourcePositionInAstTest.groovy      |  1 +
 src/test/groovy/lang/StringConcatTest.groovy       |  2 ++
 src/test/groovy/lang/StripMarginTest.groovy        |  2 ++
 src/test/groovy/lang/SyntheticReturnTest.groovy    |  2 ++
 src/test/groovy/lang/TapMethodTest.groovy          |  2 ++
 src/test/groovy/lang/WithMethodTest.groovy         |  2 ++
 .../groovy/mock/example/SandwichMakerTest.groovy   |  1 +
 .../groovy/mock/interceptor/HalfMockTest.groovy    |  2 ++
 .../mock/interceptor/MockCallSequenceTest.groovy   |  1 +
 .../groovy/mock/interceptor/MockForJavaTest.groovy |  2 ++
 .../mock/interceptor/MockNestedCallTest.groovy     |  2 ++
 .../mock/interceptor/MockSingleCallTest.groovy     |  1 +
 .../mock/interceptor/MockWithZeroRangeTest.groovy  |  1 +
 .../mock/interceptor/StubCallSequenceTest.groovy   |  1 +
 .../groovy/mock/interceptor/StubForJavaTest.groovy |  2 ++
 .../mock/interceptor/StubSingleCallTest.groovy     |  2 ++
 src/test/groovy/mock/interceptor/StubTest.groovy   |  2 ++
 .../groovy/operator/BigDecimalOperatorsTest.groovy |  2 ++
 .../operator/BigIntegerOperationsTest.groovy       |  2 ++
 .../groovy/operator/BitwiseOperatorsTest.groovy    |  2 ++
 .../groovy/operator/BooleanOperationsTest.groovy   |  2 ++
 .../groovy/operator/DoubleOperationTest.groovy     |  2 ++
 .../groovy/operator/IntegerOperatorsTest.groovy    |  2 ++
 .../operator/MyColorOperatorOverloadingTest.groovy |  2 ++
 src/test/groovy/operator/NegateListsTest.groovy    |  2 ++
 src/test/groovy/operator/PowerOperatorsTest.groovy |  2 ++
 .../groovy/operator/SpreadListOperatorTest.groovy  |  2 ++
 .../groovy/operator/SpreadMapOperatorTest.groovy   |  2 ++
 .../groovy/operator/StringOperatorsTest.groovy     |  2 ++
 .../groovy/operator/TernaryOperatorsTest.groovy    |  2 ++
 .../groovy/operator/UnaryMinusNumberTests.groovy   |  2 ++
 .../groovy/operator/UnaryMinusOperatorTest.groovy  |  2 ++
 .../script/StreamClassloaderInScriptTest.groovy    |  2 ++
 src/test/groovy/time/DurationTest.groovy           |  2 ++
 src/test/groovy/time/TimeCategoryTest.groovy       |  2 ++
 .../transform/AnnotationCollectorLegacyTest.groovy |  1 +
 .../transform/AnnotationCollectorTest.groovy       |  1 +
 .../transform/ConditionalInterruptTest.groovy      |  2 ++
 src/test/groovy/transform/LazyTest.groovy          |  2 ++
 src/test/groovy/transform/ReadWriteLockTest.groovy |  2 ++
 .../groovy/transform/TimedInterruptTest.groovy     |  1 +
 .../stc/ArraysAndCollectionsSTCTest.groovy         |  4 +--
 .../groovy/transform/stc/GenericsSTCTest.groovy    |  2 +-
 src/test/groovy/transform/stc/Groovy7888Bug.groovy |  2 ++
 src/test/groovy/transform/stc/LambdaTest.groovy    |  2 ++
 .../transform/stc/MethodReferenceTest.groovy       |  2 ++
 .../stc/StaticTypeCheckingTestCase.groovy          |  1 +
 .../transform/stc/WithSTCStandaloneTest.groovy     |  2 ++
 src/test/groovy/tree/ClosureClassLoaderBug.groovy  |  2 ++
 src/test/groovy/tree/NavigationNodeTest.groovy     |  4 +--
 src/test/groovy/tree/NestedClosureBugTest.groovy   |  2 ++
 src/test/groovy/tree/SmallTreeTest.groovy          |  2 ++
 src/test/groovy/tree/TreeTest.groovy               |  2 ++
 src/test/groovy/tree/VerboseTreeTest.groovy        |  2 ++
 src/test/groovy/txn/TransactionTest.groovy         |  2 ++
 src/test/groovy/ui/GroovyMainTest.groovy           |  2 ++
 src/test/groovy/util/BufferedIteratorTest.groovy   |  1 +
 src/test/groovy/util/BuilderSupportTest.groovy     |  2 ++
 src/test/groovy/util/ConfigObjectTest.groovy       |  2 ++
 src/test/groovy/util/ConfigSlurperTest.groovy      |  3 ++
 src/test/groovy/util/DelegatingScriptTest.groovy   |  1 +
 .../groovy/util/FactoryBuilderSupportTest.groovy   |  2 ++
 src/test/groovy/util/FileTreeBuilderTest.groovy    |  2 ++
 .../util/GroovyCollectionsStarImportTest.groovy    |  2 ++
 src/test/groovy/util/GroovyCollectionsTest.groovy  |  2 ++
 .../util/GroovyScriptEngineReloadingTest.groovy    |  2 ++
 src/test/groovy/util/GroovyScriptEngineTest.groovy |  1 +
 src/test/groovy/util/IndentPrinterTest.groovy      |  2 ++
 src/test/groovy/util/NodeTest.groovy               |  1 +
 src/test/groovy/util/ObjectGraphBuilderTest.groovy |  2 ++
 src/test/groovy/util/ObservableListTest.groovy     |  2 ++
 src/test/groovy/util/ObservableMapTest.groovy      |  2 ++
 src/test/groovy/util/ObservableSetTests.groovy     |  2 ++
 src/test/groovy/util/OrderByTest.groovy            |  1 +
 .../groovy/util/ProxyGeneratorAdapterTest.groovy   |  1 +
 src/test/groovy/util/ProxyGeneratorTest.groovy     |  2 ++
 src/test/groovy/util/ProxyTest.groovy              |  2 ++
 src/test/groovy/util/ResourceBundleTest.groovy     |  4 ++-
 src/test/groovy/util/logging/CommonsTest.groovy    |  2 ++
 src/test/groovy/util/logging/Log4j2Test.groovy     |  2 ++
 src/test/groovy/util/logging/Log4jTest.groovy      |  2 ++
 src/test/groovy/util/logging/LogTest.groovy        |  2 ++
 src/test/groovy/util/logging/Slf4jTest.groovy      |  1 +
 .../groovy/plugin/GroovyRunnerRegistryTest.groovy  |  2 ++
 .../ClosureAndInnerClassNodeStructureTest.groovy   |  1 +
 .../groovy/antlr/AntlrParserPluginTest.groovy      |  1 +
 .../codehaus/groovy/antlr/GStringEndTest.groovy    |  1 +
 .../groovy/ast/CodeVisitorSupportTest.groovy       |  1 +
 .../codehaus/groovy/ast/GenericsTestCase.groovy    |  1 +
 .../groovy/ast/LazyInitOnClassNodeTest.groovy      |  1 +
 .../ast/builder/AstBuilderFromCodeTest.groovy      |  1 +
 .../builder/AstBuilderFromSpecificationTest.groovy |  1 +
 .../ast/builder/AstBuilderFromStringTest.groovy    |  1 +
 .../AstBuilderFromCodePackageImportTest.groovy     |  1 +
 .../groovy/ast/expr/ClosureExpressionTest.groovy   |  1 +
 .../groovy/ast/expr/MapExpressionTest.groovy       |  1 +
 .../ast/expr/MethodCallExpressionTest.groovy       |  2 ++
 .../groovy/ast/expr/PropertyExpressionTest.groovy  |  2 ++
 .../groovy/ast/source/SourceBaseTestCase.groovy    |  1 +
 .../groovy/ast/stmt/ExpressionStatementTest.groovy |  1 +
 .../groovy/ast/stmt/ThrowStatementTest.groovy      |  1 +
 .../groovy/ast/tools/GenericsUtilsTest.groovy      |  1 +
 .../groovy/classgen/BytecodeHelperTest.groovy      |  1 +
 .../classgen/CallClosureFieldAsMethodTest.groovy   |  2 ++
 .../codehaus/groovy/classgen/CallSiteTest.groovy   |  2 ++
 .../org/codehaus/groovy/classgen/CastTest.groovy   |  2 ++
 .../groovy/classgen/CastToStringTest.groovy        |  2 ++
 .../classgen/FinalVariableAnalyzerTest.groovy      |  1 +
 .../groovy/classgen/GenericsGenTest.groovy         |  1 +
 .../codehaus/groovy/classgen/InterfaceTest.groovy  |  1 +
 .../codehaus/groovy/classgen/MetaClassTest.groovy  |  2 ++
 .../groovy/classgen/ReflectorLoaderTest.groovy     |  2 ++
 .../classgen/asm/AbstractBytecodeTestCase.groovy   |  1 +
 .../asm/InstructionSequenceHelperClassTest.groovy  |  2 ++
 .../classgen/asm/sc/BugsStaticCompileTest.groovy   |  2 +-
 .../classgen/asm/sc/bugs/Groovy6670Bug.groovy      |  2 ++
 .../classgen/asm/sc/bugs/Groovy7870Bug.groovy      | 12 ++++----
 .../classgen/asm/sc/bugs/Groovy7883Bug.groovy      |  2 ++
 .../ASTTransformationCustomizerTest.groovy         |  1 +
 .../customizers/ImportCustomizerTest.groovy        |  1 +
 .../customizers/SecureASTCustomizerTest.groovy     |  1 +
 .../CompilerCustomizationBuilderTest.groovy        |  1 +
 .../groovy/control/io/FileReaderTest.groovy        |  1 +
 .../groovy/control/io/NullWriterTest.groovy        |  2 ++
 .../control/io/StringReaderSourceTest.groovy       |  1 +
 .../groovy/reflection/CachedMethodTest.groovy      |  2 ++
 .../reflection/GroovyClassValueFactoryTest.groovy  |  2 ++
 .../reflection/utils/ReflectionUtilsTest.groovy    |  1 +
 .../groovy/runtime/AppendableDgmMethodsTest.groovy |  2 ++
 .../groovy/runtime/CategoryForIteratorTest.groovy  |  2 ++
 .../runtime/CustomBooleanCoercionTest.groovy       |  2 ++
 .../runtime/DefaultGroovyMethodsSupportTest.groovy |  2 ++
 .../groovy/runtime/DefaultGroovyMethodsTest.groovy |  3 ++
 .../runtime/DefaultGroovyStaticMethodsTest.groovy  |  3 ++
 .../groovy/runtime/DirectoryDeleteTest.groovy      |  4 ++-
 .../codehaus/groovy/runtime/EachLineTest.groovy    |  4 ++-
 .../EachWithReaderAndInputStreamTest.groovy        |  2 ++
 .../codehaus/groovy/runtime/FileAppendTest.groovy  |  2 ++
 .../groovy/runtime/FileLeftShiftTest.groovy        |  2 ++
 .../runtime/FileStaticGroovyMethodsTest.groovy     |  2 ++
 .../groovy/runtime/GroovyCategoryTest.groovy       |  2 ++
 .../groovy/runtime/IOGroovyMethodsTest.groovy      |  1 +
 .../groovy/runtime/InterfaceConversionTest.groovy  |  2 ++
 .../runtime/InvokerHelperFormattingTest.groovy     |  2 ++
 .../org/codehaus/groovy/runtime/MinusTest.groovy   |  2 ++
 .../groovy/runtime/NestedCategoryTest.groovy       |  2 ++
 .../codehaus/groovy/runtime/NullObjectTest.groovy  |  2 ++
 .../groovy/runtime/PerInstanceMetaClassTest.groovy |  2 ++
 .../groovy/runtime/StringAsClassTest.groovy        |  2 ++
 .../codehaus/groovy/runtime/URLGetBytesTest.groovy |  2 ++
 .../codehaus/groovy/runtime/URLGetTextTest.groovy  |  2 ++
 .../runtime/WithResourceStreamClosedTest.groovy    |  4 ++-
 .../groovy/runtime/WriterAppendTest.groovy         |  2 ++
 .../m12n/ExtensionModuleHelperForTests.groovy      |  3 +-
 .../groovy/runtime/m12n/ExtensionModuleTest.groovy |  2 ++
 .../runtime/memoize/AbstractMemoizeTestCase.groovy |  2 ++
 .../CacheCleanupCollectedSoftReferencesTest.groovy |  1 +
 .../groovy/runtime/memoize/CacheCleanupTest.groovy |  2 ++
 .../memoize/LRUProtectionStorageTest.groovy        |  2 ++
 .../StaticMethodOverloadCompileStaticTest.groovy   |  1 +
 .../vm8/StaticMethodOverloadTest.groovy            |  2 ++
 .../powerassert/AssertionRenderingTest.groovy      |  2 ++
 .../AssertionsInDifferentLocationsTest.groovy      |  2 ++
 .../runtime/powerassert/EvaluationTest.groovy      |  2 ++
 .../ImplicitClosureCallRenderingTest.groovy        |  2 ++
 .../NotTransformedAssertionsTest.groovy            |  2 ++
 .../PowerAssertASTTransformationTest.groovy        |  2 ++
 .../runtime/powerassert/ValueRenderingTest.groovy  |  2 ++
 .../runtime/trampoline/TrampolineTest.groovy       |  2 ++
 .../DefaultTypeTransformationTest.groovy           |  2 ++
 .../runtime/typehandling/EqualityTest.groovy       |  2 ++
 .../runtime/typehandling/NumberMathTest.groovy     |  2 ++
 .../typehandling/ShortTypeHandlingTest.groovy      |  2 ++
 .../groovy/tools/LoaderConfigurationTest.groovy    |  2 ++
 .../codehaus/groovy/tools/StringHelperTest.groovy  |  2 ++
 .../org/codehaus/groovy/tools/UtilitiesTest.groovy |  2 ++
 .../tools/ast/TransformTestHelperTest.groovy       |  1 +
 .../rootloadersync/SubclassingInGroovyTest.groovy  |  2 ++
 .../groovy/tools/stubgenerator/StubTestCase.groovy |  1 +
 .../groovy/transform/AutoCloneTransformTest.groovy |  2 ++
 .../transform/AutoImplementTransformTest.groovy    |  2 ++
 .../CanonicalComponentsTransformTest.groovy        |  1 +
 .../groovy/transform/CanonicalTransformTest.groovy |  2 ++
 .../EqualsAndHashCodeTransformTest.groovy          |  2 ++
 .../ExternalizeMethodsTransformTest.groovy         |  2 ++
 .../ExternalizeVerifierTransformTest.groovy        |  2 ++
 .../transform/GeneratedAnnotationTest.groovy       |  1 +
 .../groovy/transform/GlobalTransformTest.groovy    |  2 ++
 .../groovy/transform/ImmutableTransformTest.groovy |  1 +
 .../transform/IndexedPropertyTransformTest.groovy  |  2 ++
 .../InheritConstructorsTransformTest.groovy        |  2 ++
 .../groovy/transform/LazyTransformTest.groovy      |  2 ++
 .../groovy/transform/LocalASTTransformTest.groovy  |  1 +
 .../transform/MapConstructorTransformTest.groovy   |  2 ++
 .../transform/MemoizedASTTransformationTest.groovy |  1 +
 .../transform/NamedVariantTransformTest.groovy     |  2 ++
 .../groovy/transform/NewifyTransformTest.groovy    |  2 ++
 .../transform/ReadWriteLockTransformTest.groovy    |  2 ++
 .../groovy/transform/SingletonTransformTest.groovy |  1 +
 .../transform/SynchronizedTransformTest.groovy     |  1 +
 .../groovy/transform/ToStringTransformTest.groovy  |  2 ++
 .../transform/TupleConstructorTransformTest.groovy |  2 ++
 .../TransformsAndCustomClassLoadersTest.groovy     |  1 +
 .../packageScope/DifferentPackageTest.groovy       |  2 +-
 .../groovy/transform/stc/SignatureCodecTest.groovy |  2 ++
 .../TailRecursiveCompilationFailuresTest.groovy    |  1 +
 .../TailRecursiveTogetherWithOtherASTsTest.groovy  |  2 ++
 .../tailrec/TailRecursiveTransformationTest.groovy |  2 ++
 .../groovy/transform/traitx/Groovy6697Bug.groovy   |  2 ++
 .../groovy/transform/traitx/Groovy6736Bug.groovy   |  2 ++
 .../groovy/transform/traitx/Groovy6741Bug.groovy   |  2 ++
 .../groovy/transform/traitx/Groovy7011Bug.groovy   |  2 ++
 .../groovy/transform/traitx/Groovy7190Bug.groovy   |  2 ++
 .../groovy/transform/traitx/Groovy7196Bug.groovy   |  2 ++
 .../groovy/transform/traitx/Groovy7206Bug.groovy   |  2 ++
 .../groovy/transform/traitx/Groovy7213Bug.groovy   |  2 ++
 .../groovy/transform/traitx/Groovy7214Bug.groovy   |  2 ++
 .../groovy/transform/traitx/Groovy7217Bug.groovy   |  2 ++
 .../groovy/transform/traitx/Groovy7255Bug.groovy   |  2 ++
 .../groovy/transform/traitx/Groovy7269Bug.groovy   |  2 ++
 .../groovy/transform/traitx/Groovy7275Bug.groovy   |  2 ++
 .../groovy/transform/traitx/Groovy7285Bug.groovy   |  2 ++
 .../groovy/transform/traitx/Groovy7456Bug.groovy   |  2 ++
 .../groovy/transform/traitx/Groovy7846Bug.groovy   |  1 +
 .../codehaus/groovy/util/ListHashMapTest.groovy    |  2 ++
 .../util/ManagedConcurrentLinkedQueueTest.groovy   |  2 ++
 .../groovy/util/ManagedConcurrentMapTest.groovy    |  2 ++
 .../util/ManagedConcurrentValueMapTest.groovy      |  2 ++
 .../groovy/util/ManagedLinkedlistTest.groovy       |  4 ++-
 .../groovy/util/ReferenceManagerTest.groovy        |  2 ++
 .../v8/InterfaceStaticMethodCallTest.groovy        |  2 ++
 .../groovy/tools/groovydoc/GroovyDocToolTest.java  |  4 +--
 .../groovy/text/MarkupTemplateEngineTest.groovy    |  2 +-
 .../groovy/test/GroovyLogTestCaseTest.groovy       |  4 +--
 subprojects/groovy-xml/build.gradle                |  2 +-
 .../src/main/java/groovy/xml/XmlParser.java        |  1 +
 .../src/main/java/groovy/xml/XmlSlurper.java       |  2 ++
 .../groovy/xml/slurpersupport/GPathResult.java     |  6 ++--
 .../spec/test/UserGuideMarkupBuilderTest.groovy    |  2 +-
 .../groovy/parser/antlr4/GroovyParserTest.groovy   |  1 +
 .../groovy/parser/antlr4/SyntaxErrorTest.groovy    |  1 +
 .../groovy/runtime/GroovyCategoryStressTest.groovy |  1 +
 .../groovy/groovy/bugs/vm8/Groovy8579Bug.groovy    |  2 ++
 915 files changed, 1707 insertions(+), 89 deletions(-)

diff --git a/config/codenarc/codenarc.groovy b/config/codenarc/codenarc.groovy
index e9c7179..7507e11 100644
--- a/config/codenarc/codenarc.groovy
+++ b/config/codenarc/codenarc.groovy
@@ -109,7 +109,7 @@ ruleset {
         'UnusedVariable' {
             doNotApplyToClassNames = 'SourceBaseTestCase,SAXTest,groovy.ForLoopTest,groovy.bugs.Groovy3894Bug,' +
                 'ExpandoMetaClassTest,ExceptionTest,JSR223Test,' +
-                'groovy.util.GroovyShellTestCase,org.codehaus.groovy.tools.shell.ShellRunner,' +
+                'groovy.test.GroovyShellTestCase,org.codehaus.groovy.tools.shell.ShellRunner,' +
                 'groovy.bugs.Bytecode7Bug,groovy.mock.interceptor.HalfMockTest,' +
                 'groovy.mock.interceptor.MockSingleCallTest,groovy.mock.interceptor.StubSingleCallTest,' +
                 'groovy.operator.TernaryOperatorsTest,groovy.swing.SwingBuilderTableTest,' +
diff --git a/gradle/docs.gradle b/gradle/docs.gradle
index 9b966a8..627b080 100644
--- a/gradle/docs.gradle
+++ b/gradle/docs.gradle
@@ -164,9 +164,9 @@ task docGDK {
                     arg(value: 'subprojects/groovy-datetime/src/main/java/org/apache/groovy/datetime/extensions/DateTimeStaticExtensions.java')
                     arg(value: 'subprojects/groovy-jaxb/src/main/groovy/org/apache/groovy/jaxb/extensions/JaxbExtensions.java')
                     arg(value: 'subprojects/groovy-sql/src/main/java/org/apache/groovy/sql/extensions/SqlExtensions.java')
-                    arg(value: 'subprojects/groovy-swing/src/main/java/org/codehaus/groovy/runtime/SwingGroovyMethods.java')
-                    arg(value: 'subprojects/groovy-xml/src/main/java/org/codehaus/groovy/runtime/XmlGroovyMethods.java')
-                    arg(value: 'subprojects/groovy-nio/src/main/java/org/codehaus/groovy/runtime/NioGroovyMethods.java')
+                    arg(value: 'subprojects/groovy-swing/src/main/java/org/apache/groovy/swing/extensions/SwingExtensions.java')
+                    arg(value: 'subprojects/groovy-xml/src/main/java/org/apache/groovy/xml/extensions/XmlExtensions.java')
+                    arg(value: 'subprojects/groovy-nio/src/main/java/org/apache/groovy/nio/extensions/NioExtensions.java')
                     arg(value: 'subprojects/groovy-jsr223/src/main/java/org/codehaus/groovy/jsr223/ScriptExtensions.java')
                     arg(value: 'subprojects/groovy-jsr223/src/main/java/org/codehaus/groovy/jsr223/ScriptStaticExtensions.java')
                 }
diff --git a/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java b/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java
index 2a1e515..dcdc945 100644
--- a/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java
+++ b/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java
@@ -212,8 +212,8 @@ public class DefaultGroovyMethods extends DefaultGroovyMethodsSupport {
 //            DateTimeExtensions.class,
 //            SqlExtensions.class,
 //            SwingGroovyMethods.class,
-//            XmlGroovyMethods.class,
-//            NioGroovyMethods.class
+//            XmlExtensions.class,
+//            NioExtensions.class
     };
     private static final Object[] EMPTY_OBJECT_ARRAY = new Object[0];
     private static final NumberAwareComparator<Comparable> COMPARABLE_NUMBER_AWARE_COMPARATOR = new NumberAwareComparator<Comparable>();
diff --git a/src/spec/doc/core-metaprogramming.adoc b/src/spec/doc/core-metaprogramming.adoc
index 331d20f..a26b222 100644
--- a/src/spec/doc/core-metaprogramming.adoc
+++ b/src/spec/doc/core-metaprogramming.adoc
@@ -2779,7 +2779,7 @@ include::{projectdir}/src/spec/test/SwingASTTransformsTest.groovy[tags=vetoable_
 
 ==== Test assistance
 [[xform-NotYetImplemented]]
-===== `@groovy.transform.NotYetImplemented`
+===== `@groovy.test.NotYetImplemented`
 
 `@NotYetImplemented` is used to invert the result of a JUnit 3/4 test case. It is in particular useful if a feature is not yet implemented but the test is. In that case, it is expected
 that the test fails. Marking it with `@NotYetImplemented` will inverse the result of the test, like in this example:
diff --git a/src/spec/test/BaseScriptSpecTest.groovy b/src/spec/test/BaseScriptSpecTest.groovy
index 7b35d4a..c6db6a0 100644
--- a/src/spec/test/BaseScriptSpecTest.groovy
+++ b/src/spec/test/BaseScriptSpecTest.groovy
@@ -16,6 +16,7 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
+import groovy.test.GroovyTestCase
 import groovy.transform.CompileStatic
 
 @CompileStatic
diff --git a/src/spec/test/ClassDesignASTTransformsTest.groovy b/src/spec/test/ClassDesignASTTransformsTest.groovy
index cd32da4..46de328 100644
--- a/src/spec/test/ClassDesignASTTransformsTest.groovy
+++ b/src/spec/test/ClassDesignASTTransformsTest.groovy
@@ -16,6 +16,8 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
+import groovy.test.GroovyTestCase
+
 class ClassDesignASTTransformsTest extends GroovyTestCase {
 
     void testDelegateTransformation() {
diff --git a/src/spec/test/ClassTest.groovy b/src/spec/test/ClassTest.groovy
index b6a2735..6264be7 100644
--- a/src/spec/test/ClassTest.groovy
+++ b/src/spec/test/ClassTest.groovy
@@ -1,3 +1,5 @@
+import groovy.test.GroovyTestCase
+
 /*
  *  Licensed to the Apache Software Foundation (ASF) under one
  *  or more contributor license agreements.  See the NOTICE file
diff --git a/src/spec/test/CloningASTTransformsTest.groovy b/src/spec/test/CloningASTTransformsTest.groovy
index 5a4f7f7..25f33e8 100644
--- a/src/spec/test/CloningASTTransformsTest.groovy
+++ b/src/spec/test/CloningASTTransformsTest.groovy
@@ -1,3 +1,5 @@
+import groovy.test.GroovyTestCase
+
 /*
  *  Licensed to the Apache Software Foundation (ASF) under one
  *  or more contributor license agreements.  See the NOTICE file
diff --git a/src/spec/test/ClosuresSpecTest.groovy b/src/spec/test/ClosuresSpecTest.groovy
index 5276b67..05fc9bf 100644
--- a/src/spec/test/ClosuresSpecTest.groovy
+++ b/src/spec/test/ClosuresSpecTest.groovy
@@ -1,3 +1,5 @@
+import groovy.test.GroovyTestCase
+
 /*
  *  Licensed to the Apache Software Foundation (ASF) under one
  *  or more contributor license agreements.  See the NOTICE file
diff --git a/src/spec/test/CodeGenerationASTTransformsTest.groovy b/src/spec/test/CodeGenerationASTTransformsTest.groovy
index 970979b..d253bb2 100644
--- a/src/spec/test/CodeGenerationASTTransformsTest.groovy
+++ b/src/spec/test/CodeGenerationASTTransformsTest.groovy
@@ -1,3 +1,5 @@
+import groovy.test.GroovyTestCase
+
 /*
  *  Licensed to the Apache Software Foundation (ASF) under one
  *  or more contributor license agreements.  See the NOTICE file
diff --git a/src/spec/test/CoercionTest.groovy b/src/spec/test/CoercionTest.groovy
index e0e114c..ff44750 100644
--- a/src/spec/test/CoercionTest.groovy
+++ b/src/spec/test/CoercionTest.groovy
@@ -1,3 +1,5 @@
+import groovy.test.GroovyTestCase
+
 /*
  *  Licensed to the Apache Software Foundation (ASF) under one
  *  or more contributor license agreements.  See the NOTICE file
diff --git a/src/spec/test/CommandChainsTest.groovy b/src/spec/test/CommandChainsTest.groovy
index 1185022..4ba4625 100644
--- a/src/spec/test/CommandChainsTest.groovy
+++ b/src/spec/test/CommandChainsTest.groovy
@@ -1,3 +1,5 @@
+import groovy.test.GroovyTestCase
+
 /*
  *  Licensed to the Apache Software Foundation (ASF) under one
  *  or more contributor license agreements.  See the NOTICE file
diff --git a/src/spec/test/CompilerDirectivesASTTransformsTest.groovy b/src/spec/test/CompilerDirectivesASTTransformsTest.groovy
index 8e72851..5d8c5bd 100644
--- a/src/spec/test/CompilerDirectivesASTTransformsTest.groovy
+++ b/src/spec/test/CompilerDirectivesASTTransformsTest.groovy
@@ -1,3 +1,5 @@
+import groovy.test.GroovyTestCase
+
 /*
  *  Licensed to the Apache Software Foundation (ASF) under one
  *  or more contributor license agreements.  See the NOTICE file
diff --git a/src/spec/test/CustomizersTest.groovy b/src/spec/test/CustomizersTest.groovy
index 73c9857..27b0a3a 100644
--- a/src/spec/test/CustomizersTest.groovy
+++ b/src/spec/test/CustomizersTest.groovy
@@ -16,6 +16,8 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
+
+import groovy.test.GroovyTestCase
 import groovy.transform.ConditionalInterrupt
 import groovy.util.logging.Log
 import org.codehaus.groovy.ast.ClassNode
diff --git a/src/spec/test/DeclarativeConcurrencyASTTransformsTest.groovy b/src/spec/test/DeclarativeConcurrencyASTTransformsTest.groovy
index 07ac669..60a218a 100644
--- a/src/spec/test/DeclarativeConcurrencyASTTransformsTest.groovy
+++ b/src/spec/test/DeclarativeConcurrencyASTTransformsTest.groovy
@@ -1,3 +1,5 @@
+import groovy.test.GroovyTestCase
+
 /*
  *  Licensed to the Apache Software Foundation (ASF) under one
  *  or more contributor license agreements.  See the NOTICE file
diff --git a/src/spec/test/DelegatesToSpecTest.groovy b/src/spec/test/DelegatesToSpecTest.groovy
index 0fdaca7..6eb65a1 100644
--- a/src/spec/test/DelegatesToSpecTest.groovy
+++ b/src/spec/test/DelegatesToSpecTest.groovy
@@ -16,6 +16,8 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
+
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.control.MultipleCompilationErrorsException
 
 class DelegatesToSpecTest extends GroovyTestCase {
diff --git a/src/spec/test/DesignPatternsTest.groovy b/src/spec/test/DesignPatternsTest.groovy
index 159626c..7f22a54 100644
--- a/src/spec/test/DesignPatternsTest.groovy
+++ b/src/spec/test/DesignPatternsTest.groovy
@@ -1558,7 +1558,7 @@ class DesignPatternsTest extends CompilableTestSupport {
                 }
             }
             // end::state_variation32[]
-
+            import groovy.test.GroovyTestCase
             // tag::state_variation33[]
             class StatePatternDslTest extends GroovyTestCase {
                 private fsm
diff --git a/src/spec/test/DifferencesFromJavaTest.groovy b/src/spec/test/DifferencesFromJavaTest.groovy
index 1161175..d3f935e 100644
--- a/src/spec/test/DifferencesFromJavaTest.groovy
+++ b/src/spec/test/DifferencesFromJavaTest.groovy
@@ -1,3 +1,5 @@
+import groovy.test.GroovyTestCase
+
 /*
  *  Licensed to the Apache Software Foundation (ASF) under one
  *  or more contributor license agreements.  See the NOTICE file
diff --git a/src/spec/test/ExtensionModuleSpecTest.groovy b/src/spec/test/ExtensionModuleSpecTest.groovy
index af1217b..f1b1ec0 100644
--- a/src/spec/test/ExtensionModuleSpecTest.groovy
+++ b/src/spec/test/ExtensionModuleSpecTest.groovy
@@ -1,3 +1,5 @@
+import groovy.test.GroovyTestCase
+
 /*
  *  Licensed to the Apache Software Foundation (ASF) under one
  *  or more contributor license agreements.  See the NOTICE file
diff --git a/src/spec/test/IntegrationTest.groovy b/src/spec/test/IntegrationTest.groovy
index 8933764..5919610 100644
--- a/src/spec/test/IntegrationTest.groovy
+++ b/src/spec/test/IntegrationTest.groovy
@@ -1,3 +1,5 @@
+import groovy.test.GroovyTestCase
+
 /*
  *  Licensed to the Apache Software Foundation (ASF) under one
  *  or more contributor license agreements.  See the NOTICE file
diff --git a/src/spec/test/LogImprovementsASTTransformsTest.groovy b/src/spec/test/LogImprovementsASTTransformsTest.groovy
index a979318..8e7ea59 100644
--- a/src/spec/test/LogImprovementsASTTransformsTest.groovy
+++ b/src/spec/test/LogImprovementsASTTransformsTest.groovy
@@ -1,3 +1,5 @@
+import groovy.test.GroovyTestCase
+
 /*
  *  Licensed to the Apache Software Foundation (ASF) under one
  *  or more contributor license agreements.  See the NOTICE file
diff --git a/src/spec/test/PackageTest.groovy b/src/spec/test/PackageTest.groovy
index 260a127..a143f6e 100644
--- a/src/spec/test/PackageTest.groovy
+++ b/src/spec/test/PackageTest.groovy
@@ -1,3 +1,5 @@
+import groovy.test.GroovyTestCase
+
 /*
  *  Licensed to the Apache Software Foundation (ASF) under one
  *  or more contributor license agreements.  See the NOTICE file
diff --git a/src/spec/test/PrimitiveTest.groovy b/src/spec/test/PrimitiveTest.groovy
index 2780fba..5fb5718 100644
--- a/src/spec/test/PrimitiveTest.groovy
+++ b/src/spec/test/PrimitiveTest.groovy
@@ -1,3 +1,5 @@
+import groovy.test.GroovyTestCase
+
 /*
  *  Licensed to the Apache Software Foundation (ASF) under one
  *  or more contributor license agreements.  See the NOTICE file
diff --git a/src/spec/test/SaferScriptingASTTransformsTest.groovy b/src/spec/test/SaferScriptingASTTransformsTest.groovy
index 55ff72b..2b490d6 100644
--- a/src/spec/test/SaferScriptingASTTransformsTest.groovy
+++ b/src/spec/test/SaferScriptingASTTransformsTest.groovy
@@ -1,3 +1,5 @@
+import groovy.test.GroovyTestCase
+
 /*
  *  Licensed to the Apache Software Foundation (ASF) under one
  *  or more contributor license agreements.  See the NOTICE file
diff --git a/src/spec/test/ScriptsAndClassesSpecTest.groovy b/src/spec/test/ScriptsAndClassesSpecTest.groovy
index 0364387..e36eaf2 100644
--- a/src/spec/test/ScriptsAndClassesSpecTest.groovy
+++ b/src/spec/test/ScriptsAndClassesSpecTest.groovy
@@ -1,3 +1,5 @@
+import groovy.test.GroovyTestCase
+
 /*
  *  Licensed to the Apache Software Foundation (ASF) under one
  *  or more contributor license agreements.  See the NOTICE file
diff --git a/src/spec/test/SwingASTTransformsTest.groovy b/src/spec/test/SwingASTTransformsTest.groovy
index 3c0d28a..090e327 100644
--- a/src/spec/test/SwingASTTransformsTest.groovy
+++ b/src/spec/test/SwingASTTransformsTest.groovy
@@ -1,3 +1,5 @@
+import groovy.test.GroovyTestCase
+
 /*
  *  Licensed to the Apache Software Foundation (ASF) under one
  *  or more contributor license agreements.  See the NOTICE file
diff --git a/src/spec/test/TestingASTTransformsTest.groovy b/src/spec/test/TestingASTTransformsTest.groovy
index 11197cc..7ee4155 100644
--- a/src/spec/test/TestingASTTransformsTest.groovy
+++ b/src/spec/test/TestingASTTransformsTest.groovy
@@ -16,10 +16,13 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
+import groovy.test.GroovyTestCase
+
 class TestingASTTransformsTest extends GroovyTestCase {
     void testNotYetImplemented() {
         assertScript '''// tag::notyetimplemented[]
-import groovy.transform.NotYetImplemented
+import groovy.test.GroovyTestCase
+import groovy.test.NotYetImplemented
 
 class Maths {
     static int fib(int n) {
diff --git a/src/spec/test/TraitsSpecificationTest.groovy b/src/spec/test/TraitsSpecificationTest.groovy
index a88e31e..dc887ef 100644
--- a/src/spec/test/TraitsSpecificationTest.groovy
+++ b/src/spec/test/TraitsSpecificationTest.groovy
@@ -16,6 +16,8 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
+
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.ast.ClassHelper
 import org.codehaus.groovy.ast.ClassNode
 
@@ -374,6 +376,7 @@ greet { 'Alice' }                           // <2>
     void testTraitOverrideBehavior() {
         assertScript '''
 // tag::forceoverride_header[]
+import groovy.test.GroovyTestCase
 import groovy.transform.CompileStatic
 import org.codehaus.groovy.control.CompilerConfiguration
 import org.codehaus.groovy.control.customizers.ASTTransformationCustomizer
diff --git a/src/spec/test/builder/FileTreeBuilderTest.groovy b/src/spec/test/builder/FileTreeBuilderTest.groovy
index 3a3c699..9910967 100644
--- a/src/spec/test/builder/FileTreeBuilderTest.groovy
+++ b/src/spec/test/builder/FileTreeBuilderTest.groovy
@@ -18,6 +18,8 @@
  */
 package builder
 
+import groovy.test.GroovyTestCase
+
 class FileTreeBuilderTest extends GroovyTestCase {
     File tmpDir
 
@@ -37,7 +39,7 @@ class FileTreeBuilderTest extends GroovyTestCase {
             }
             dir('test') {
                dir('groovy') {
-                  file('FooTest.groovy', 'class FooTest extends GroovyTestCase {}')
+                  file('FooTest.groovy', 'class FooTest extends groovy.test.GroovyTestCase {}')
                }
             }
          }
@@ -45,7 +47,7 @@ class FileTreeBuilderTest extends GroovyTestCase {
          
          // tag::example_assert[]
          assert new File(tmpDir, '/src/main/groovy/Foo.groovy').text == 'println "Hello"'
-         assert new File(tmpDir, '/src/test/groovy/FooTest.groovy').text == 'class FooTest extends GroovyTestCase {}'
+         assert new File(tmpDir, '/src/test/groovy/FooTest.groovy').text == 'class FooTest extends groovy.test.GroovyTestCase {}'
          // end::example_assert[]
     }
     
@@ -61,7 +63,7 @@ class FileTreeBuilderTest extends GroovyTestCase {
             }
             test {
                groovy {
-                  'FooTest.groovy'('class FooTest extends GroovyTestCase {}')
+                  'FooTest.groovy'('class FooTest extends groovy.test.GroovyTestCase {}')
                }
             }
          }
@@ -69,7 +71,7 @@ class FileTreeBuilderTest extends GroovyTestCase {
          
          // tag::shorthand_syntax_assert[]
          assert new File(tmpDir, '/src/main/groovy/Foo.groovy').text == 'println "Hello"'
-         assert new File(tmpDir, '/src/test/groovy/FooTest.groovy').text == 'class FooTest extends GroovyTestCase {}'
+         assert new File(tmpDir, '/src/test/groovy/FooTest.groovy').text == 'class FooTest extends groovy.test.GroovyTestCase {}'
          // end::shorthand_syntax_assert[]
     }    
  }
diff --git a/src/spec/test/builder/NodeBuilderTest.groovy b/src/spec/test/builder/NodeBuilderTest.groovy
index be2d385..bcc814d 100644
--- a/src/spec/test/builder/NodeBuilderTest.groovy
+++ b/src/spec/test/builder/NodeBuilderTest.groovy
@@ -18,6 +18,8 @@
  */
 package builder
 
+import groovy.test.GroovyTestCase
+
 class NodeBuilderTest extends GroovyTestCase {
 
     void testNodeBuilder() {
diff --git a/src/spec/test/builder/ObjectGraphBuilderTest.groovy b/src/spec/test/builder/ObjectGraphBuilderTest.groovy
index 3f3d987..d12748c 100644
--- a/src/spec/test/builder/ObjectGraphBuilderTest.groovy
+++ b/src/spec/test/builder/ObjectGraphBuilderTest.groovy
@@ -19,6 +19,7 @@
 package builder
 
 import asciidoctor.Utils
+import groovy.test.GroovyTestCase
 
 /**
 * Tests for ObjectGraphBuilder. The tests directly in this file are specific
diff --git a/src/spec/test/cli/CliBuilderTestCase.groovy b/src/spec/test/cli/CliBuilderTestCase.groovy
index 3fb9f88..0275988 100644
--- a/src/spec/test/cli/CliBuilderTestCase.groovy
+++ b/src/spec/test/cli/CliBuilderTestCase.groovy
@@ -18,6 +18,8 @@
  */
 package cli
 
+import groovy.test.GroovyTestCase
+
 abstract class CliBuilderTestCase extends GroovyTestCase {
 
     abstract String getImportCliBuilder()
diff --git a/src/spec/test/gdk/ConfigSlurperTest.groovy b/src/spec/test/gdk/ConfigSlurperTest.groovy
index 13e53d8..1ac7336 100644
--- a/src/spec/test/gdk/ConfigSlurperTest.groovy
+++ b/src/spec/test/gdk/ConfigSlurperTest.groovy
@@ -18,6 +18,8 @@
  */
 package gdk
 
+import groovy.test.GroovyTestCase
+
 class ConfigSlurperTest extends GroovyTestCase {
     void testWithArbitraryTypes() {
         // tag::arbitrary_types[]
diff --git a/src/spec/test/gdk/ExpandoTest.groovy b/src/spec/test/gdk/ExpandoTest.groovy
index ec75501..200bc3b 100644
--- a/src/spec/test/gdk/ExpandoTest.groovy
+++ b/src/spec/test/gdk/ExpandoTest.groovy
@@ -18,6 +18,8 @@
  */
 package gdk
 
+import groovy.test.GroovyTestCase
+
 class ExpandoTest extends GroovyTestCase {
     void testExpandoAddProperty() {
         // tag::expando_property[]
diff --git a/src/spec/test/gdk/ObservableTest.groovy b/src/spec/test/gdk/ObservableTest.groovy
index 2749ba1..a4c94ce 100644
--- a/src/spec/test/gdk/ObservableTest.groovy
+++ b/src/spec/test/gdk/ObservableTest.groovy
@@ -18,6 +18,8 @@
  */
 package gdk
 
+import groovy.test.GroovyTestCase
+
 import java.beans.PropertyChangeListener
 
 class ObservableTest extends GroovyTestCase {
diff --git a/src/spec/test/gdk/WorkingWithCollectionsTest.groovy b/src/spec/test/gdk/WorkingWithCollectionsTest.groovy
index a117ab1..46d8c74 100644
--- a/src/spec/test/gdk/WorkingWithCollectionsTest.groovy
+++ b/src/spec/test/gdk/WorkingWithCollectionsTest.groovy
@@ -18,6 +18,8 @@
  */
 package gdk
 
+import groovy.test.GroovyTestCase
+
 class WorkingWithCollectionsTest extends GroovyTestCase {
     void testListLiterals() {
         // tag::list_literals[]
diff --git a/src/spec/test/gdk/WorkingWithIOSpecTest.groovy b/src/spec/test/gdk/WorkingWithIOSpecTest.groovy
index ebd8102..8ad1cf8 100644
--- a/src/spec/test/gdk/WorkingWithIOSpecTest.groovy
+++ b/src/spec/test/gdk/WorkingWithIOSpecTest.groovy
@@ -16,12 +16,11 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-
-
 package gdk
 
 import groovy.io.FileType
 import groovy.io.FileVisitResult
+import groovy.test.GroovyTestCase
 import groovy.transform.CompileStatic
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/src/spec/test/metaprogramming/ASTMatcherFilteringTest.groovy b/src/spec/test/metaprogramming/ASTMatcherFilteringTest.groovy
index 5c40e5e..a208f9d 100644
--- a/src/spec/test/metaprogramming/ASTMatcherFilteringTest.groovy
+++ b/src/spec/test/metaprogramming/ASTMatcherFilteringTest.groovy
@@ -19,6 +19,7 @@
 
 package metaprogramming
 
+import groovy.test.GroovyTestCase
 import groovy.transform.CompileStatic
 import org.codehaus.groovy.ast.ASTNode
 import org.codehaus.groovy.ast.ClassCodeExpressionTransformer
diff --git a/src/spec/test/metaprogramming/ASTMatcherTestingTest.groovy b/src/spec/test/metaprogramming/ASTMatcherTestingTest.groovy
index d86101f..16fc0c6 100644
--- a/src/spec/test/metaprogramming/ASTMatcherTestingTest.groovy
+++ b/src/spec/test/metaprogramming/ASTMatcherTestingTest.groovy
@@ -19,6 +19,7 @@
 
 package metaprogramming
 
+import groovy.test.GroovyTestCase
 import groovy.transform.CompileDynamic
 import groovy.transform.CompileStatic
 import org.codehaus.groovy.ast.ASTNode
diff --git a/src/spec/test/metaprogramming/ASTXFormSpecTest.groovy b/src/spec/test/metaprogramming/ASTXFormSpecTest.groovy
index d5cc71e..7f99191 100644
--- a/src/spec/test/metaprogramming/ASTXFormSpecTest.groovy
+++ b/src/spec/test/metaprogramming/ASTXFormSpecTest.groovy
@@ -19,6 +19,7 @@
 package metaprogramming
 
 import asciidoctor.Utils
+import groovy.test.GroovyTestCase
 import groovy.transform.CompileStatic
 import org.codehaus.groovy.control.CompilationUnit
 import org.codehaus.groovy.control.CompilePhase
diff --git a/src/spec/test/metaprogramming/CategoryTest.groovy b/src/spec/test/metaprogramming/CategoryTest.groovy
index 8123cf7..16bd7b0 100644
--- a/src/spec/test/metaprogramming/CategoryTest.groovy
+++ b/src/spec/test/metaprogramming/CategoryTest.groovy
@@ -18,6 +18,7 @@
  */
 package metaprogramming
 
+import groovy.test.GroovyTestCase
 import groovy.time.TimeCategory
 
 class CategoryTest extends GroovyTestCase {
diff --git a/src/spec/test/metaprogramming/ExpandoMetaClassTest.groovy b/src/spec/test/metaprogramming/ExpandoMetaClassTest.groovy
index 03f1d1a..a3895a8 100644
--- a/src/spec/test/metaprogramming/ExpandoMetaClassTest.groovy
+++ b/src/spec/test/metaprogramming/ExpandoMetaClassTest.groovy
@@ -18,6 +18,8 @@
  */
 package metaprogramming
 
+import groovy.test.GroovyTestCase
+
 
 class ExpandoMetaClassTest extends GroovyTestCase {
 
diff --git a/src/spec/test/metaprogramming/GroovyObjectTest.groovy b/src/spec/test/metaprogramming/GroovyObjectTest.groovy
index 0d57857..29f73b2 100644
--- a/src/spec/test/metaprogramming/GroovyObjectTest.groovy
+++ b/src/spec/test/metaprogramming/GroovyObjectTest.groovy
@@ -18,6 +18,8 @@
  */
 package metaprogramming
 
+import groovy.test.GroovyTestCase
+
 class GroovyObjectTest extends GroovyTestCase {
     void testInvokeMethod() {
         assertScript '''
diff --git a/src/spec/test/metaprogramming/InterceptableTest.groovy b/src/spec/test/metaprogramming/InterceptableTest.groovy
index 9fbc184..e3fea05 100644
--- a/src/spec/test/metaprogramming/InterceptableTest.groovy
+++ b/src/spec/test/metaprogramming/InterceptableTest.groovy
@@ -18,6 +18,8 @@
  */
 package metaprogramming
 
+import groovy.test.GroovyTestCase
+
 // tag::groovy_interceptable_test[]
 class InterceptableTest extends GroovyTestCase {
 
diff --git a/src/spec/test/metaprogramming/InterceptionThroughMetaClassTest.groovy b/src/spec/test/metaprogramming/InterceptionThroughMetaClassTest.groovy
index ddd6349..8764a92 100644
--- a/src/spec/test/metaprogramming/InterceptionThroughMetaClassTest.groovy
+++ b/src/spec/test/metaprogramming/InterceptionThroughMetaClassTest.groovy
@@ -18,6 +18,7 @@
  */
 package metaprogramming
 
+import groovy.test.GroovyTestCase
 import groovy.xml.Entity
 
 // tag::meta_class_interception[]
diff --git a/src/spec/test/metaprogramming/MacroClassTest.groovy b/src/spec/test/metaprogramming/MacroClassTest.groovy
index 818ce43..1820bbb 100644
--- a/src/spec/test/metaprogramming/MacroClassTest.groovy
+++ b/src/spec/test/metaprogramming/MacroClassTest.groovy
@@ -19,6 +19,7 @@
 
 package metaprogramming
 
+import groovy.test.GroovyTestCase
 import groovy.transform.CompileDynamic
 import groovy.transform.CompileStatic
 import org.codehaus.groovy.ast.ASTNode
diff --git a/src/spec/test/metaprogramming/MacroExpressionTest.groovy b/src/spec/test/metaprogramming/MacroExpressionTest.groovy
index 4f36ab1..0c57bf8 100644
--- a/src/spec/test/metaprogramming/MacroExpressionTest.groovy
+++ b/src/spec/test/metaprogramming/MacroExpressionTest.groovy
@@ -19,6 +19,7 @@
 
 package metaprogramming
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.ast.ASTNode
 import org.codehaus.groovy.ast.ClassHelper
 import org.codehaus.groovy.ast.ClassNode
diff --git a/src/spec/test/metaprogramming/MacroStatementTest.groovy b/src/spec/test/metaprogramming/MacroStatementTest.groovy
index 541341c..a714f41 100644
--- a/src/spec/test/metaprogramming/MacroStatementTest.groovy
+++ b/src/spec/test/metaprogramming/MacroStatementTest.groovy
@@ -19,6 +19,7 @@
 
 package metaprogramming
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.ast.*
 import org.codehaus.groovy.ast.expr.ConstantExpression
 import org.codehaus.groovy.ast.stmt.ReturnStatement
diff --git a/src/spec/test/metaprogramming/MacroVariableSubstitutionTest.groovy b/src/spec/test/metaprogramming/MacroVariableSubstitutionTest.groovy
index b5be446..31a51bf 100644
--- a/src/spec/test/metaprogramming/MacroVariableSubstitutionTest.groovy
+++ b/src/spec/test/metaprogramming/MacroVariableSubstitutionTest.groovy
@@ -19,6 +19,7 @@
 
 package metaprogramming
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.ast.*
 import org.codehaus.groovy.ast.expr.VariableExpression
 import org.codehaus.groovy.ast.stmt.BlockStatement
diff --git a/src/spec/test/metaprogramming/MethodPropertyMissingTest.groovy b/src/spec/test/metaprogramming/MethodPropertyMissingTest.groovy
index beac888..c03aeb4 100644
--- a/src/spec/test/metaprogramming/MethodPropertyMissingTest.groovy
+++ b/src/spec/test/metaprogramming/MethodPropertyMissingTest.groovy
@@ -18,6 +18,8 @@
  */
 package metaprogramming
 
+import groovy.test.GroovyTestCase
+
 class MethodPropertyMissingTest extends GroovyTestCase {
 
     void testMethodMissing() {
diff --git a/src/spec/test/metaprogramming/StaticPropertyMissingAndMethodMissingTest.groovy b/src/spec/test/metaprogramming/StaticPropertyMissingAndMethodMissingTest.groovy
index f474646..57c4a6f 100644
--- a/src/spec/test/metaprogramming/StaticPropertyMissingAndMethodMissingTest.groovy
+++ b/src/spec/test/metaprogramming/StaticPropertyMissingAndMethodMissingTest.groovy
@@ -18,6 +18,8 @@
  */
 package metaprogramming
 
+import groovy.test.GroovyTestCase
+
 class StaticPropertyMissingAndMethodMissingTest extends GroovyTestCase {
 
     void testStaticMethodMissing() {
diff --git a/src/spec/test/objectorientation/MethodsTest.groovy b/src/spec/test/objectorientation/MethodsTest.groovy
index e89d263..a0278bb 100644
--- a/src/spec/test/objectorientation/MethodsTest.groovy
+++ b/src/spec/test/objectorientation/MethodsTest.groovy
@@ -18,6 +18,8 @@
  */
 package objectorientation
 
+import groovy.test.GroovyTestCase
+
 class MethodsTest extends GroovyTestCase {
 
     void testMethodDefinition() {
diff --git a/src/spec/test/semantics/GPathTest.groovy b/src/spec/test/semantics/GPathTest.groovy
index b61e8e0..2afeff4 100644
--- a/src/spec/test/semantics/GPathTest.groovy
+++ b/src/spec/test/semantics/GPathTest.groovy
@@ -18,7 +18,8 @@
  */
 package semantics
 
-import asciidoctor.Utils
+import groovy.test.GroovyTestCase
+import groovy.xml.XmlSlurper
 
 class GPathTest extends GroovyTestCase {
 
diff --git a/src/spec/test/semantics/LabelsTest.groovy b/src/spec/test/semantics/LabelsTest.groovy
index 0f79672..cf5f379 100644
--- a/src/spec/test/semantics/LabelsTest.groovy
+++ b/src/spec/test/semantics/LabelsTest.groovy
@@ -18,6 +18,8 @@
  */
 package semantics
 
+import groovy.test.GroovyTestCase
+
 class LabelsTest extends GroovyTestCase {
     void testLabels() {
         // tag::test_labels[]
diff --git a/src/spec/test/semantics/PowerAssertTest.groovy b/src/spec/test/semantics/PowerAssertTest.groovy
index cf4f77c..5e42027 100644
--- a/src/spec/test/semantics/PowerAssertTest.groovy
+++ b/src/spec/test/semantics/PowerAssertTest.groovy
@@ -19,6 +19,7 @@
 package semantics
 
 import asciidoctor.Utils
+import groovy.test.GroovyTestCase
 
 class PowerAssertTest extends GroovyTestCase {
     void testPowerAssert() {
diff --git a/src/spec/test/semantics/TheGroovyTruthTest.groovy b/src/spec/test/semantics/TheGroovyTruthTest.groovy
index e5ff99d..eb2791c 100644
--- a/src/spec/test/semantics/TheGroovyTruthTest.groovy
+++ b/src/spec/test/semantics/TheGroovyTruthTest.groovy
@@ -18,6 +18,8 @@
  */
 package semantics
 
+import groovy.test.GroovyTestCase
+
 class TheGroovyTruthTest extends GroovyTestCase {
 
     void testGroovyTruth() {
diff --git a/src/spec/test/testingguide/GDKMethodTests.groovy b/src/spec/test/testingguide/GDKMethodTests.groovy
index 9428570..e7b5892 100644
--- a/src/spec/test/testingguide/GDKMethodTests.groovy
+++ b/src/spec/test/testingguide/GDKMethodTests.groovy
@@ -18,6 +18,8 @@
  */
 package testingguide
 
+import groovy.test.GroovyTestCase
+
 class GDKMethodTests extends GroovyTestCase {
 
     // tag::combinations[]
diff --git a/src/spec/test/testingguide/GroovyTestCaseExampleTests.groovy b/src/spec/test/testingguide/GroovyTestCaseExampleTests.groovy
index cc6a98e..5634538 100644
--- a/src/spec/test/testingguide/GroovyTestCaseExampleTests.groovy
+++ b/src/spec/test/testingguide/GroovyTestCaseExampleTests.groovy
@@ -18,7 +18,8 @@
  */
 package testingguide
 
-import groovy.transform.NotYetImplemented
+import groovy.test.GroovyTestCase
+import groovy.test.NotYetImplemented
 
 class GroovyTestCaseExampleTests extends GroovyTestCase {
 
diff --git a/src/spec/test/testingguide/MockingExampleTests.groovy b/src/spec/test/testingguide/MockingExampleTests.groovy
index 88806b7..ae3da30 100644
--- a/src/spec/test/testingguide/MockingExampleTests.groovy
+++ b/src/spec/test/testingguide/MockingExampleTests.groovy
@@ -20,6 +20,7 @@ package testingguide
 
 import groovy.mock.interceptor.MockFor
 import groovy.mock.interceptor.StubFor
+import groovy.test.GroovyTestCase
 
 // tag::map_coercion[]
         class TranslationService {
diff --git a/src/spec/test/typing/OptionalTypingTest.groovy b/src/spec/test/typing/OptionalTypingTest.groovy
index c8a90e7..4f3fa72 100644
--- a/src/spec/test/typing/OptionalTypingTest.groovy
+++ b/src/spec/test/typing/OptionalTypingTest.groovy
@@ -18,6 +18,8 @@
  */
 package typing
 
+import groovy.test.GroovyTestCase
+
 class OptionalTypingTest extends GroovyTestCase {
 
     void testOptionalTypingInVariableDeclaration() {
diff --git a/src/spec/test/typing/StaticCompilationIntroTest.groovy b/src/spec/test/typing/StaticCompilationIntroTest.groovy
index 34d2643..1fad826 100644
--- a/src/spec/test/typing/StaticCompilationIntroTest.groovy
+++ b/src/spec/test/typing/StaticCompilationIntroTest.groovy
@@ -18,6 +18,8 @@
  */
 package typing
 
+import groovy.test.GroovyTestCase
+
 class StaticCompilationIntroTest extends GroovyTestCase {
 
     private static String TYPESAFE_PROGRAM = '''
diff --git a/src/spec/test/typing/TypeCheckingExtensionSpecTest.groovy b/src/spec/test/typing/TypeCheckingExtensionSpecTest.groovy
index cb1e4fa..e708b73 100644
--- a/src/spec/test/typing/TypeCheckingExtensionSpecTest.groovy
+++ b/src/spec/test/typing/TypeCheckingExtensionSpecTest.groovy
@@ -20,6 +20,7 @@ package typing
 
 import groovy.$Temp
 import groovy.test.GroovyAssert
+import groovy.test.GroovyTestCase
 import groovy.transform.TypeChecked
 import groovy.xml.MarkupBuilder
 import org.codehaus.groovy.control.CompilerConfiguration
diff --git a/src/tck/test/gls/ch03/s01/Unicode1.groovy b/src/tck/test/gls/ch03/s01/Unicode1.groovy
index 92984ab..60ebbab 100644
--- a/src/tck/test/gls/ch03/s01/Unicode1.groovy
+++ b/src/tck/test/gls/ch03/s01/Unicode1.groovy
@@ -16,7 +16,9 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package gls.ch03.s01;
+package gls.ch03.s01
+
+import groovy.test.GroovyTestCase
 
 /**
  * Except for comments, identifiers and the contents of ... string 
diff --git a/src/tck/test/gls/ch03/s01/Unicode2.groovy b/src/tck/test/gls/ch03/s01/Unicode2.groovy
index b845366..3baff7a 100644
--- a/src/tck/test/gls/ch03/s01/Unicode2.groovy
+++ b/src/tck/test/gls/ch03/s01/Unicode2.groovy
@@ -16,7 +16,9 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package gls.ch03.s01;
+package gls.ch03.s01
+
+import groovy.test.GroovyTestCase
 
 /**
  * Except for comments, identifiers and the contents of ... string 
diff --git a/src/tck/test/gls/ch03/s02/LexicalTranslation1.groovy b/src/tck/test/gls/ch03/s02/LexicalTranslation1.groovy
index 1c27135..c2eb29c 100644
--- a/src/tck/test/gls/ch03/s02/LexicalTranslation1.groovy
+++ b/src/tck/test/gls/ch03/s02/LexicalTranslation1.groovy
@@ -18,6 +18,8 @@
  */
 package gls.ch03.s02
 
+import groovy.test.GroovyTestCase
+
 /**
  * Checks Lexical Translation steps as defined in $3.2 of GLS
  */
diff --git a/src/tck/test/gls/ch03/s02/Longest1.groovy b/src/tck/test/gls/ch03/s02/Longest1.groovy
index 940f3c6..5e4c986 100644
--- a/src/tck/test/gls/ch03/s02/Longest1.groovy
+++ b/src/tck/test/gls/ch03/s02/Longest1.groovy
@@ -18,6 +18,8 @@
  */
 package gls.ch03.s02
 
+import groovy.test.GroovyTestCase
+
 /**
  * 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 
diff --git a/src/tck/test/gls/ch03/s03/UnicodeEscapes1.groovy b/src/tck/test/gls/ch03/s03/UnicodeEscapes1.groovy
index 3f23dfd..3024bf5 100644
--- a/src/tck/test/gls/ch03/s03/UnicodeEscapes1.groovy
+++ b/src/tck/test/gls/ch03/s03/UnicodeEscapes1.groovy
@@ -18,6 +18,8 @@
  */
 package gls.ch03.s03
 
+import groovy.test.GroovyTestCase
+
 /**
  * GLS 3.3:
  * Implementations first recognize Unicode escapes in their input, translating 
diff --git a/src/tck/test/gls/ch03/s03/UnicodeEscapes2.groovy b/src/tck/test/gls/ch03/s03/UnicodeEscapes2.groovy
index e78a3d7..55cd53e 100644
--- a/src/tck/test/gls/ch03/s03/UnicodeEscapes2.groovy
+++ b/src/tck/test/gls/ch03/s03/UnicodeEscapes2.groovy
@@ -18,6 +18,8 @@
  */
 package gls.ch03.s03
 
+import groovy.test.GroovyTestCase
+
 /**
  * GLS 3.3:
  * Implementations first recognize Unicode escapes in their input, translating 
diff --git a/src/test/gls/CompilableTestSupport.groovy b/src/test/gls/CompilableTestSupport.groovy
index eed62a5..183c575 100644
--- a/src/test/gls/CompilableTestSupport.groovy
+++ b/src/test/gls/CompilableTestSupport.groovy
@@ -18,6 +18,7 @@
  */
 package gls
 
+import groovy.test.GroovyTestCase
 import groovy.transform.CompileStatic
 import org.codehaus.groovy.control.CompilationFailedException
 
diff --git a/src/test/gls/annotations/closures/AnnotationClosureTest.groovy b/src/test/gls/annotations/closures/AnnotationClosureTest.groovy
index 08a36dc..3b8d5d1 100644
--- a/src/test/gls/annotations/closures/AnnotationClosureTest.groovy
+++ b/src/test/gls/annotations/closures/AnnotationClosureTest.groovy
@@ -19,7 +19,7 @@
 package gls.annotations.closures
 
 import gls.CompilableTestSupport
-import groovy.transform.NotYetImplemented
+import groovy.test.NotYetImplemented
 
 import java.lang.annotation.RetentionPolicy
 import java.lang.annotation.Retention
diff --git a/src/test/gls/annotations/closures/AnnotationClosureWithNonLocalVariable.groovy b/src/test/gls/annotations/closures/AnnotationClosureWithNonLocalVariable.groovy
index b60b733..c998caf 100644
--- a/src/test/gls/annotations/closures/AnnotationClosureWithNonLocalVariable.groovy
+++ b/src/test/gls/annotations/closures/AnnotationClosureWithNonLocalVariable.groovy
@@ -18,6 +18,8 @@
  */
 package gls.annotations.closures
 
+import groovy.test.GroovyTestCase
+
 class AnnotationClosureWithNonLocalVariable extends GroovyTestCase {
     
     void testVanillaVariable() {
diff --git a/src/test/gls/ch06/s05/GName1Test.groovy b/src/test/gls/ch06/s05/GName1Test.groovy
index 3c3e871..6f4dfbc 100644
--- a/src/test/gls/ch06/s05/GName1Test.groovy
+++ b/src/test/gls/ch06/s05/GName1Test.groovy
@@ -24,6 +24,7 @@ import gls.ch06.s05.testClasses.Tt1gi
 import gls.ch06.s05.testClasses.Tt1go
 import gls.ch06.s05.testClasses.Tt1
 import gls.ch06.s05.testClasses.Tt1c
+import groovy.test.GroovyTestCase
 
 class GName1Test extends GroovyTestCase {
   void testObjectSupportNameHandling() {
diff --git a/src/test/gls/closures/ResolveStrategyTest.groovy b/src/test/gls/closures/ResolveStrategyTest.groovy
index ea7cb8d..e9cb637 100644
--- a/src/test/gls/closures/ResolveStrategyTest.groovy
+++ b/src/test/gls/closures/ResolveStrategyTest.groovy
@@ -18,6 +18,7 @@
  */
 package gls.closures
 
+import groovy.test.GroovyTestCase
 import groovy.transform.CompileStatic
 import static groovy.lang.Closure.*
 
diff --git a/src/test/gls/innerClass/InnerClassTest.groovy b/src/test/gls/innerClass/InnerClassTest.groovy
index 6390075..7bfd0ab 100644
--- a/src/test/gls/innerClass/InnerClassTest.groovy
+++ b/src/test/gls/innerClass/InnerClassTest.groovy
@@ -18,7 +18,7 @@
  */
 package gls.innerClass
 
-import groovy.transform.NotYetImplemented
+import groovy.test.NotYetImplemented
 import org.codehaus.groovy.control.CompilationFailedException
 import org.junit.Test
 
diff --git a/src/test/gls/innerClass/InnerInterfaceTest.groovy b/src/test/gls/innerClass/InnerInterfaceTest.groovy
index 4ac2001..4021c42 100644
--- a/src/test/gls/innerClass/InnerInterfaceTest.groovy
+++ b/src/test/gls/innerClass/InnerInterfaceTest.groovy
@@ -18,6 +18,8 @@
  */
 package gls.innerClass
 
+import groovy.test.GroovyTestCase
+
 /**
  * Tests on inner interface usage
  */
diff --git a/src/test/gls/invocation/ClassDuplicationTest.groovy b/src/test/gls/invocation/ClassDuplicationTest.groovy
index 38c8c63..78139f3 100644
--- a/src/test/gls/invocation/ClassDuplicationTest.groovy
+++ b/src/test/gls/invocation/ClassDuplicationTest.groovy
@@ -18,6 +18,8 @@
  */
 package gls.invocation
 
+import groovy.test.GroovyTestCase
+
 final class ClassDuplicationTest extends GroovyTestCase {
     void testDuplicationOnMethodSignatureTest() {
         def shell1 = new GroovyShell(this.class.classLoader)
diff --git a/src/test/gls/invocation/DefaultParamTest.groovy b/src/test/gls/invocation/DefaultParamTest.groovy
index d7a501f..341e681 100644
--- a/src/test/gls/invocation/DefaultParamTest.groovy
+++ b/src/test/gls/invocation/DefaultParamTest.groovy
@@ -18,6 +18,7 @@
  */
 package gls.invocation
 
+import groovy.test.GroovyTestCase
 import groovy.transform.CompileStatic
 
 @CompileStatic
diff --git a/src/test/gls/scope/VariablePrecedenceTest.groovy b/src/test/gls/scope/VariablePrecedenceTest.groovy
index 16197d5..f93b62e 100644
--- a/src/test/gls/scope/VariablePrecedenceTest.groovy
+++ b/src/test/gls/scope/VariablePrecedenceTest.groovy
@@ -18,6 +18,8 @@
  */
 package gls.scope
 
+import groovy.test.GroovyTestCase
+
 /**
 *  test case based on GROOVY-3069
 */
diff --git a/src/test/gls/syntax/Gep3OrderDslTest.groovy b/src/test/gls/syntax/Gep3OrderDslTest.groovy
index 640beaa..8e5948f 100644
--- a/src/test/gls/syntax/Gep3OrderDslTest.groovy
+++ b/src/test/gls/syntax/Gep3OrderDslTest.groovy
@@ -18,6 +18,7 @@
  */
 package gls.syntax
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.control.CompilerConfiguration
 
 class Gep3OrderDslTest extends GroovyTestCase {
diff --git a/src/test/gls/syntax/Gep3Test.groovy b/src/test/gls/syntax/Gep3Test.groovy
index 1cfbfc0..2b100db 100644
--- a/src/test/gls/syntax/Gep3Test.groovy
+++ b/src/test/gls/syntax/Gep3Test.groovy
@@ -18,6 +18,8 @@
  */
 package gls.syntax
 
+import groovy.test.GroovyTestCase
+
 import static Container.*
 import static Ingredient.*
 import static CookingAction.*
diff --git a/src/test/groovy/ActorTest.groovy b/src/test/groovy/ActorTest.groovy
index 5ad0993..815626f 100644
--- a/src/test/groovy/ActorTest.groovy
+++ b/src/test/groovy/ActorTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 import java.util.concurrent.atomic.AtomicInteger
 import java.util.concurrent.locks.ReentrantLock
 import java.util.concurrent.LinkedBlockingQueue
diff --git a/src/test/groovy/AmbiguousInvocationTest.groovy b/src/test/groovy/AmbiguousInvocationTest.groovy
index 2172dc8..d4bb3dc 100644
--- a/src/test/groovy/AmbiguousInvocationTest.groovy
+++ b/src/test/groovy/AmbiguousInvocationTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 /**
  * to prove GROOVY-467 is no longer an issue    
  */
diff --git a/src/test/groovy/ArrayAutoboxingTest.groovy b/src/test/groovy/ArrayAutoboxingTest.groovy
index 80d3dbc..24c01f6 100644
--- a/src/test/groovy/ArrayAutoboxingTest.groovy
+++ b/src/test/groovy/ArrayAutoboxingTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class ArrayAutoboxingTest extends GroovyTestCase {
     
     void testUnwantedAutoboxingWhenInvokingMethods() {
diff --git a/src/test/groovy/ArrayCoerceTest.groovy b/src/test/groovy/ArrayCoerceTest.groovy
index 7bdb55b..6f84b27 100644
--- a/src/test/groovy/ArrayCoerceTest.groovy
+++ b/src/test/groovy/ArrayCoerceTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class ArrayCoerceTest extends GroovyTestCase {
 
     Object[] field
diff --git a/src/test/groovy/ArrayParamMethodTest.groovy b/src/test/groovy/ArrayParamMethodTest.groovy
index f565537..638c76f 100644
--- a/src/test/groovy/ArrayParamMethodTest.groovy
+++ b/src/test/groovy/ArrayParamMethodTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class ArrayParamMethodTest extends GroovyTestCase implements DummyInterface {
 
     void testMethodCall() {
diff --git a/src/test/groovy/ArrayTest.groovy b/src/test/groovy/ArrayTest.groovy
index d626153..c1456d5 100644
--- a/src/test/groovy/ArrayTest.groovy
+++ b/src/test/groovy/ArrayTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class ArrayTest extends GroovyTestCase {
 
     void testFixedSize() {
diff --git a/src/test/groovy/ArrayTypeTest.groovy b/src/test/groovy/ArrayTypeTest.groovy
index 48f213b..064fbff 100644
--- a/src/test/groovy/ArrayTypeTest.groovy
+++ b/src/test/groovy/ArrayTypeTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class ArrayTypeTest extends GroovyTestCase {
 
     void testClosureWithTypedParam() {
diff --git a/src/test/groovy/AsTest.groovy b/src/test/groovy/AsTest.groovy
index 7050059..ca0aa69 100644
--- a/src/test/groovy/AsTest.groovy
+++ b/src/test/groovy/AsTest.groovy
@@ -17,6 +17,9 @@
  *  under the License.
  */
 package groovy
+
+import groovy.test.GroovyTestCase
+
 /**
  * Test case for using the "as" keyword to convert between strings
  * and numbers in both directions.
diff --git a/src/test/groovy/AssertNumberTest.groovy b/src/test/groovy/AssertNumberTest.groovy
index 6ac6ff0..6d23c9f 100644
--- a/src/test/groovy/AssertNumberTest.groovy
+++ b/src/test/groovy/AssertNumberTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class AssertNumberTest extends GroovyTestCase {
 
     void testCompare() {
diff --git a/src/test/groovy/AssertTest.groovy b/src/test/groovy/AssertTest.groovy
index 26559ab..00baa57 100644
--- a/src/test/groovy/AssertTest.groovy
+++ b/src/test/groovy/AssertTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class AssertTest extends GroovyTestCase {
 
     void testAssert() {
diff --git a/src/test/groovy/Base64Test.groovy b/src/test/groovy/Base64Test.groovy
index 0904f86..e872414 100644
--- a/src/test/groovy/Base64Test.groovy
+++ b/src/test/groovy/Base64Test.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 import java.nio.charset.StandardCharsets
 
 class Base64Test extends GroovyTestCase {
diff --git a/src/test/groovy/BinaryStreamsTest.groovy b/src/test/groovy/BinaryStreamsTest.groovy
index 8c9e610..05c1b90 100755
--- a/src/test/groovy/BinaryStreamsTest.groovy
+++ b/src/test/groovy/BinaryStreamsTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 /**
  * Test case for DefaultGroovyMethods involving Object streams and data streams.
  */
diff --git a/src/test/groovy/BindingTest.groovy b/src/test/groovy/BindingTest.groovy
index 7f69afc..892a736 100644
--- a/src/test/groovy/BindingTest.groovy
+++ b/src/test/groovy/BindingTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class BindingTest extends GroovyTestCase {
 
     void testProperties() {
diff --git a/src/test/groovy/BitSetTest.groovy b/src/test/groovy/BitSetTest.groovy
index 5d21195..9910fca 100644
--- a/src/test/groovy/BitSetTest.groovy
+++ b/src/test/groovy/BitSetTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class BitSetTest extends GroovyTestCase{
 
     void testSubscriptOperator() {
diff --git a/src/test/groovy/CallInnerClassCtorTest.groovy b/src/test/groovy/CallInnerClassCtorTest.groovy
index e422d5c..9c16624 100644
--- a/src/test/groovy/CallInnerClassCtorTest.groovy
+++ b/src/test/groovy/CallInnerClassCtorTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 /**
  * Checks that it's possible to call inner classes constructor from groovy
  */
diff --git a/src/test/groovy/CastTest.groovy b/src/test/groovy/CastTest.groovy
index 217d325..ef4a4f5 100644
--- a/src/test/groovy/CastTest.groovy
+++ b/src/test/groovy/CastTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class CastTest extends GroovyTestCase {
 
     Short b = 1
diff --git a/src/test/groovy/CategoryTest.groovy b/src/test/groovy/CategoryTest.groovy
index efec30c..56bd4e1 100644
--- a/src/test/groovy/CategoryTest.groovy
+++ b/src/test/groovy/CategoryTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class CategoryTest extends GroovyTestCase {
 
     void setUp() {
diff --git a/src/test/groovy/ChainedAssignmentTest.groovy b/src/test/groovy/ChainedAssignmentTest.groovy
index 21243d3..19badc3 100644
--- a/src/test/groovy/ChainedAssignmentTest.groovy
+++ b/src/test/groovy/ChainedAssignmentTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class ChainedAssignmentTest extends GroovyTestCase {
 
     def dummy(v) {
diff --git a/src/test/groovy/ClassExpressionTest.groovy b/src/test/groovy/ClassExpressionTest.groovy
index 69bcf05..29c664d 100644
--- a/src/test/groovy/ClassExpressionTest.groovy
+++ b/src/test/groovy/ClassExpressionTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 /** 
  * Tests the use of classes as variable expressions
  */
diff --git a/src/test/groovy/ClassLoaderBug.groovy b/src/test/groovy/ClassLoaderBug.groovy
index 56371d0..256f334 100644
--- a/src/test/groovy/ClassLoaderBug.groovy
+++ b/src/test/groovy/ClassLoaderBug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class ClassLoaderBug extends GroovyTestCase {
     
     static void main(args) {
diff --git a/src/test/groovy/ClassTest.groovy b/src/test/groovy/ClassTest.groovy
index 38931cb..8795c28 100644
--- a/src/test/groovy/ClassTest.groovy
+++ b/src/test/groovy/ClassTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class ClassTest extends GroovyTestCase {
 
     void testClassExpression() {
diff --git a/src/test/groovy/ClosureAsParamTest.groovy b/src/test/groovy/ClosureAsParamTest.groovy
index 03a0071..f4cc09d 100644
--- a/src/test/groovy/ClosureAsParamTest.groovy
+++ b/src/test/groovy/ClosureAsParamTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 import java.util.concurrent.Callable
 
 /**
diff --git a/src/test/groovy/ClosureCloneTest.groovy b/src/test/groovy/ClosureCloneTest.groovy
index adbe57b..8a96763 100644
--- a/src/test/groovy/ClosureCloneTest.groovy
+++ b/src/test/groovy/ClosureCloneTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class ClosureCloneTest extends GroovyTestCase {
 
     void testCloneOfClosure() {
diff --git a/src/test/groovy/ClosureComparatorTest.groovy b/src/test/groovy/ClosureComparatorTest.groovy
index e0f7c3d..d46bc36 100644
--- a/src/test/groovy/ClosureComparatorTest.groovy
+++ b/src/test/groovy/ClosureComparatorTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 /**
  * Tests for ClosureComparator
  */
diff --git a/src/test/groovy/ClosureComposeTest.groovy b/src/test/groovy/ClosureComposeTest.groovy
index 75eaab1..6814105 100644
--- a/src/test/groovy/ClosureComposeTest.groovy
+++ b/src/test/groovy/ClosureComposeTest.groovy
@@ -18,6 +18,7 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
 import groovy.transform.CompileStatic
 
 import java.util.function.Function
diff --git a/src/test/groovy/ClosureCurryTest.groovy b/src/test/groovy/ClosureCurryTest.groovy
index 5bdfb42..57bb4e0 100644
--- a/src/test/groovy/ClosureCurryTest.groovy
+++ b/src/test/groovy/ClosureCurryTest.groovy
@@ -18,6 +18,7 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.runtime.DefaultGroovyMethods
 
 /**
diff --git a/src/test/groovy/ClosureDefaultParameterTest.groovy b/src/test/groovy/ClosureDefaultParameterTest.groovy
index e9f8255..0e70575 100644
--- a/src/test/groovy/ClosureDefaultParameterTest.groovy
+++ b/src/test/groovy/ClosureDefaultParameterTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class ClosureDefaultParameterTest extends GroovyTestCase {
 
     void testClosureWithDefaultParams() {
diff --git a/src/test/groovy/ClosureInClosureTest.groovy b/src/test/groovy/ClosureInClosureTest.groovy
index 8941cad..ac05370 100644
--- a/src/test/groovy/ClosureInClosureTest.groovy
+++ b/src/test/groovy/ClosureInClosureTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 /**
  * Bug illustrating the nested closures variable scope visibility issue.
  * l.each is ClosureInClosureBug$1 and it.each is ClosureInClosureBug$2
diff --git a/src/test/groovy/ClosureInStaticMethodTest.groovy b/src/test/groovy/ClosureInStaticMethodTest.groovy
index 4b3766a..775cb9c 100644
--- a/src/test/groovy/ClosureInStaticMethodTest.groovy
+++ b/src/test/groovy/ClosureInStaticMethodTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class ClosureInStaticMethodTest extends GroovyTestCase {
 
     void testClosureInStaticMethod() {
diff --git a/src/test/groovy/ClosureMethodCallTest.groovy b/src/test/groovy/ClosureMethodCallTest.groovy
index e9a24b5..d442373 100644
--- a/src/test/groovy/ClosureMethodCallTest.groovy
+++ b/src/test/groovy/ClosureMethodCallTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class ClosureMethodCallTest extends GroovyTestCase {
 
     void testCallingClosureWithMultipleArguments() {
diff --git a/src/test/groovy/ClosureMethodTest.groovy b/src/test/groovy/ClosureMethodTest.groovy
index 65a8438..e908629 100644
--- a/src/test/groovy/ClosureMethodTest.groovy
+++ b/src/test/groovy/ClosureMethodTest.groovy
@@ -18,6 +18,7 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.runtime.DefaultGroovyMethods as DGM
 
 /**
diff --git a/src/test/groovy/ClosureMethodsOnFileTest.groovy b/src/test/groovy/ClosureMethodsOnFileTest.groovy
index 0d6f90f..b89aa86 100644
--- a/src/test/groovy/ClosureMethodsOnFileTest.groovy
+++ b/src/test/groovy/ClosureMethodsOnFileTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 /**
  * Tests various Closure methods in Groovy on file
  */
diff --git a/src/test/groovy/ClosureMissingMethodTest.groovy b/src/test/groovy/ClosureMissingMethodTest.groovy
index f16d58d..41d24eb 100644
--- a/src/test/groovy/ClosureMissingMethodTest.groovy
+++ b/src/test/groovy/ClosureMissingMethodTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class ClosureMissingMethodTest extends GroovyTestCase {
 
     void testInScript() {
diff --git a/src/test/groovy/ClosureReturnTest.groovy b/src/test/groovy/ClosureReturnTest.groovy
index 3842e56..2f52b71 100644
--- a/src/test/groovy/ClosureReturnTest.groovy
+++ b/src/test/groovy/ClosureReturnTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 /**
  * Tests Closures in Groovy
  */
diff --git a/src/test/groovy/ClosureReturnWithoutReturnStatementTest.groovy b/src/test/groovy/ClosureReturnWithoutReturnStatementTest.groovy
index 66ff192..c05a19e 100644
--- a/src/test/groovy/ClosureReturnWithoutReturnStatementTest.groovy
+++ b/src/test/groovy/ClosureReturnWithoutReturnStatementTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class ClosureReturnWithoutReturnStatementTest extends GroovyTestCase {
 
     void testReturnValues() {
diff --git a/src/test/groovy/ClosureSugarTest.groovy b/src/test/groovy/ClosureSugarTest.groovy
index 569d705..613c7d8 100644
--- a/src/test/groovy/ClosureSugarTest.groovy
+++ b/src/test/groovy/ClosureSugarTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class ClosureSugarTest extends GroovyTestCase {
 
     def count;
diff --git a/src/test/groovy/ClosureTest.groovy b/src/test/groovy/ClosureTest.groovy
index b4d9607..e8b4f7d 100644
--- a/src/test/groovy/ClosureTest.groovy
+++ b/src/test/groovy/ClosureTest.groovy
@@ -18,6 +18,7 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.control.MultipleCompilationErrorsException
 
 import static groovy.lang.Closure.IDENTITY
diff --git a/src/test/groovy/ClosureUsingOuterVariablesTest.groovy b/src/test/groovy/ClosureUsingOuterVariablesTest.groovy
index 3aa87a5..8d39d16 100644
--- a/src/test/groovy/ClosureUsingOuterVariablesTest.groovy
+++ b/src/test/groovy/ClosureUsingOuterVariablesTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class ClosureUsingOuterVariablesTest extends GroovyTestCase {
 
     void testUseOfOuterVariable() {
diff --git a/src/test/groovy/ClosureWithDefaultParamTest.groovy b/src/test/groovy/ClosureWithDefaultParamTest.groovy
index 567e5c3..78c57e0 100644
--- a/src/test/groovy/ClosureWithDefaultParamTest.groovy
+++ b/src/test/groovy/ClosureWithDefaultParamTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 /**
  * Demonstrates the use of the default named parameter in a closure
  */
diff --git a/src/test/groovy/ClosureWithEmptyParametersTest.groovy b/src/test/groovy/ClosureWithEmptyParametersTest.groovy
index ab14a84..b844f6a 100644
--- a/src/test/groovy/ClosureWithEmptyParametersTest.groovy
+++ b/src/test/groovy/ClosureWithEmptyParametersTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class ClosureWithEmptyParametersTest extends GroovyTestCase {
 
     void testNoParams() {
diff --git a/src/test/groovy/CollateTest.groovy b/src/test/groovy/CollateTest.groovy
index ca27560..4a032be 100644
--- a/src/test/groovy/CollateTest.groovy
+++ b/src/test/groovy/CollateTest.groovy
@@ -18,6 +18,8 @@
  */
  package groovy
 
+import groovy.test.GroovyTestCase
+
 class CollateTest extends GroovyTestCase {
   void testSimple() {
     def list = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]
diff --git a/src/test/groovy/CompareEqualsTest.groovy b/src/test/groovy/CompareEqualsTest.groovy
index ab9d056..090d678 100644
--- a/src/test/groovy/CompareEqualsTest.groovy
+++ b/src/test/groovy/CompareEqualsTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class CompareEqualsTest extends GroovyTestCase {
     void testEqualsOperatorIsMultimethodAware() {
         assert new Xyz() == new Xyz()
diff --git a/src/test/groovy/CompareToTest.groovy b/src/test/groovy/CompareToTest.groovy
index d144503..c8a94a2 100644
--- a/src/test/groovy/CompareToTest.groovy
+++ b/src/test/groovy/CompareToTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class CompareToTest extends GroovyTestCase {
 
     void testCompareTo() {
diff --git a/src/test/groovy/CompareTypesTest.groovy b/src/test/groovy/CompareTypesTest.groovy
index 1a98010..02b0d8d 100644
--- a/src/test/groovy/CompareTypesTest.groovy
+++ b/src/test/groovy/CompareTypesTest.groovy
@@ -18,9 +18,11 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 /**
  */
-class CompareTypesTest extends GroovyTestCase { 
+class CompareTypesTest extends GroovyTestCase {
     void testCompareByteToInt() { 
         Byte a = 12
         Integer b = 10
diff --git a/src/test/groovy/CompileOrderTest.groovy b/src/test/groovy/CompileOrderTest.groovy
index 2fa008c..72f0e16 100644
--- a/src/test/groovy/CompileOrderTest.groovy
+++ b/src/test/groovy/CompileOrderTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class CompileOrderTest extends GroovyTestCase {
    void testCompileOrder() {
       def interfaceFile = File.createTempFile("TestOrderInterface", ".groovy", new File("target"))
diff --git a/src/test/groovy/CompilerErrorTest.groovy b/src/test/groovy/CompilerErrorTest.groovy
index 21b67be..59b5a41 100644
--- a/src/test/groovy/CompilerErrorTest.groovy
+++ b/src/test/groovy/CompilerErrorTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class CompilerErrorTest extends GroovyTestCase {
 
     void testBadMethodName() {
diff --git a/src/test/groovy/Constructor2Test.groovy b/src/test/groovy/Constructor2Test.groovy
index 7fb042c..6ae4255 100644
--- a/src/test/groovy/Constructor2Test.groovy
+++ b/src/test/groovy/Constructor2Test.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class Constructor2Test extends GroovyTestCase {
 
     Constructor2Test() { }
diff --git a/src/test/groovy/ConstructorTest.groovy b/src/test/groovy/ConstructorTest.groovy
index b22d0c3..e232ed2 100644
--- a/src/test/groovy/ConstructorTest.groovy
+++ b/src/test/groovy/ConstructorTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class ConstructorTest extends GroovyTestCase {
 
     public ConstructorTest() { }
diff --git a/src/test/groovy/CurlyBracketLayoutTest.groovy b/src/test/groovy/CurlyBracketLayoutTest.groovy
index 64d8745..d1c0ed7 100644
--- a/src/test/groovy/CurlyBracketLayoutTest.groovy
+++ b/src/test/groovy/CurlyBracketLayoutTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class CurlyBracketLayoutTest extends GroovyTestCase
 {
     void testBracketPlacement()
diff --git a/src/test/groovy/DefaultParamClosureTest.groovy b/src/test/groovy/DefaultParamClosureTest.groovy
index fb90f23..611ac44 100644
--- a/src/test/groovy/DefaultParamClosureTest.groovy
+++ b/src/test/groovy/DefaultParamClosureTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class DefaultParamClosureTest extends GroovyTestCase {
 
     void testDefaultParameters() {
diff --git a/src/test/groovy/DoWhileLoopTest.groovy b/src/test/groovy/DoWhileLoopTest.groovy
index 8dc789f..86d9e06 100644
--- a/src/test/groovy/DoWhileLoopTest.groovy
+++ b/src/test/groovy/DoWhileLoopTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class DoWhileLoopTest extends GroovyTestCase {
 
     void testDoWhileWhile() {
diff --git a/src/test/groovy/DollarEscapingTest.groovy b/src/test/groovy/DollarEscapingTest.groovy
index 7cc4988..05e31d0 100644
--- a/src/test/groovy/DollarEscapingTest.groovy
+++ b/src/test/groovy/DollarEscapingTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class DollarEscapingTest extends GroovyTestCase {
 
     void testEscaping() {
diff --git a/src/test/groovy/DownUpStepTest.groovy b/src/test/groovy/DownUpStepTest.groovy
index f061525..8a58a76 100644
--- a/src/test/groovy/DownUpStepTest.groovy
+++ b/src/test/groovy/DownUpStepTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 public class DownUpStepTest extends GroovyTestCase {
 
     void testDownto() {
diff --git a/src/test/groovy/DynamicMemberTest.groovy b/src/test/groovy/DynamicMemberTest.groovy
index 075029a..5599bd5 100644
--- a/src/test/groovy/DynamicMemberTest.groovy
+++ b/src/test/groovy/DynamicMemberTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class DynamicMemberTest extends GroovyTestCase {
   def aTestMethod(o){o}
   def aProperty
diff --git a/src/test/groovy/EqualsTest.groovy b/src/test/groovy/EqualsTest.groovy
index afe20f4..ee019fb 100644
--- a/src/test/groovy/EqualsTest.groovy
+++ b/src/test/groovy/EqualsTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyShellTestCase
+
 class EqualsTest extends GroovyShellTestCase {
 
     void testParentChildrenEquals() {
diff --git a/src/test/groovy/EscapedUnicodeTest.groovy b/src/test/groovy/EscapedUnicodeTest.groovy
index af64aaa..cf92d59 100644
--- a/src/test/groovy/EscapedUnicodeTest.groovy
+++ b/src/test/groovy/EscapedUnicodeTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class EscapedUnicodeTest extends GroovyTestCase {
     void testNothing() {}
 }
diff --git a/src/test/groovy/ExceptionInClosureTest.groovy b/src/test/groovy/ExceptionInClosureTest.groovy
index 42c2690..2d48654 100644
--- a/src/test/groovy/ExceptionInClosureTest.groovy
+++ b/src/test/groovy/ExceptionInClosureTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 /**
  * Tests exception handling inside of a closure
  */
diff --git a/src/test/groovy/ExpandoPropertyTest.groovy b/src/test/groovy/ExpandoPropertyTest.groovy
index fcd27a0..8d97da8 100644
--- a/src/test/groovy/ExpandoPropertyTest.groovy
+++ b/src/test/groovy/ExpandoPropertyTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class ExpandoPropertyTest extends GroovyTestCase {
 
     void testExpandoProperty() {
diff --git a/src/test/groovy/FileTest.groovy b/src/test/groovy/FileTest.groovy
index 9e9fe11..a38d0ea 100644
--- a/src/test/groovy/FileTest.groovy
+++ b/src/test/groovy/FileTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 import static groovy.io.FileType.*
 import static groovy.io.FileVisitResult.*
 
diff --git a/src/test/groovy/FilterLineTest.groovy b/src/test/groovy/FilterLineTest.groovy
index 1611e40..13cce3d 100644
--- a/src/test/groovy/FilterLineTest.groovy
+++ b/src/test/groovy/FilterLineTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 /**
  * check that the new filterLine() method on InputStream is ok
  * (and indirectly test newReader() method on InputStream)
diff --git a/src/test/groovy/FinallyTest.groovy b/src/test/groovy/FinallyTest.groovy
index 4b785bd..e07cfc5 100644
--- a/src/test/groovy/FinallyTest.groovy
+++ b/src/test/groovy/FinallyTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class FinallyTest extends GroovyTestCase {
 
     void testBreakInTry() {
diff --git a/src/test/groovy/ForLoopWithLocalVariablesTest.groovy b/src/test/groovy/ForLoopWithLocalVariablesTest.groovy
index 7062e2b..647b608 100644
--- a/src/test/groovy/ForLoopWithLocalVariablesTest.groovy
+++ b/src/test/groovy/ForLoopWithLocalVariablesTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 /**
  * Tests iterating with local variables
  */
diff --git a/src/test/groovy/GStringTest.groovy b/src/test/groovy/GStringTest.groovy
index 5e58e14..d334db9 100644
--- a/src/test/groovy/GStringTest.groovy
+++ b/src/test/groovy/GStringTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class GStringTest extends GroovyTestCase {
 
     void check(template, teststr) {
diff --git a/src/test/groovy/GeneratorTest.groovy b/src/test/groovy/GeneratorTest.groovy
index ac76ac7..369e191 100644
--- a/src/test/groovy/GeneratorTest.groovy
+++ b/src/test/groovy/GeneratorTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class GeneratorTest extends GroovyTestCase {
 
     void testGenerator() {
diff --git a/src/test/groovy/GlobalPrintlnTest.groovy b/src/test/groovy/GlobalPrintlnTest.groovy
index 06ca4ea..21d5701 100644
--- a/src/test/groovy/GlobalPrintlnTest.groovy
+++ b/src/test/groovy/GlobalPrintlnTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class GlobalPrintlnTest extends GroovyTestCase {
 
     void testGlobalPrintln() {
diff --git a/src/test/groovy/GroovyCharSequenceMethodsTest.groovy b/src/test/groovy/GroovyCharSequenceMethodsTest.groovy
index 8dc83e6..e247d5e 100644
--- a/src/test/groovy/GroovyCharSequenceMethodsTest.groovy
+++ b/src/test/groovy/GroovyCharSequenceMethodsTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 /**
  * Tests for DGM methods on CharSequence.
  */
diff --git a/src/test/groovy/GroovyClosureMethodsTest.groovy b/src/test/groovy/GroovyClosureMethodsTest.groovy
index f43a7b5..849a639 100644
--- a/src/test/groovy/GroovyClosureMethodsTest.groovy
+++ b/src/test/groovy/GroovyClosureMethodsTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 import java.util.concurrent.CountDownLatch
 import java.util.concurrent.TimeUnit
 
diff --git a/src/test/groovy/GroovyInterceptableTest.groovy b/src/test/groovy/GroovyInterceptableTest.groovy
index 2817075..a667bc0 100644
--- a/src/test/groovy/GroovyInterceptableTest.groovy
+++ b/src/test/groovy/GroovyInterceptableTest.groovy
@@ -18,6 +18,7 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.runtime.ReflectionMethodInvoker
 
 class GroovyInterceptableTest extends GroovyTestCase {
diff --git a/src/test/groovy/GroovyMethodsTest.groovy b/src/test/groovy/GroovyMethodsTest.groovy
index dd31077..fcbf3dd 100644
--- a/src/test/groovy/GroovyMethodsTest.groovy
+++ b/src/test/groovy/GroovyMethodsTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 import java.awt.Dimension
 import java.nio.CharBuffer
 import java.util.concurrent.LinkedBlockingQueue
diff --git a/src/test/groovy/GroovyTruthTest.groovy b/src/test/groovy/GroovyTruthTest.groovy
index e602125..f23e324 100644
--- a/src/test/groovy/GroovyTruthTest.groovy
+++ b/src/test/groovy/GroovyTruthTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class GroovyTruthTest extends GroovyTestCase {
 
     void testTruth() {
diff --git a/src/test/groovy/HeredocsTest.groovy b/src/test/groovy/HeredocsTest.groovy
index dbdb4c7..66b08dd 100644
--- a/src/test/groovy/HeredocsTest.groovy
+++ b/src/test/groovy/HeredocsTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class HeredocsTest extends GroovyTestCase {
 
     void testHeredocs() {
diff --git a/src/test/groovy/HexTest.groovy b/src/test/groovy/HexTest.groovy
index aa76b5d..c97fea5 100644
--- a/src/test/groovy/HexTest.groovy
+++ b/src/test/groovy/HexTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 /**
  * Test cases for encodeHex methods in DefaultGroovyMethods
  */
diff --git a/src/test/groovy/HomepageTest.groovy b/src/test/groovy/HomepageTest.groovy
index 57a1f81..676e56d 100644
--- a/src/test/groovy/HomepageTest.groovy
+++ b/src/test/groovy/HomepageTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class HomepageTest extends GroovyTestCase {
 
     void testHomePage() {
diff --git a/src/test/groovy/IdentityClosureTest.groovy b/src/test/groovy/IdentityClosureTest.groovy
index 65599b8..8431e31 100644
--- a/src/test/groovy/IdentityClosureTest.groovy
+++ b/src/test/groovy/IdentityClosureTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 /**
  * Check that Object.identity(Closure) method works as expected
  */
diff --git a/src/test/groovy/IfElseCompactTest.groovy b/src/test/groovy/IfElseCompactTest.groovy
index c3cbdf1..1c3b67b 100644
--- a/src/test/groovy/IfElseCompactTest.groovy
+++ b/src/test/groovy/IfElseCompactTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class IfElseCompactTest extends GroovyTestCase {
 
     void testIf_NoElse() {
diff --git a/src/test/groovy/IfElseTest.groovy b/src/test/groovy/IfElseTest.groovy
index 63fbcf2..d050678 100644
--- a/src/test/groovy/IfElseTest.groovy
+++ b/src/test/groovy/IfElseTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class IfElseTest extends GroovyTestCase {
 
     void testIf_NoElse() {
diff --git a/src/test/groovy/IfPropertyTest.groovy b/src/test/groovy/IfPropertyTest.groovy
index 820a305..3172f59 100644
--- a/src/test/groovy/IfPropertyTest.groovy
+++ b/src/test/groovy/IfPropertyTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class IfPropertyTest extends GroovyTestCase {
 
     def dummy
diff --git a/src/test/groovy/IfTest.groovy b/src/test/groovy/IfTest.groovy
index c742260..2e24e8d 100644
--- a/src/test/groovy/IfTest.groovy
+++ b/src/test/groovy/IfTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class IfTest extends GroovyTestCase {
 
     void testUsingNumber() {
diff --git a/src/test/groovy/IfWithMethodCallTest.groovy b/src/test/groovy/IfWithMethodCallTest.groovy
index 77c4b58..8f3574a 100644
--- a/src/test/groovy/IfWithMethodCallTest.groovy
+++ b/src/test/groovy/IfWithMethodCallTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class IfWithMethodCallTest extends GroovyTestCase {
 
     void testIfWithMethodCall() {
diff --git a/src/test/groovy/IllegalAccessScenariosTest.groovy b/src/test/groovy/IllegalAccessScenariosTest.groovy
index 44096b0..cc1db54 100644
--- a/src/test/groovy/IllegalAccessScenariosTest.groovy
+++ b/src/test/groovy/IllegalAccessScenariosTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 import static groovy.test.GroovyAssert.isAtLeastJdk
 import static org.apache.groovy.util.SystemUtil.getBooleanSafe
 
diff --git a/src/test/groovy/ImportTest.groovy b/src/test/groovy/ImportTest.groovy
index 8eda3b9..bece387 100644
--- a/src/test/groovy/ImportTest.groovy
+++ b/src/test/groovy/ImportTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class ImportTest extends GroovyTestCase {
 
     void testImportAll() {
diff --git a/src/test/groovy/InstanceofTest.groovy b/src/test/groovy/InstanceofTest.groovy
index 262d846..301852a 100644
--- a/src/test/groovy/InstanceofTest.groovy
+++ b/src/test/groovy/InstanceofTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class InstanceofTest extends GroovyTestCase {
 
     void testTrue() {
diff --git a/src/test/groovy/InvokeNormalMethodsFirstTest.groovy b/src/test/groovy/InvokeNormalMethodsFirstTest.groovy
index c3a179a..d624bc5 100644
--- a/src/test/groovy/InvokeNormalMethodsFirstTest.groovy
+++ b/src/test/groovy/InvokeNormalMethodsFirstTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 /**
  * Invoke normal methods first: if no statically typed method exist, use invokeMethod().
  */
diff --git a/src/test/groovy/KeywordsInPropertyNamesTest.groovy b/src/test/groovy/KeywordsInPropertyNamesTest.groovy
index 12fdde7..b2fe103 100644
--- a/src/test/groovy/KeywordsInPropertyNamesTest.groovy
+++ b/src/test/groovy/KeywordsInPropertyNamesTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class KeywordsInPropertyNamesTest extends GroovyTestCase {
 
     void testKeywords() {
diff --git a/src/test/groovy/LeftShiftTest.groovy b/src/test/groovy/LeftShiftTest.groovy
index fef784c..94926af 100644
--- a/src/test/groovy/LeftShiftTest.groovy
+++ b/src/test/groovy/LeftShiftTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class LeftShiftTest extends GroovyTestCase {
 
     def foo = [1, 2, 3]
diff --git a/src/test/groovy/ListIteratingTest.groovy b/src/test/groovy/ListIteratingTest.groovy
index c553e28..0f48c43 100644
--- a/src/test/groovy/ListIteratingTest.groovy
+++ b/src/test/groovy/ListIteratingTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 /** 
  * Tests iterating using Groovy
  */
diff --git a/src/test/groovy/ListTest.groovy b/src/test/groovy/ListTest.groovy
index 08fcb77..5e3860d 100644
--- a/src/test/groovy/ListTest.groovy
+++ b/src/test/groovy/ListTest.groovy
@@ -18,6 +18,7 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
 import groovy.transform.TypeChecked
 
 class ListTest extends GroovyTestCase {
diff --git a/src/test/groovy/LiteralTypesTest.groovy b/src/test/groovy/LiteralTypesTest.groovy
index 4a792cd..454db9c 100644
--- a/src/test/groovy/LiteralTypesTest.groovy
+++ b/src/test/groovy/LiteralTypesTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 /**
  * Test numeric literal types (with and without suffixes)
  * @see org.codehaus.groovy.syntax.parser/ASTBuilder#createIntegralNumber()
diff --git a/src/test/groovy/LittleClosureTest.groovy b/src/test/groovy/LittleClosureTest.groovy
index 09c5195..108dada 100644
--- a/src/test/groovy/LittleClosureTest.groovy
+++ b/src/test/groovy/LittleClosureTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class LittleClosureTest extends GroovyTestCase {
 
     void testClosure() {
diff --git a/src/test/groovy/LocalFieldTest.groovy b/src/test/groovy/LocalFieldTest.groovy
index e3ec53d..332e8f8 100644
--- a/src/test/groovy/LocalFieldTest.groovy
+++ b/src/test/groovy/LocalFieldTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class LocalFieldTest extends GroovyTestCase {
 
     private def x
diff --git a/src/test/groovy/LocalPropertyTest.groovy b/src/test/groovy/LocalPropertyTest.groovy
index ca4d512..bc34ac8 100644
--- a/src/test/groovy/LocalPropertyTest.groovy
+++ b/src/test/groovy/LocalPropertyTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class LocalPropertyTest extends GroovyTestCase {
 
     def x
diff --git a/src/test/groovy/LocalVariableTest.groovy b/src/test/groovy/LocalVariableTest.groovy
index 8910586..a4666ae 100644
--- a/src/test/groovy/LocalVariableTest.groovy
+++ b/src/test/groovy/LocalVariableTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class LocalVariableTest extends GroovyTestCase {
 
     void testAssert() {
diff --git a/src/test/groovy/LogicTest.groovy b/src/test/groovy/LogicTest.groovy
index 7fac05f..b303c59 100644
--- a/src/test/groovy/LogicTest.groovy
+++ b/src/test/groovy/LogicTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class LogicTest extends GroovyTestCase {
 
     void testAndWithTrue() {
diff --git a/src/test/groovy/LoopBreakTest.groovy b/src/test/groovy/LoopBreakTest.groovy
index 550c81f..a3fd5a9 100644
--- a/src/test/groovy/LoopBreakTest.groovy
+++ b/src/test/groovy/LoopBreakTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class LoopBreakTest extends GroovyTestCase {
 
     void testWhileWithBreak() {
diff --git a/src/test/groovy/MapConstructionTest.groovy b/src/test/groovy/MapConstructionTest.groovy
index 07ba975..0b1bec5 100644
--- a/src/test/groovy/MapConstructionTest.groovy
+++ b/src/test/groovy/MapConstructionTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 /** 
  * Tests creating Maps in Groovy
  */
diff --git a/src/test/groovy/MapPropertyTest.groovy b/src/test/groovy/MapPropertyTest.groovy
index 2762721..64f51ef 100644
--- a/src/test/groovy/MapPropertyTest.groovy
+++ b/src/test/groovy/MapPropertyTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class MapPropertyTest extends GroovyTestCase {
 
     void testGetAndSetProperties() {
diff --git a/src/test/groovy/MapTest.groovy b/src/test/groovy/MapTest.groovy
index d0bbf3d..1cfd268 100644
--- a/src/test/groovy/MapTest.groovy
+++ b/src/test/groovy/MapTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class MapTest extends GroovyTestCase {
 
     void testMap() {
diff --git a/src/test/groovy/MethodCallTest.groovy b/src/test/groovy/MethodCallTest.groovy
index b485b48..1a9afc1 100644
--- a/src/test/groovy/MethodCallTest.groovy
+++ b/src/test/groovy/MethodCallTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class MethodCallTest extends GroovyTestCase {
 
     void testMethodCall() {
diff --git a/src/test/groovy/MethodCallWithoutParenthesisTest.groovy b/src/test/groovy/MethodCallWithoutParenthesisTest.groovy
index 233d17c..af2dbed 100644
--- a/src/test/groovy/MethodCallWithoutParenthesisTest.groovy
+++ b/src/test/groovy/MethodCallWithoutParenthesisTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class MethodCallWithoutParenthesisTest extends GroovyTestCase {
 
     def flag
diff --git a/src/test/groovy/MethodParameterAccessWithinClosureTest.groovy b/src/test/groovy/MethodParameterAccessWithinClosureTest.groovy
index 60d125f..94c3c8e 100644
--- a/src/test/groovy/MethodParameterAccessWithinClosureTest.groovy
+++ b/src/test/groovy/MethodParameterAccessWithinClosureTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 /**
  * To test access to method scoped variable within closure
  */
diff --git a/src/test/groovy/MinMaxTest.groovy b/src/test/groovy/MinMaxTest.groovy
index a11a87a..20f3abf 100644
--- a/src/test/groovy/MinMaxTest.groovy
+++ b/src/test/groovy/MinMaxTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 /**
  * Tests the min() and max() functions
  */
diff --git a/src/test/groovy/MinusEqualsTest.groovy b/src/test/groovy/MinusEqualsTest.groovy
index 2a07f89..c74690c 100644
--- a/src/test/groovy/MinusEqualsTest.groovy
+++ b/src/test/groovy/MinusEqualsTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class MinusEqualsTest extends GroovyTestCase {
 
     void testIntegerMinusEquals() {
diff --git a/src/test/groovy/ModuloTest.groovy b/src/test/groovy/ModuloTest.groovy
index 067bb51..3830197 100644
--- a/src/test/groovy/ModuloTest.groovy
+++ b/src/test/groovy/ModuloTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class ModuloTest extends GroovyTestCase {
   int modulo = 100
 
diff --git a/src/test/groovy/MultiCatchTest.groovy b/src/test/groovy/MultiCatchTest.groovy
index 0a1ecb9..7c17550 100644
--- a/src/test/groovy/MultiCatchTest.groovy
+++ b/src/test/groovy/MultiCatchTest.groovy
@@ -18,6 +18,7 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.control.CompilerConfiguration
 import org.codehaus.groovy.control.ParserPluginFactory
 
diff --git a/src/test/groovy/MultiDimArraysTest.groovy b/src/test/groovy/MultiDimArraysTest.groovy
index 4327432..8e2d22d 100644
--- a/src/test/groovy/MultiDimArraysTest.groovy
+++ b/src/test/groovy/MultiDimArraysTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 /**
  * Expose how to deal with multi-dimensional Arrays until this is supported at the language level.
  */
diff --git a/src/test/groovy/MultilineChainExpressionTest.groovy b/src/test/groovy/MultilineChainExpressionTest.groovy
index 9a1199b..9fb8e87 100644
--- a/src/test/groovy/MultilineChainExpressionTest.groovy
+++ b/src/test/groovy/MultilineChainExpressionTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class MultilineChainExpressionTest extends GroovyTestCase {
     void testMultiLineChain() {
         // the code below should be compilable
diff --git a/src/test/groovy/MultilineStringTest.groovy b/src/test/groovy/MultilineStringTest.groovy
index f3ba72e..e67f6a1 100644
--- a/src/test/groovy/MultilineStringTest.groovy
+++ b/src/test/groovy/MultilineStringTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class MultilineStringTest extends GroovyTestCase {
 
     void testMultilineString() {
diff --git a/src/test/groovy/MultiplyDivideEqualsTest.groovy b/src/test/groovy/MultiplyDivideEqualsTest.groovy
index 6d291ae..edfd25f 100644
--- a/src/test/groovy/MultiplyDivideEqualsTest.groovy
+++ b/src/test/groovy/MultiplyDivideEqualsTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class MultiplyDivideEqualsTest extends GroovyTestCase {
 
     void testIntegerMultiplyEquals() {
diff --git a/src/test/groovy/NamedParameterTest.groovy b/src/test/groovy/NamedParameterTest.groovy
index b0cc07b..4ff1553 100644
--- a/src/test/groovy/NamedParameterTest.groovy
+++ b/src/test/groovy/NamedParameterTest.groovy
@@ -18,6 +18,7 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
 import groovy.transform.NamedParam
 import groovy.transform.NamedParams
 import groovy.transform.TypeChecked
diff --git a/src/test/groovy/NestedClassTest.groovy b/src/test/groovy/NestedClassTest.groovy
index ae63440..e17d8c9 100644
--- a/src/test/groovy/NestedClassTest.groovy
+++ b/src/test/groovy/NestedClassTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class NestedClassTest extends GroovyTestCase {
 
     void testStaticInnerStaticMethod () {
diff --git a/src/test/groovy/NullPropertyTest.groovy b/src/test/groovy/NullPropertyTest.groovy
index 7e59c80..77157f4 100644
--- a/src/test/groovy/NullPropertyTest.groovy
+++ b/src/test/groovy/NullPropertyTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class NullPropertyTest extends GroovyTestCase {
     def wensleydale = null
 
diff --git a/src/test/groovy/OptionalReturnTest.groovy b/src/test/groovy/OptionalReturnTest.groovy
index 2ef4ffa..2e3d9b3 100644
--- a/src/test/groovy/OptionalReturnTest.groovy
+++ b/src/test/groovy/OptionalReturnTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class OptionalReturnTest extends GroovyTestCase {
 
     def y
diff --git a/src/test/groovy/OverloadInvokeMethodTest.groovy b/src/test/groovy/OverloadInvokeMethodTest.groovy
index fc29a78..601a94d 100644
--- a/src/test/groovy/OverloadInvokeMethodTest.groovy
+++ b/src/test/groovy/OverloadInvokeMethodTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class OverloadInvokeMethodTest extends GroovyTestCase {
     
     void testBug() {
diff --git a/src/test/groovy/OverridePropertyGetterTest.groovy b/src/test/groovy/OverridePropertyGetterTest.groovy
index 70c1c3d..d296f37 100644
--- a/src/test/groovy/OverridePropertyGetterTest.groovy
+++ b/src/test/groovy/OverridePropertyGetterTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 /**
  * test to ensure that overriding getter doesn't throw a NPE on access
  */
diff --git a/src/test/groovy/OverrideTest.groovy b/src/test/groovy/OverrideTest.groovy
index 9740d16..b510838 100644
--- a/src/test/groovy/OverrideTest.groovy
+++ b/src/test/groovy/OverrideTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class OverrideTest extends GroovyTestCase {
     void testHappyPath() {
         assertScript """
diff --git a/src/test/groovy/PlusEqualsTest.groovy b/src/test/groovy/PlusEqualsTest.groovy
index 99c27da..1fec88f 100644
--- a/src/test/groovy/PlusEqualsTest.groovy
+++ b/src/test/groovy/PlusEqualsTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class PlusEqualsTest extends GroovyTestCase {
 
     void testIntegerPlusEquals() {
diff --git a/src/test/groovy/PostfixTest.groovy b/src/test/groovy/PostfixTest.groovy
index 920dcd1..f52a00d 100644
--- a/src/test/groovy/PostfixTest.groovy
+++ b/src/test/groovy/PostfixTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class PostfixTest extends GroovyTestCase {
 
     void testIntegerPostfix() {
diff --git a/src/test/groovy/PrefixTest.groovy b/src/test/groovy/PrefixTest.groovy
index f1ef264..9ce8d7a 100644
--- a/src/test/groovy/PrefixTest.groovy
+++ b/src/test/groovy/PrefixTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class PrefixTest extends GroovyTestCase {
 
     void testIntegerPrefix() {
diff --git a/src/test/groovy/PrimitiveArraysTest.groovy b/src/test/groovy/PrimitiveArraysTest.groovy
index 6cf502e..2143846 100644
--- a/src/test/groovy/PrimitiveArraysTest.groovy
+++ b/src/test/groovy/PrimitiveArraysTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class PrimitiveArraysTest extends GroovyTestCase {
 
     def c1Field = [] as char[]
diff --git a/src/test/groovy/PrimitiveDefaultValueTest.groovy b/src/test/groovy/PrimitiveDefaultValueTest.groovy
index af84f3b..bd8d21b 100644
--- a/src/test/groovy/PrimitiveDefaultValueTest.groovy
+++ b/src/test/groovy/PrimitiveDefaultValueTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 /**
  * Test for non-initialized fields or variables of the primitive types.
  */
diff --git a/src/test/groovy/PrimitiveTypeFieldTest.groovy b/src/test/groovy/PrimitiveTypeFieldTest.groovy
index 1b9f752..1374c3a 100644
--- a/src/test/groovy/PrimitiveTypeFieldTest.groovy
+++ b/src/test/groovy/PrimitiveTypeFieldTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class PrimitiveTypeFieldTest extends GroovyTestCase {
     private long longField
     private static short shortField
diff --git a/src/test/groovy/PrimitiveTypesTest.groovy b/src/test/groovy/PrimitiveTypesTest.groovy
index 15cf1b7..e147d7f 100644
--- a/src/test/groovy/PrimitiveTypesTest.groovy
+++ b/src/test/groovy/PrimitiveTypesTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class PrimitiveTypesTest extends GroovyTestCase {
 
     int getInt() {
diff --git a/src/test/groovy/PrintTest.groovy b/src/test/groovy/PrintTest.groovy
index 518115e..53c3656 100644
--- a/src/test/groovy/PrintTest.groovy
+++ b/src/test/groovy/PrintTest.groovy
@@ -19,6 +19,7 @@
 package groovy
 
 import groovy.io.GroovyPrintStream
+import groovy.test.GroovyTestCase
 
 import java.text.NumberFormat
 
diff --git a/src/test/groovy/PrivateVariableAccessFromAnotherInstanceTest.groovy b/src/test/groovy/PrivateVariableAccessFromAnotherInstanceTest.groovy
index a78c054..848dfd1 100644
--- a/src/test/groovy/PrivateVariableAccessFromAnotherInstanceTest.groovy
+++ b/src/test/groovy/PrivateVariableAccessFromAnotherInstanceTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 /**
  * test to ensure that private instance variables are visible to 
  * other instance variables of the same class
diff --git a/src/test/groovy/ProcessTest.groovy b/src/test/groovy/ProcessTest.groovy
index 0f75a99..1fe048d 100644
--- a/src/test/groovy/ProcessTest.groovy
+++ b/src/test/groovy/ProcessTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 /**
  * check that groovy Process methods do their job.
  */
diff --git a/src/test/groovy/Property2Test.groovy b/src/test/groovy/Property2Test.groovy
index 130fb32..152657e 100644
--- a/src/test/groovy/Property2Test.groovy
+++ b/src/test/groovy/Property2Test.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 /**
  * Tests the use of getMetaPropertyValues() and getProperties() for Beans and Expandos.
  */
diff --git a/src/test/groovy/PropertyTest.groovy b/src/test/groovy/PropertyTest.groovy
index 2cf74f1..39dafd0 100644
--- a/src/test/groovy/PropertyTest.groovy
+++ b/src/test/groovy/PropertyTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 /**
  * Tests the use of properties in Groovy
  */
diff --git a/src/test/groovy/PropertyWithoutDotTest.groovy b/src/test/groovy/PropertyWithoutDotTest.groovy
index b22b60c..c762e66 100644
--- a/src/test/groovy/PropertyWithoutDotTest.groovy
+++ b/src/test/groovy/PropertyWithoutDotTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class PropertyWithoutDotTest extends GroovyTestCase {
     def getFoo() {
         return "cheese"
diff --git a/src/test/groovy/RangeTest.groovy b/src/test/groovy/RangeTest.groovy
index cba8443..dc2cb45 100644
--- a/src/test/groovy/RangeTest.groovy
+++ b/src/test/groovy/RangeTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class RangeTest extends GroovyTestCase {
 
     void testRange() {
diff --git a/src/test/groovy/ReadLineTest.groovy b/src/test/groovy/ReadLineTest.groovy
index 4d56367..3c93201 100644
--- a/src/test/groovy/ReadLineTest.groovy
+++ b/src/test/groovy/ReadLineTest.groovy
@@ -19,6 +19,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 /**
  * Test to ensure that readLine() method works on Reader/InputStream
  */
diff --git a/src/test/groovy/RegularExpressionsTest.groovy b/src/test/groovy/RegularExpressionsTest.groovy
index 7d5d08a..45f93b1 100644
--- a/src/test/groovy/RegularExpressionsTest.groovy
+++ b/src/test/groovy/RegularExpressionsTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 import java.util.regex.Matcher
 import java.util.regex.Pattern
 
diff --git a/src/test/groovy/ReturnTest.groovy b/src/test/groovy/ReturnTest.groovy
index 9d1c385..48defbe 100644
--- a/src/test/groovy/ReturnTest.groovy
+++ b/src/test/groovy/ReturnTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 /**
  * Tests the use of returns in Groovy
  */
diff --git a/src/test/groovy/SafeNavigationTest.groovy b/src/test/groovy/SafeNavigationTest.groovy
index d0dd7cf..a184123 100644
--- a/src/test/groovy/SafeNavigationTest.groovy
+++ b/src/test/groovy/SafeNavigationTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class SafeNavigationTest extends GroovyTestCase {
 
     void testNullNavigation() {
diff --git a/src/test/groovy/SerializeTest.groovy b/src/test/groovy/SerializeTest.groovy
index 18dec6d..c98d93c 100644
--- a/src/test/groovy/SerializeTest.groovy
+++ b/src/test/groovy/SerializeTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class SerializeTest extends GroovyTestCase {
 
     void testGString () {
diff --git a/src/test/groovy/SetTest.groovy b/src/test/groovy/SetTest.groovy
index 623bd66..4f8f1d1 100644
--- a/src/test/groovy/SetTest.groovy
+++ b/src/test/groovy/SetTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class SetTest extends GroovyTestCase {
 
     void testSetPlus() {
diff --git a/src/test/groovy/ShellTest.groovy b/src/test/groovy/ShellTest.groovy
index 1c978e7..84545ad 100644
--- a/src/test/groovy/ShellTest.groovy
+++ b/src/test/groovy/ShellTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class ShellTest extends GroovyTestCase {
 
     void testReadAndWriteVariable() {
diff --git a/src/test/groovy/SimplePostfixTest.groovy b/src/test/groovy/SimplePostfixTest.groovy
index 781fcb7..66e3364 100644
--- a/src/test/groovy/SimplePostfixTest.groovy
+++ b/src/test/groovy/SimplePostfixTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class SimplePostfixTest extends GroovyTestCase {
 
     void testPostfix() {
diff --git a/src/test/groovy/SingletonBugTest.groovy b/src/test/groovy/SingletonBugTest.groovy
index f06c20c..20ffcfc 100644
--- a/src/test/groovy/SingletonBugTest.groovy
+++ b/src/test/groovy/SingletonBugTest.groovy
@@ -17,6 +17,9 @@
  *  under the License.
  */
 package groovy
+
+import groovy.test.GroovyTestCase
+
 // GROOVY-435
 
 class SingletonBugTest extends GroovyTestCase {
diff --git a/src/test/groovy/SliceTest.groovy b/src/test/groovy/SliceTest.groovy
index ac5ea31..9dfaffc 100644
--- a/src/test/groovy/SliceTest.groovy
+++ b/src/test/groovy/SliceTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class SliceTest extends GroovyTestCase {
 
     void testListSlice() {
diff --git a/src/test/groovy/SocketTest.groovy b/src/test/groovy/SocketTest.groovy
index a426188..cf52589 100644
--- a/src/test/groovy/SocketTest.groovy
+++ b/src/test/groovy/SocketTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 /**
  * check that groovy Socket methods do their job.
  */
diff --git a/src/test/groovy/SortTest.groovy b/src/test/groovy/SortTest.groovy
index 90962b9..a5fa742 100644
--- a/src/test/groovy/SortTest.groovy
+++ b/src/test/groovy/SortTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class SortTest extends GroovyTestCase {
 
     // GROOVY-1956
diff --git a/src/test/groovy/SpreadDotTest.groovy b/src/test/groovy/SpreadDotTest.groovy
index 7f0c6a9..7574752 100644
--- a/src/test/groovy/SpreadDotTest.groovy
+++ b/src/test/groovy/SpreadDotTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 /**
  * Test for the spread dot operator "*.".
  *
diff --git a/src/test/groovy/SqlDateTest.groovy b/src/test/groovy/SqlDateTest.groovy
index 1bbac3d..bca02ae 100644
--- a/src/test/groovy/SqlDateTest.groovy
+++ b/src/test/groovy/SqlDateTest.groovy
@@ -16,8 +16,9 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package groovy;
+package groovy
 
+import groovy.test.GroovyTestCase;
 import groovy.time.TimeCategory
 
 class SqlDateTest extends GroovyTestCase {
diff --git a/src/test/groovy/StackTraceTest.groovy b/src/test/groovy/StackTraceTest.groovy
index 0a83142..9e4c2ba 100644
--- a/src/test/groovy/StackTraceTest.groovy
+++ b/src/test/groovy/StackTraceTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 /**
  * This test case is added to ensure an exception thrown from inside
  * groovy does always contain a valid line number and file name for
diff --git a/src/test/groovy/StaticMessageTest.groovy b/src/test/groovy/StaticMessageTest.groovy
index 4a84bed..e6f73d2 100755
--- a/src/test/groovy/StaticMessageTest.groovy
+++ b/src/test/groovy/StaticMessageTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class StaticMessageTest extends GroovyTestCase {
 
    void testStaticMissingMethodException() {
diff --git a/src/test/groovy/StringBufferTest.groovy b/src/test/groovy/StringBufferTest.groovy
index 976a703..8d862a4 100644
--- a/src/test/groovy/StringBufferTest.groovy
+++ b/src/test/groovy/StringBufferTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class StringBufferTest extends GroovyTestCase {
     void testSize() {
         def x = new StringBuffer()
diff --git a/src/test/groovy/StringTest.groovy b/src/test/groovy/StringTest.groovy
index a8cc253..40ce071 100644
--- a/src/test/groovy/StringTest.groovy
+++ b/src/test/groovy/StringTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 /**
  * Various tests for Strings.
  */
diff --git a/src/test/groovy/SubscriptTest.groovy b/src/test/groovy/SubscriptTest.groovy
index b316334..9d2d30c 100644
--- a/src/test/groovy/SubscriptTest.groovy
+++ b/src/test/groovy/SubscriptTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class SubscriptTest extends GroovyTestCase {
 
     void testListRange() {
diff --git a/src/test/groovy/SwitchTest.groovy b/src/test/groovy/SwitchTest.groovy
index 2aba958..89cc170 100644
--- a/src/test/groovy/SwitchTest.groovy
+++ b/src/test/groovy/SwitchTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class SwitchTest extends GroovyTestCase {
 
     void testSwitch() {
diff --git a/src/test/groovy/SwitchWithDifferentTypesTest.groovy b/src/test/groovy/SwitchWithDifferentTypesTest.groovy
index e1968b8..4026733 100644
--- a/src/test/groovy/SwitchWithDifferentTypesTest.groovy
+++ b/src/test/groovy/SwitchWithDifferentTypesTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 /**
  * A test case for switch statement with different types
  */
diff --git a/src/test/groovy/TextPropertyTest.groovy b/src/test/groovy/TextPropertyTest.groovy
index 3f307de..bbf0ac6 100644
--- a/src/test/groovy/TextPropertyTest.groovy
+++ b/src/test/groovy/TextPropertyTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 /**
  * check that text def is available on...
  *
diff --git a/src/test/groovy/ThisAndSuperTest.groovy b/src/test/groovy/ThisAndSuperTest.groovy
index 8a865a0..087756d 100644
--- a/src/test/groovy/ThisAndSuperTest.groovy
+++ b/src/test/groovy/ThisAndSuperTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class ThisAndSuperTest extends GroovyTestCase {
     void testOverwrittenSuperMethod() {
         def helper = new TestForSuperHelper2()
diff --git a/src/test/groovy/ThreadMethodsTest.groovy b/src/test/groovy/ThreadMethodsTest.groovy
index a19a6c5..2139612 100644
--- a/src/test/groovy/ThreadMethodsTest.groovy
+++ b/src/test/groovy/ThreadMethodsTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 import java.util.concurrent.CyclicBarrier
 import java.util.concurrent.TimeUnit
 
diff --git a/src/test/groovy/ThrowTest.groovy b/src/test/groovy/ThrowTest.groovy
index b67c21c..e0d6ae0 100644
--- a/src/test/groovy/ThrowTest.groovy
+++ b/src/test/groovy/ThrowTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class ThrowTest extends GroovyTestCase {
     void testThrow() {
         try {
diff --git a/src/test/groovy/ToArrayBugTest.groovy b/src/test/groovy/ToArrayBugTest.groovy
index 0e31c9f..eb06ef6 100644
--- a/src/test/groovy/ToArrayBugTest.groovy
+++ b/src/test/groovy/ToArrayBugTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class ToArrayBugTest extends GroovyTestCase {
     
     void testToArrayBug() {
diff --git a/src/test/groovy/TripleQuotedStringTest.groovy b/src/test/groovy/TripleQuotedStringTest.groovy
index dec8a11..49cd4dc 100644
--- a/src/test/groovy/TripleQuotedStringTest.groovy
+++ b/src/test/groovy/TripleQuotedStringTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class TripleQuotedStringTest extends GroovyTestCase {
 
     void testTripleQuotedString() {
diff --git a/src/test/groovy/TypesafeMethodTest.groovy b/src/test/groovy/TypesafeMethodTest.groovy
index f2fbb5d..37653df 100644
--- a/src/test/groovy/TypesafeMethodTest.groovy
+++ b/src/test/groovy/TypesafeMethodTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class TypesafeMethodTest extends GroovyTestCase {
 
     void testTypesafeMethod() {
diff --git a/src/test/groovy/UniqueOnCollectionTest.groovy b/src/test/groovy/UniqueOnCollectionTest.groovy
index f8de13c..81594b7 100644
--- a/src/test/groovy/UniqueOnCollectionTest.groovy
+++ b/src/test/groovy/UniqueOnCollectionTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class UniqueOnCollectionTest extends GroovyTestCase {
 
     void testUnique() {
diff --git a/src/test/groovy/UniqueOnCollectionWithClosureTest.groovy b/src/test/groovy/UniqueOnCollectionWithClosureTest.groovy
index ea7b4d5..69b8c0a 100644
--- a/src/test/groovy/UniqueOnCollectionWithClosureTest.groovy
+++ b/src/test/groovy/UniqueOnCollectionWithClosureTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class UniqueOnCollectionWithClosureTest extends GroovyTestCase {
 
     void testUniqueOnIterator() {
diff --git a/src/test/groovy/UniqueOnCollectionWithComparatorTest.groovy b/src/test/groovy/UniqueOnCollectionWithComparatorTest.groovy
index f8b5eed..8dca42b 100644
--- a/src/test/groovy/UniqueOnCollectionWithComparatorTest.groovy
+++ b/src/test/groovy/UniqueOnCollectionWithComparatorTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class UniqueOnCollectionWithComparatorTest extends GroovyTestCase {
 
     void testUniqueOnIterator() {
diff --git a/src/test/groovy/UnsafeNavigationTest.groovy b/src/test/groovy/UnsafeNavigationTest.groovy
index d77542d..7a583c0 100644
--- a/src/test/groovy/UnsafeNavigationTest.groovy
+++ b/src/test/groovy/UnsafeNavigationTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class UnsafeNavigationTest extends GroovyTestCase {
 
     void testUnsafePropertyNavigations() {
diff --git a/src/test/groovy/VArgsTest.groovy b/src/test/groovy/VArgsTest.groovy
index eb0d3c7..3a7dd29 100644
--- a/src/test/groovy/VArgsTest.groovy
+++ b/src/test/groovy/VArgsTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class VArgsTest extends GroovyTestCase {
 
   def primitiveMethod(){0}
diff --git a/src/test/groovy/ValidNameTest.groovy b/src/test/groovy/ValidNameTest.groovy
index db33a92..24e08fd 100644
--- a/src/test/groovy/ValidNameTest.groovy
+++ b/src/test/groovy/ValidNameTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class ValidNameTest extends GroovyTestCase {
 
     void testFieldNamesWithDollar() {
diff --git a/src/test/groovy/VarargsMethodTest.groovy b/src/test/groovy/VarargsMethodTest.groovy
index b3a2d1a..6e04a3b 100644
--- a/src/test/groovy/VarargsMethodTest.groovy
+++ b/src/test/groovy/VarargsMethodTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 /**
  * VarargsMethodTest.groovy
  *
diff --git a/src/test/groovy/VerbatimGStringTest.groovy b/src/test/groovy/VerbatimGStringTest.groovy
index 13e9d4a..af2633f 100644
--- a/src/test/groovy/VerbatimGStringTest.groovy
+++ b/src/test/groovy/VerbatimGStringTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class VerbatimGStringTest extends GroovyTestCase {
 
     void testWithOneVariable() {
diff --git a/src/test/groovy/WhileLoopTest.groovy b/src/test/groovy/WhileLoopTest.groovy
index a63e6cc..e59f318 100644
--- a/src/test/groovy/WhileLoopTest.groovy
+++ b/src/test/groovy/WhileLoopTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy
 
+import groovy.test.GroovyTestCase
+
 class WhileLoopTest extends GroovyTestCase {
 
     void testVerySimpleWhile() {
diff --git a/src/test/groovy/annotations/PackageAndImportAnnotationTest.groovy b/src/test/groovy/annotations/PackageAndImportAnnotationTest.groovy
index cfeac15..9dc7932 100644
--- a/src/test/groovy/annotations/PackageAndImportAnnotationTest.groovy
+++ b/src/test/groovy/annotations/PackageAndImportAnnotationTest.groovy
@@ -32,7 +32,7 @@ final class PackageAndImportAnnotationTest {
             def x = new groovy.annotations.MyClass()
             assert x.class.annotations[0].value() == 60
             assert x.class.package.annotations[0].value() == 30
-            new AntBuilder().with {
+            new groovy.ant.AntBuilder().with {
                 mkdir(dir:'temp')
                 delete(file:'temp/log.txt')
                 taskdef(name:'groovyc', classname:'org.codehaus.groovy.ant.Groovyc')
diff --git a/src/test/groovy/annotations/ParameterAnnotationTest.groovy b/src/test/groovy/annotations/ParameterAnnotationTest.groovy
index 69cdf8d..db93ac9 100644
--- a/src/test/groovy/annotations/ParameterAnnotationTest.groovy
+++ b/src/test/groovy/annotations/ParameterAnnotationTest.groovy
@@ -18,6 +18,7 @@
  */
 package groovy.annotations
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.control.*
 
 class ParameterAnnotationTest extends GroovyTestCase {
diff --git a/src/test/groovy/beans/BindableTransformTest.groovy b/src/test/groovy/beans/BindableTransformTest.groovy
index a91fbb4..11f8228 100644
--- a/src/test/groovy/beans/BindableTransformTest.groovy
+++ b/src/test/groovy/beans/BindableTransformTest.groovy
@@ -18,6 +18,7 @@
  */
 package groovy.beans
 
+import groovy.test.GroovyShellTestCase
 import org.codehaus.groovy.control.CompilationFailedException
 
 import java.beans.PropertyChangeListener
diff --git a/src/test/groovy/beans/ListenerListTransformTest.groovy b/src/test/groovy/beans/ListenerListTransformTest.groovy
index 93e5ed1..d7f09cc 100644
--- a/src/test/groovy/beans/ListenerListTransformTest.groovy
+++ b/src/test/groovy/beans/ListenerListTransformTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.beans
 
+import groovy.test.GroovyTestCase
+
 /**
  * Unit test for ListenerList.
  */
diff --git a/src/test/groovy/beans/VetoableTransformTest.groovy b/src/test/groovy/beans/VetoableTransformTest.groovy
index 3fce996..c9ad62e 100644
--- a/src/test/groovy/beans/VetoableTransformTest.groovy
+++ b/src/test/groovy/beans/VetoableTransformTest.groovy
@@ -18,6 +18,7 @@
  */
 package groovy.beans
 
+import groovy.test.GroovyShellTestCase
 import org.codehaus.groovy.control.CompilationFailedException
 
 class VetoableTransformTest extends GroovyShellTestCase {
diff --git a/src/test/groovy/bugs/AmbiguousListOrMethodTest.groovy b/src/test/groovy/bugs/AmbiguousListOrMethodTest.groovy
index 76f7eb7..65ca0ba 100644
--- a/src/test/groovy/bugs/AmbiguousListOrMethodTest.groovy
+++ b/src/test/groovy/bugs/AmbiguousListOrMethodTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class AmbiguousListOrMethodTest extends GroovyTestCase {
 
     void testLocalVariableVersion() {
diff --git a/src/test/groovy/bugs/AsBoolBug.groovy b/src/test/groovy/bugs/AsBoolBug.groovy
index bfc6b29..c45e990 100644
--- a/src/test/groovy/bugs/AsBoolBug.groovy
+++ b/src/test/groovy/bugs/AsBoolBug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 /**
  * Test to fix the Jira issues GROOVY-810 and GROOVY-811.
  * Test of "string as Boolean" against the issue GROOVY-812.
diff --git a/src/test/groovy/bugs/AssignmentInsideExpressionBug.groovy b/src/test/groovy/bugs/AssignmentInsideExpressionBug.groovy
index 8eaf28a..772a81c 100644
--- a/src/test/groovy/bugs/AssignmentInsideExpressionBug.groovy
+++ b/src/test/groovy/bugs/AssignmentInsideExpressionBug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 /**
  */
 class AssignmentInsideExpressionBug extends GroovyTestCase {
diff --git a/src/test/groovy/bugs/AttributeSetExpressionBug.groovy b/src/test/groovy/bugs/AttributeSetExpressionBug.groovy
index 40fdded..bfea7fe 100644
--- a/src/test/groovy/bugs/AttributeSetExpressionBug.groovy
+++ b/src/test/groovy/bugs/AttributeSetExpressionBug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class AttributeSetExpressionBug extends GroovyTestCase {
     void testAttributeSetAccess() {
         def a = new HasStaticFieldSomeClass()
diff --git a/src/test/groovy/bugs/AutoboxingOfComparisonsBug.groovy b/src/test/groovy/bugs/AutoboxingOfComparisonsBug.groovy
index 722e43e..edb3000 100644
--- a/src/test/groovy/bugs/AutoboxingOfComparisonsBug.groovy
+++ b/src/test/groovy/bugs/AutoboxingOfComparisonsBug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class AutoboxingOfComparisonsBug extends GroovyTestCase {
     void testBug() {
         def y = true
diff --git a/src/test/groovy/bugs/BadLineNumberOnExceptionBugTest.groovy b/src/test/groovy/bugs/BadLineNumberOnExceptionBugTest.groovy
index 667852a..56f0977 100644
--- a/src/test/groovy/bugs/BadLineNumberOnExceptionBugTest.groovy
+++ b/src/test/groovy/bugs/BadLineNumberOnExceptionBugTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 /**
  * Ensure that the correct line information is reported when an exception is thrown.
  * <p>
@@ -45,7 +47,7 @@ class BadLineNumberOnExceptionBugTest extends GroovyTestCase {
 
                 assert false
             } catch (MissingMethodException e) {
-                def scriptTraceElement = e.stackTrace.find { it.className.startsWith(GroovyTestCase.TEST_SCRIPT_NAME_PREFIX) }
+                def scriptTraceElement = e.stackTrace.find { it.className.startsWith(groovy.test.GroovyTestCase.TEST_SCRIPT_NAME_PREFIX) }
                 assert 9 == scriptTraceElement.lineNumber
             }
         """
@@ -65,7 +67,7 @@ class BadLineNumberOnExceptionBugTest extends GroovyTestCase {
 
                 assert false
             } catch (MissingPropertyException e) {
-                def scriptTraceElement = e.stackTrace.find { it.className.startsWith(GroovyTestCase.TEST_SCRIPT_NAME_PREFIX) }
+                def scriptTraceElement = e.stackTrace.find { it.className.startsWith(groovy.test.GroovyTestCase.TEST_SCRIPT_NAME_PREFIX) }
                 assert 3 == scriptTraceElement.lineNumber
             }
         """
diff --git a/src/test/groovy/bugs/BadScriptNameBug.groovy b/src/test/groovy/bugs/BadScriptNameBug.groovy
index 45f071f..a3c92e7 100644
--- a/src/test/groovy/bugs/BadScriptNameBug.groovy
+++ b/src/test/groovy/bugs/BadScriptNameBug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class BadScriptNameBug extends GroovyTestCase {
 
     void testBug() {
diff --git a/src/test/groovy/bugs/BenchmarkBug.groovy b/src/test/groovy/bugs/BenchmarkBug.groovy
index fd9cb83..a61efe0 100644
--- a/src/test/groovy/bugs/BenchmarkBug.groovy
+++ b/src/test/groovy/bugs/BenchmarkBug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 /**
  * A little performance test
  */
diff --git a/src/test/groovy/bugs/BlockAsClosureBug.groovy b/src/test/groovy/bugs/BlockAsClosureBug.groovy
index 41da92b..73c815f 100644
--- a/src/test/groovy/bugs/BlockAsClosureBug.groovy
+++ b/src/test/groovy/bugs/BlockAsClosureBug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class BlockAsClosureBug extends GroovyTestCase {
 
     void testBug() {
diff --git a/src/test/groovy/bugs/BooleanBug.groovy b/src/test/groovy/bugs/BooleanBug.groovy
index bcb79ef..c4fb33c 100644
--- a/src/test/groovy/bugs/BooleanBug.groovy
+++ b/src/test/groovy/bugs/BooleanBug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 /**
  */
 class BooleanBug extends GroovyTestCase {
diff --git a/src/test/groovy/bugs/ByteIndexBug.groovy b/src/test/groovy/bugs/ByteIndexBug.groovy
index 906882e..7fa5370 100644
--- a/src/test/groovy/bugs/ByteIndexBug.groovy
+++ b/src/test/groovy/bugs/ByteIndexBug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class ByteIndexBug extends GroovyTestCase {
     // TODO: this tests a string with 128 nulls - is that what is intended?
     void testBug() {
diff --git a/src/test/groovy/bugs/Bytecode2Bug.groovy b/src/test/groovy/bugs/Bytecode2Bug.groovy
index b6e27b6..0c9bcca 100644
--- a/src/test/groovy/bugs/Bytecode2Bug.groovy
+++ b/src/test/groovy/bugs/Bytecode2Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 /**
  */
 class Bytecode2Bug extends GroovyTestCase {
diff --git a/src/test/groovy/bugs/Bytecode3Bug.groovy b/src/test/groovy/bugs/Bytecode3Bug.groovy
index fee14a4..d346013 100644
--- a/src/test/groovy/bugs/Bytecode3Bug.groovy
+++ b/src/test/groovy/bugs/Bytecode3Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 /**
  */
 class Bytecode3Bug extends GroovyTestCase {
diff --git a/src/test/groovy/bugs/Bytecode4Bug.groovy b/src/test/groovy/bugs/Bytecode4Bug.groovy
index 142d030..64023d0 100644
--- a/src/test/groovy/bugs/Bytecode4Bug.groovy
+++ b/src/test/groovy/bugs/Bytecode4Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 /**
  */
 class Bytecode4Bug extends GroovyTestCase {
diff --git a/src/test/groovy/bugs/Bytecode5Bug.groovy b/src/test/groovy/bugs/Bytecode5Bug.groovy
index 052b980..e42d30f 100644
--- a/src/test/groovy/bugs/Bytecode5Bug.groovy
+++ b/src/test/groovy/bugs/Bytecode5Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 /**
  */
 class Bytecode5Bug extends GroovyTestCase {
diff --git a/src/test/groovy/bugs/Bytecode6Bug.groovy b/src/test/groovy/bugs/Bytecode6Bug.groovy
index c5dd447..d23405d 100644
--- a/src/test/groovy/bugs/Bytecode6Bug.groovy
+++ b/src/test/groovy/bugs/Bytecode6Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 /**
  */
 class Bytecode6Bug extends GroovyTestCase {
diff --git a/src/test/groovy/bugs/Bytecode7Bug.groovy b/src/test/groovy/bugs/Bytecode7Bug.groovy
index f0ea779..46db6fe 100644
--- a/src/test/groovy/bugs/Bytecode7Bug.groovy
+++ b/src/test/groovy/bugs/Bytecode7Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 /**
  */
 class Bytecode7Bug extends GroovyTestCase {
diff --git a/src/test/groovy/bugs/BytecodeBug.groovy b/src/test/groovy/bugs/BytecodeBug.groovy
index 90ac10d..38f2976 100644
--- a/src/test/groovy/bugs/BytecodeBug.groovy
+++ b/src/test/groovy/bugs/BytecodeBug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 /**
  */
 class BytecodeBug extends GroovyTestCase {
diff --git a/src/test/groovy/bugs/CallingClosuresWithClosuresBug.groovy b/src/test/groovy/bugs/CallingClosuresWithClosuresBug.groovy
index 3b0ad10..09bc7c9 100644
--- a/src/test/groovy/bugs/CallingClosuresWithClosuresBug.groovy
+++ b/src/test/groovy/bugs/CallingClosuresWithClosuresBug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 /**
  */
 class CallingClosuresWithClosuresBug extends GroovyTestCase {
diff --git a/src/test/groovy/bugs/CastWhenUsingClosuresBug.groovy b/src/test/groovy/bugs/CastWhenUsingClosuresBug.groovy
index e8f2115..471bbcb 100644
--- a/src/test/groovy/bugs/CastWhenUsingClosuresBug.groovy
+++ b/src/test/groovy/bugs/CastWhenUsingClosuresBug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 /**
  */
 class CastWhenUsingClosuresBug extends GroovyTestCase {
diff --git a/src/test/groovy/bugs/ChristofsPropertyBug.groovy b/src/test/groovy/bugs/ChristofsPropertyBug.groovy
index 1fa13ad..d6d5acb 100644
--- a/src/test/groovy/bugs/ChristofsPropertyBug.groovy
+++ b/src/test/groovy/bugs/ChristofsPropertyBug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class ChristofsPropertyBug extends GroovyTestCase {
 
     def mixedCaseProperty
diff --git a/src/test/groovy/bugs/ClassGeneratorFixesTest.groovy b/src/test/groovy/bugs/ClassGeneratorFixesTest.groovy
index bc7bac5..878d4b3 100644
--- a/src/test/groovy/bugs/ClassGeneratorFixesTest.groovy
+++ b/src/test/groovy/bugs/ClassGeneratorFixesTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 
 class ClassGeneratorFixesTest extends GroovyTestCase {
     def count = 0;
diff --git a/src/test/groovy/bugs/ClassInNamedParamsBug.groovy b/src/test/groovy/bugs/ClassInNamedParamsBug.groovy
index a36649d..25b0d3e 100644
--- a/src/test/groovy/bugs/ClassInNamedParamsBug.groovy
+++ b/src/test/groovy/bugs/ClassInNamedParamsBug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class ClassInNamedParamsBug extends GroovyTestCase {
     
     void testBug() {
diff --git a/src/test/groovy/bugs/ClosureInClosureBug.groovy b/src/test/groovy/bugs/ClosureInClosureBug.groovy
index e3083e5..d65bee1 100644
--- a/src/test/groovy/bugs/ClosureInClosureBug.groovy
+++ b/src/test/groovy/bugs/ClosureInClosureBug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 /**
  * Bug illustrating the nested closures variable scope visibility issue.
  * l.each is ClosureInClosureBug$1 and it.each is ClosureInClosureBug$2
diff --git a/src/test/groovy/bugs/ClosureTypedVariableBug.groovy b/src/test/groovy/bugs/ClosureTypedVariableBug.groovy
index 2929097..0579194 100644
--- a/src/test/groovy/bugs/ClosureTypedVariableBug.groovy
+++ b/src/test/groovy/bugs/ClosureTypedVariableBug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 /**
  */
 class ClosureTypedVariableBug extends GroovyTestCase {
diff --git a/src/test/groovy/bugs/ClosureVariableBug.groovy b/src/test/groovy/bugs/ClosureVariableBug.groovy
index a2f8f82..240d88e 100644
--- a/src/test/groovy/bugs/ClosureVariableBug.groovy
+++ b/src/test/groovy/bugs/ClosureVariableBug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 /**
  */
 class ClosureVariableBug extends GroovyTestCase {
diff --git a/src/test/groovy/bugs/ClosureWithBitwiseDefaultParamTest.groovy b/src/test/groovy/bugs/ClosureWithBitwiseDefaultParamTest.groovy
index e3b7436..cd461f5 100644
--- a/src/test/groovy/bugs/ClosureWithBitwiseDefaultParamTest.groovy
+++ b/src/test/groovy/bugs/ClosureWithBitwiseDefaultParamTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class ClosureWithBitwiseDefaultParamTest extends GroovyTestCase {
     void testAmbiguousStuff() {
         def c = { x, y = 1 | 2, z = 0->
diff --git a/src/test/groovy/bugs/ConstructorBug.groovy b/src/test/groovy/bugs/ConstructorBug.groovy
index 19cf5e7..6b1d713 100644
--- a/src/test/groovy/bugs/ConstructorBug.groovy
+++ b/src/test/groovy/bugs/ConstructorBug.groovy
@@ -18,6 +18,7 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.runtime.InvokerHelper
 
 class ConstructorBug extends GroovyTestCase {
diff --git a/src/test/groovy/bugs/CustomMetaClassTest.groovy b/src/test/groovy/bugs/CustomMetaClassTest.groovy
index df4d41a..d0eedce 100644
--- a/src/test/groovy/bugs/CustomMetaClassTest.groovy
+++ b/src/test/groovy/bugs/CustomMetaClassTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class CustomMetaClassTest extends GroovyTestCase {
 
     @Override
diff --git a/src/test/groovy/bugs/DefVariableBug.groovy b/src/test/groovy/bugs/DefVariableBug.groovy
index 34ccccb..69c9b72 100644
--- a/src/test/groovy/bugs/DefVariableBug.groovy
+++ b/src/test/groovy/bugs/DefVariableBug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class DefVariableBug extends GroovyTestCase {
     
     void testBug() {
diff --git a/src/test/groovy/bugs/DirectMethodCallWithVargsTest.groovy b/src/test/groovy/bugs/DirectMethodCallWithVargsTest.groovy
index 13acb07..f9c463d 100644
--- a/src/test/groovy/bugs/DirectMethodCallWithVargsTest.groovy
+++ b/src/test/groovy/bugs/DirectMethodCallWithVargsTest.groovy
@@ -18,6 +18,7 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.ast.ClassCodeVisitorSupport
 import org.codehaus.groovy.control.SourceUnit
 import org.codehaus.groovy.ast.expr.MethodCallExpression
diff --git a/src/test/groovy/bugs/ForLoopBug.groovy b/src/test/groovy/bugs/ForLoopBug.groovy
index a965558..4e1dbb7 100644
--- a/src/test/groovy/bugs/ForLoopBug.groovy
+++ b/src/test/groovy/bugs/ForLoopBug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class ForLoopBug extends GroovyTestCase {
 
     void testBug() {
diff --git a/src/test/groovy/bugs/FullyQualifiedClassBug.groovy b/src/test/groovy/bugs/FullyQualifiedClassBug.groovy
index cefa434..db30ffb 100644
--- a/src/test/groovy/bugs/FullyQualifiedClassBug.groovy
+++ b/src/test/groovy/bugs/FullyQualifiedClassBug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 /**
  */
 class FullyQualifiedClassBug extends GroovyTestCase {
diff --git a/src/test/groovy/bugs/FullyQualifiedMethodReturnTypeBug.groovy b/src/test/groovy/bugs/FullyQualifiedMethodReturnTypeBug.groovy
index 17d62fa..a8e7d83 100644
--- a/src/test/groovy/bugs/FullyQualifiedMethodReturnTypeBug.groovy
+++ b/src/test/groovy/bugs/FullyQualifiedMethodReturnTypeBug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 /**
  */
 class FullyQualifiedMethodReturnTypeBug extends GroovyTestCase {
diff --git a/src/test/groovy/bugs/FullyQualifiedVariableTypeBug.groovy b/src/test/groovy/bugs/FullyQualifiedVariableTypeBug.groovy
index df169d1..b56e98c 100644
--- a/src/test/groovy/bugs/FullyQualifiedVariableTypeBug.groovy
+++ b/src/test/groovy/bugs/FullyQualifiedVariableTypeBug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 /**
  */
 class FullyQualifiedVariableTypeBug extends GroovyTestCase {
diff --git a/src/test/groovy/bugs/GetterBug.groovy b/src/test/groovy/bugs/GetterBug.groovy
index 013e516..06aa7dc 100644
--- a/src/test/groovy/bugs/GetterBug.groovy
+++ b/src/test/groovy/bugs/GetterBug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 /**
  */
 class GetterBug extends GroovyTestCase {
diff --git a/src/test/groovy/bugs/Groovy1018_Bug.groovy b/src/test/groovy/bugs/Groovy1018_Bug.groovy
index 54cfa2a..9c02bfe 100644
--- a/src/test/groovy/bugs/Groovy1018_Bug.groovy
+++ b/src/test/groovy/bugs/Groovy1018_Bug.groovy
@@ -18,13 +18,15 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 /**
  * Test to fix the Jira issues GROOVY-1018 and GROOVY-732.
  * Access to a static field member by a class name:
  *      ClassName.fieldName or ClassName.@fieldName.
  */
 
-class Groovy1018_Bug extends GroovyTestCase { 
+class Groovy1018_Bug extends GroovyTestCase {
 
     public static Object Class = "bar" 
 
diff --git a/src/test/groovy/bugs/Groovy1059_Bug.groovy b/src/test/groovy/bugs/Groovy1059_Bug.groovy
index 5d77d2d..992bb7c 100644
--- a/src/test/groovy/bugs/Groovy1059_Bug.groovy
+++ b/src/test/groovy/bugs/Groovy1059_Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 /**
  * GROOVY-1059
  *
diff --git a/src/test/groovy/bugs/Groovy1081_Bug.groovy b/src/test/groovy/bugs/Groovy1081_Bug.groovy
index 109bc98..0b10f77 100644
--- a/src/test/groovy/bugs/Groovy1081_Bug.groovy
+++ b/src/test/groovy/bugs/Groovy1081_Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 /**
  *  Verifies that DefaultGroovyMethods.transformLine(Reader, Writer, Closure)
  *  actually writes its output.
diff --git a/src/test/groovy/bugs/Groovy1407_Bug.groovy b/src/test/groovy/bugs/Groovy1407_Bug.groovy
index ab033be..1807fb4 100644
--- a/src/test/groovy/bugs/Groovy1407_Bug.groovy
+++ b/src/test/groovy/bugs/Groovy1407_Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy1407_Bug extends GroovyTestCase {
    void testGPathOnMultiKeyMap(){
       // each key is a two-element String list
diff --git a/src/test/groovy/bugs/Groovy1462_Bug.groovy b/src/test/groovy/bugs/Groovy1462_Bug.groovy
index 61221bf..3b257fc 100644
--- a/src/test/groovy/bugs/Groovy1462_Bug.groovy
+++ b/src/test/groovy/bugs/Groovy1462_Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 /**
  *  Verifies that the Groovy parser can accept quoted methods.
  */
diff --git a/src/test/groovy/bugs/Groovy1465Bug.groovy b/src/test/groovy/bugs/Groovy1465Bug.groovy
index 7285ef9..bef408a 100644
--- a/src/test/groovy/bugs/Groovy1465Bug.groovy
+++ b/src/test/groovy/bugs/Groovy1465Bug.groovy
@@ -18,6 +18,7 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.control.MultipleCompilationErrorsException
 
 class Groovy1465Bug extends GroovyTestCase {
diff --git a/src/test/groovy/bugs/Groovy1593.groovy b/src/test/groovy/bugs/Groovy1593.groovy
index 3ef5abf..0447ee1 100644
--- a/src/test/groovy/bugs/Groovy1593.groovy
+++ b/src/test/groovy/bugs/Groovy1593.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy1593 extends GroovyTestCase {
    void testPropertyAccessInSubClassOfHashMap() {
       def subclass = new SubClassOfHashMap()
diff --git a/src/test/groovy/bugs/Groovy1617_Bug.groovy b/src/test/groovy/bugs/Groovy1617_Bug.groovy
index 11d7a0b..4973a72 100644
--- a/src/test/groovy/bugs/Groovy1617_Bug.groovy
+++ b/src/test/groovy/bugs/Groovy1617_Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy1617_Bug extends GroovyTestCase {
    void testCoerceStringIntoStringArray() {
       def expected = ["G","r","o","o","v","y"] as String[]
diff --git a/src/test/groovy/bugs/Groovy1706_Bug.groovy b/src/test/groovy/bugs/Groovy1706_Bug.groovy
index 07d36cf..2b856eb 100644
--- a/src/test/groovy/bugs/Groovy1706_Bug.groovy
+++ b/src/test/groovy/bugs/Groovy1706_Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy1706_Bug extends GroovyTestCase {
    void testStaticMethodIsCalledFromSubclass() {
       // disclaimer: static methods shouldn't be
diff --git a/src/test/groovy/bugs/Groovy2271Bug.groovy b/src/test/groovy/bugs/Groovy2271Bug.groovy
index 0632fe8..aec0d72 100644
--- a/src/test/groovy/bugs/Groovy2271Bug.groovy
+++ b/src/test/groovy/bugs/Groovy2271Bug.groovy
@@ -19,6 +19,7 @@
 package groovy.bugs
 
 import groovy.mock.interceptor.StubFor
+import groovy.test.GroovyTestCase
 
 class Groovy2271Bug extends GroovyTestCase {
     static final String TEST_TEXT = "I'm a mock"
diff --git a/src/test/groovy/bugs/Groovy2339Bug.groovy b/src/test/groovy/bugs/Groovy2339Bug.groovy
index a8d7078..846ed6e 100644
--- a/src/test/groovy/bugs/Groovy2339Bug.groovy
+++ b/src/test/groovy/bugs/Groovy2339Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy2339Bug extends GroovyTestCase {
 
     void testBug() {
diff --git a/src/test/groovy/bugs/Groovy2348Bug.groovy b/src/test/groovy/bugs/Groovy2348Bug.groovy
index 3a3be2b..cc7b207 100644
--- a/src/test/groovy/bugs/Groovy2348Bug.groovy
+++ b/src/test/groovy/bugs/Groovy2348Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy2348Bug extends GroovyTestCase{
   void test () {
      assertEquals( ['1.0', '2.0'], Foo.test(['1.0-vers', '2.0-subvers']))
diff --git a/src/test/groovy/bugs/Groovy2350Bug.groovy b/src/test/groovy/bugs/Groovy2350Bug.groovy
index 50c466f..941fceb 100644
--- a/src/test/groovy/bugs/Groovy2350Bug.groovy
+++ b/src/test/groovy/bugs/Groovy2350Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy2350Bug extends GroovyTestCase{
 
      void testNoArg () {
diff --git a/src/test/groovy/bugs/Groovy2351Bug.groovy b/src/test/groovy/bugs/Groovy2351Bug.groovy
index f164830..37ee6ed 100644
--- a/src/test/groovy/bugs/Groovy2351Bug.groovy
+++ b/src/test/groovy/bugs/Groovy2351Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy2351Bug extends GroovyTestCase {
    void testVarArgs () {
 
diff --git a/src/test/groovy/bugs/Groovy2391Bug.groovy b/src/test/groovy/bugs/Groovy2391Bug.groovy
index 85d8390..6cf4d60 100644
--- a/src/test/groovy/bugs/Groovy2391Bug.groovy
+++ b/src/test/groovy/bugs/Groovy2391Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy2391Bug extends GroovyTestCase{
     void testBug () {
       ArrayList.metaClass.asType = { Class clazz ->
diff --git a/src/test/groovy/bugs/Groovy239_Bug.groovy b/src/test/groovy/bugs/Groovy239_Bug.groovy
index 38fa6ae..13284f8 100644
--- a/src/test/groovy/bugs/Groovy239_Bug.groovy
+++ b/src/test/groovy/bugs/Groovy239_Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy239_Bug extends GroovyTestCase {
     
     void testBug() {
diff --git a/src/test/groovy/bugs/Groovy2432Bug.groovy b/src/test/groovy/bugs/Groovy2432Bug.groovy
index 6935a2b..48fc7c2 100644
--- a/src/test/groovy/bugs/Groovy2432Bug.groovy
+++ b/src/test/groovy/bugs/Groovy2432Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyLogTestCase
+
 import java.util.logging.Level
 
 class Groovy2432Bug extends GroovyLogTestCase {
diff --git a/src/test/groovy/bugs/Groovy2490Bug.groovy b/src/test/groovy/bugs/Groovy2490Bug.groovy
index 58179d3..5b09955 100644
--- a/src/test/groovy/bugs/Groovy2490Bug.groovy
+++ b/src/test/groovy/bugs/Groovy2490Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy2490Bug extends GroovyTestCase {
     void test () {
         assertEquals One.foo, "hello"
diff --git a/src/test/groovy/bugs/Groovy252_Bug.groovy b/src/test/groovy/bugs/Groovy252_Bug.groovy
index c99b929..aa97fe6 100644
--- a/src/test/groovy/bugs/Groovy252_Bug.groovy
+++ b/src/test/groovy/bugs/Groovy252_Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 /**
  */
 class Groovy252_Bug extends GroovyTestCase {
diff --git a/src/test/groovy/bugs/Groovy2549Bug.groovy b/src/test/groovy/bugs/Groovy2549Bug.groovy
index 8ff5930..d1efff8 100644
--- a/src/test/groovy/bugs/Groovy2549Bug.groovy
+++ b/src/test/groovy/bugs/Groovy2549Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy2549Bug extends GroovyTestCase {
     void test2549() {
         def c = 2
diff --git a/src/test/groovy/bugs/Groovy2556Bug.groovy b/src/test/groovy/bugs/Groovy2556Bug.groovy
index d2bd8cd..80a93b3 100644
--- a/src/test/groovy/bugs/Groovy2556Bug.groovy
+++ b/src/test/groovy/bugs/Groovy2556Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy2556Bug extends GroovyTestCase {
     final String SOME_METHOD_VALUE = 'someMethodValue'
     final String TEST_NAME = 'someName'
diff --git a/src/test/groovy/bugs/Groovy2557Bug.groovy b/src/test/groovy/bugs/Groovy2557Bug.groovy
index 72031e8..d45967f 100644
--- a/src/test/groovy/bugs/Groovy2557Bug.groovy
+++ b/src/test/groovy/bugs/Groovy2557Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy2557Bug extends GroovyTestCase{
     void testArray2ListCoercion() {
         String[] args = ['a', 'b']
diff --git a/src/test/groovy/bugs/Groovy2558Bug.groovy b/src/test/groovy/bugs/Groovy2558Bug.groovy
index a30be58..88abe83 100644
--- a/src/test/groovy/bugs/Groovy2558Bug.groovy
+++ b/src/test/groovy/bugs/Groovy2558Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy2558Bug extends GroovyTestCase {
     void testMe () {
         Person person = new Person()
diff --git a/src/test/groovy/bugs/Groovy2666Bug.groovy b/src/test/groovy/bugs/Groovy2666Bug.groovy
index fa4c0da..1b917e3 100644
--- a/src/test/groovy/bugs/Groovy2666Bug.groovy
+++ b/src/test/groovy/bugs/Groovy2666Bug.groovy
@@ -18,6 +18,7 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.GroovyBugError
 
 class Groovy2666Bug extends GroovyTestCase{
diff --git a/src/test/groovy/bugs/Groovy2773Bug.groovy b/src/test/groovy/bugs/Groovy2773Bug.groovy
index 3120ccf..afdf218 100644
--- a/src/test/groovy/bugs/Groovy2773Bug.groovy
+++ b/src/test/groovy/bugs/Groovy2773Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy2773Bug extends GroovyTestCase {
     void test() {
         assertScript '''
diff --git a/src/test/groovy/bugs/Groovy278_Bug.groovy b/src/test/groovy/bugs/Groovy278_Bug.groovy
index 458bb6b..13b4fa3 100644
--- a/src/test/groovy/bugs/Groovy278_Bug.groovy
+++ b/src/test/groovy/bugs/Groovy278_Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy278_Bug extends GroovyTestCase {
     
     void testBug() {
diff --git a/src/test/groovy/bugs/Groovy2801Bug.groovy b/src/test/groovy/bugs/Groovy2801Bug.groovy
index ebaa363..9398331 100644
--- a/src/test/groovy/bugs/Groovy2801Bug.groovy
+++ b/src/test/groovy/bugs/Groovy2801Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy2801Bug extends GroovyTestCase {
     void testOverrideToStringInMapOfClosures() {
         def proxyImpl = [foo: { "Foo!" }, toString: { "overridden." }] as IGroovy2801Bug
diff --git a/src/test/groovy/bugs/Groovy2816Bug.groovy b/src/test/groovy/bugs/Groovy2816Bug.groovy
index 4ab0286..84bf536 100644
--- a/src/test/groovy/bugs/Groovy2816Bug.groovy
+++ b/src/test/groovy/bugs/Groovy2816Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy2816Bug extends GroovyTestCase{
     void testMapWithBigListAsValue () {
          [
diff --git a/src/test/groovy/bugs/Groovy2849Bug.groovy b/src/test/groovy/bugs/Groovy2849Bug.groovy
index 51e0d30..f15002a 100644
--- a/src/test/groovy/bugs/Groovy2849Bug.groovy
+++ b/src/test/groovy/bugs/Groovy2849Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy2849Bug extends GroovyTestCase {
     def void testPropertySelectionConflictInANestedClosure(){
         assert c1() == 11
diff --git a/src/test/groovy/bugs/Groovy2949Bug.groovy b/src/test/groovy/bugs/Groovy2949Bug.groovy
index 48d93c3..c7c782c 100644
--- a/src/test/groovy/bugs/Groovy2949Bug.groovy
+++ b/src/test/groovy/bugs/Groovy2949Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy2949Bug extends GroovyTestCase {
     void testBug () {
         new GroovyShell().evaluate """
diff --git a/src/test/groovy/bugs/Groovy3069Bug.groovy b/src/test/groovy/bugs/Groovy3069Bug.groovy
index d005be2..4ebe30d 100644
--- a/src/test/groovy/bugs/Groovy3069Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3069Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy3069Bug extends GroovyTestCase {
     final String CLOSURE_STR = '[Closure]'
     final String CLASS_METHOD_STR = '[ClassMethod]'
diff --git a/src/test/groovy/bugs/Groovy308_Bug.groovy b/src/test/groovy/bugs/Groovy308_Bug.groovy
index 84c1122..1a58e9e 100644
--- a/src/test/groovy/bugs/Groovy308_Bug.groovy
+++ b/src/test/groovy/bugs/Groovy308_Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 import java.io.*
 
 /**
diff --git a/src/test/groovy/bugs/Groovy3135Bug.groovy b/src/test/groovy/bugs/Groovy3135Bug.groovy
index 2374158..c9af84e 100644
--- a/src/test/groovy/bugs/Groovy3135Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3135Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy3135Bug extends GroovyTestCase {
     static Byte b = Byte.parseByte("1")
     static Short s = Short.parseShort("2")
diff --git a/src/test/groovy/bugs/Groovy3139Bug.groovy b/src/test/groovy/bugs/Groovy3139Bug.groovy
index e66c762..23e0873 100644
--- a/src/test/groovy/bugs/Groovy3139Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3139Bug.groovy
@@ -19,6 +19,7 @@
 package groovy.bugs
 
 import groovy.mock.interceptor.StubFor
+import groovy.test.GroovyTestCase
 
 class Groovy3139Bug extends GroovyTestCase {
 
diff --git a/src/test/groovy/bugs/Groovy3156And2621Bug.groovy b/src/test/groovy/bugs/Groovy3156And2621Bug.groovy
index 3000bbf..a6fc742 100644
--- a/src/test/groovy/bugs/Groovy3156And2621Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3156And2621Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy3156And2621Bug extends GroovyTestCase {
     void testMethodNameResolutionInANestedClosure() {
         assert m() == 'method'
diff --git a/src/test/groovy/bugs/Groovy3163Bug.groovy b/src/test/groovy/bugs/Groovy3163Bug.groovy
index 3a9d57e..50b6b92 100644
--- a/src/test/groovy/bugs/Groovy3163Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3163Bug.groovy
@@ -18,13 +18,11 @@
  */
 package groovy.bugs
 
-import java.math.BigInteger;
+import groovy.test.GroovyTestCase
 
+class Groovy3163Test extends GroovyTestCase {
 
-public class Groovy3163Test extends GroovyTestCase {
-
-public void testSuperOverStatic()
-{
+void testSuperOverStatic() {
     def siws = new Groovy3163SomeImplementorWithStatic()
 
     assert (1 == siws.build(1)[0])
@@ -42,20 +40,20 @@ public void testSuperOverStatic()
 
 class Groovy3163SomeBaseClass {
 
-    public Object build(Integer i) {
-        return i;
+    Object build(Integer i) {
+        return i
     }
 
-    public Object build(BigInteger i) {
-        return i;
+    Object build(BigInteger i) {
+        return i
     }
 
-    public Object build(Class c) {
-        return c;
+    Object build(Class c) {
+        return c
     }
 
-    public Object build(Script s) {
-        return s;
+    Object build(Script s) {
+        return s
     }
 }
 
@@ -63,20 +61,20 @@ class Groovy3163SomeImplementorWithStatic extends Groovy3163SomeBaseClass {
 
     // Comment this out, otherwise the super.build(x) calls won't match the members in our parent.
 
-    public static Object build(Closure c) {
+    static Object build(Closure c) {
         return [c]
     }
 
     // This one will also block a super.build, but it's the Script one.
-    public static Object build(BigDecimal d) {
+    static Object build(BigDecimal d) {
         return [d]
     }
 
-    public Object build(Integer i) {
+    Object build(Integer i) {
         return [super.build(i)]
     }
 
-    public Object build(Script s) {
+    Object build(Script s) {
         return [super.build(s)]
     }
 
diff --git a/src/test/groovy/bugs/Groovy3175_Bug.groovy b/src/test/groovy/bugs/Groovy3175_Bug.groovy
index 1f1023b..c4b6472 100644
--- a/src/test/groovy/bugs/Groovy3175_Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3175_Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy3175_Bug extends GroovyTestCase {
 
     void testSyntheticModifier() {
diff --git a/src/test/groovy/bugs/Groovy3205Bug.groovy b/src/test/groovy/bugs/Groovy3205Bug.groovy
index b1eeb4a..7929391 100644
--- a/src/test/groovy/bugs/Groovy3205Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3205Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy3205Bug extends GroovyTestCase {
     def void testOverrideToStringInMapOfClosures() {
         def proxyImpl = [
diff --git a/src/test/groovy/bugs/Groovy3208Bug.groovy b/src/test/groovy/bugs/Groovy3208Bug.groovy
index 692d7cb..3a37b34 100644
--- a/src/test/groovy/bugs/Groovy3208Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3208Bug.groovy
@@ -18,7 +18,9 @@
  */
 package groovy.bugs
 
-public class Groovy3208Bug extends GroovyTestCase {
+import groovy.test.GroovyTestCase
+
+class Groovy3208Bug extends GroovyTestCase {
 
    void testBug () {
       new Sub().each { assertEquals("ABC", it.doIt()) }
diff --git a/src/test/groovy/bugs/Groovy3235Bug.groovy b/src/test/groovy/bugs/Groovy3235Bug.groovy
index 7aa1a1a..5d250f7 100644
--- a/src/test/groovy/bugs/Groovy3235Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3235Bug.groovy
@@ -18,7 +18,9 @@
  */
 package groovy.bugs
 
-public class Groovy3235Bug extends GroovyTestCase {
+import groovy.test.GroovyTestCase
+
+class Groovy3235Bug extends GroovyTestCase {
 
 void testBug3235 () {
       def d = """This is one line.
diff --git a/src/test/groovy/bugs/Groovy3238Bug.groovy b/src/test/groovy/bugs/Groovy3238Bug.groovy
index 64094f7..770547a 100644
--- a/src/test/groovy/bugs/Groovy3238Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3238Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy3238Bug extends GroovyTestCase {
     def void testRelativeExactnessToMatchForBigIntegerParam() {
         def obj = new Groovy3238Bug()
diff --git a/src/test/groovy/bugs/Groovy325_Bug.groovy b/src/test/groovy/bugs/Groovy325_Bug.groovy
index 294f8d0..24a5a92 100644
--- a/src/test/groovy/bugs/Groovy325_Bug.groovy
+++ b/src/test/groovy/bugs/Groovy325_Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy325_Bug extends GroovyTestCase {
   static boolean staticMethod() {
     return true
diff --git a/src/test/groovy/bugs/Groovy3304Bug.groovy b/src/test/groovy/bugs/Groovy3304Bug.groovy
index efe538d..0acdbb8 100644
--- a/src/test/groovy/bugs/Groovy3304Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3304Bug.groovy
@@ -18,6 +18,7 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.control.MultipleCompilationErrorsException
 
 class Groovy3304Bug extends GroovyTestCase {
diff --git a/src/test/groovy/bugs/Groovy3305Bug.groovy b/src/test/groovy/bugs/Groovy3305Bug.groovy
index c59d982..9edab20 100644
--- a/src/test/groovy/bugs/Groovy3305Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3305Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy3305Bug extends GroovyTestCase {
     def void testSingleListExpandingToMultipleArgs() {
         assert foo1([1, "A"]) == "1,A"
diff --git a/src/test/groovy/bugs/Groovy3335Bug.groovy b/src/test/groovy/bugs/Groovy3335Bug.groovy
index 26e68c8..835de67 100644
--- a/src/test/groovy/bugs/Groovy3335Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3335Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy3335Bug extends GroovyTestCase {
     void testClassToString() {
         // the following call was resulting in a MethodSelectionException
diff --git a/src/test/groovy/bugs/Groovy3339Bug.groovy b/src/test/groovy/bugs/Groovy3339Bug.groovy
index 54a3a77..1382989 100644
--- a/src/test/groovy/bugs/Groovy3339Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3339Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy3339Bug extends GroovyTestCase {
     void testConstantCachingInClosureClasses() {
         // In all the cases below, the OptimizerVisitor replaces number 10 by
diff --git a/src/test/groovy/bugs/Groovy3383Bug.groovy b/src/test/groovy/bugs/Groovy3383Bug.groovy
index 86ed25e..aaa6899 100644
--- a/src/test/groovy/bugs/Groovy3383Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3383Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy3383Bug extends GroovyTestCase {
     void testClassUsageInInterfaceDef() {
         assertScript """
diff --git a/src/test/groovy/bugs/Groovy3389Bug.groovy b/src/test/groovy/bugs/Groovy3389Bug.groovy
index 42efa56..fff0961 100644
--- a/src/test/groovy/bugs/Groovy3389Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3389Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy3389Bug extends GroovyTestCase {
     void testFieldHidingByLocalVariable() {
         assertScript """
diff --git a/src/test/groovy/bugs/Groovy3403Bug.groovy b/src/test/groovy/bugs/Groovy3403Bug.groovy
index a750123..35fda7d 100644
--- a/src/test/groovy/bugs/Groovy3403Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3403Bug.groovy
@@ -19,6 +19,7 @@
 package groovy.bugs
 
 import groovy.mock.interceptor.StubFor
+import groovy.test.GroovyTestCase
 
 class Groovy3403Bug extends GroovyTestCase {
 
diff --git a/src/test/groovy/bugs/Groovy3405Bug.groovy b/src/test/groovy/bugs/Groovy3405Bug.groovy
index d4488c9..bdde81d 100644
--- a/src/test/groovy/bugs/Groovy3405Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3405Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy3405Bug extends GroovyTestCase {
 
     protected void tearDown() {
diff --git a/src/test/groovy/bugs/Groovy3410Bug.groovy b/src/test/groovy/bugs/Groovy3410Bug.groovy
index 7c57e2b..6516782 100644
--- a/src/test/groovy/bugs/Groovy3410Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3410Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy3410Bug extends GroovyTestCase {
 
     void testClassVerificationErrorsWithBooleanExpUsingPrimitiveFields() {
diff --git a/src/test/groovy/bugs/Groovy3424Bug.groovy b/src/test/groovy/bugs/Groovy3424Bug.groovy
index bab7429..2cd3067 100644
--- a/src/test/groovy/bugs/Groovy3424Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3424Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy3424Bug extends GroovyTestCase {
 
     MetaClassRegistry registry
diff --git a/src/test/groovy/bugs/Groovy3426Bug.groovy b/src/test/groovy/bugs/Groovy3426Bug.groovy
index e15ce21..aec3496 100644
--- a/src/test/groovy/bugs/Groovy3426Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3426Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy3426Bug extends GroovyTestCase {
 
     MetaClassRegistry registry
diff --git a/src/test/groovy/bugs/Groovy3446Bug.groovy b/src/test/groovy/bugs/Groovy3446Bug.groovy
index defc73b..fc47a84 100644
--- a/src/test/groovy/bugs/Groovy3446Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3446Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 import static java.lang.System.currentTimeMillis
 
 class Groovy3446Bug extends GroovyTestCase {
diff --git a/src/test/groovy/bugs/Groovy3462Bug.groovy b/src/test/groovy/bugs/Groovy3462Bug.groovy
index 18eecbe..7d4b5c5 100644
--- a/src/test/groovy/bugs/Groovy3462Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3462Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy3462Bug extends GroovyTestCase {
 
     void testClosureWithParameterHavingDefaultExpression() {
diff --git a/src/test/groovy/bugs/Groovy3464Bug.groovy b/src/test/groovy/bugs/Groovy3464Bug.groovy
index 83ca9bf..4ce583a 100644
--- a/src/test/groovy/bugs/Groovy3464Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3464Bug.groovy
@@ -18,6 +18,7 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.tools.javac.JavaAwareCompilationUnit
 import org.codehaus.groovy.control.CompilerConfiguration
 
diff --git a/src/test/groovy/bugs/Groovy3465Bug.groovy b/src/test/groovy/bugs/Groovy3465Bug.groovy
index d95c6ac..a4010a4 100644
--- a/src/test/groovy/bugs/Groovy3465Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3465Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 import static groovy.bugs.Groovy3465Helper.*
 
 class Groovy3465Bug extends GroovyTestCase {
diff --git a/src/test/groovy/bugs/Groovy3498Bug.groovy b/src/test/groovy/bugs/Groovy3498Bug.groovy
index 7d36bfe..c3531ce 100644
--- a/src/test/groovy/bugs/Groovy3498Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3498Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy3498Bug extends GroovyTestCase {
     void testClosureExpressionFiltering() {
         new GroovyShell().evaluate """
diff --git a/src/test/groovy/bugs/Groovy3509Bug.groovy b/src/test/groovy/bugs/Groovy3509Bug.groovy
index 15a197e..dcef92b 100644
--- a/src/test/groovy/bugs/Groovy3509Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3509Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy3509Bug extends GroovyTestCase {
 
     void testGPathInconcistency() {
diff --git a/src/test/groovy/bugs/Groovy3511Bug.groovy b/src/test/groovy/bugs/Groovy3511Bug.groovy
index 50adc6c..4fb7502 100644
--- a/src/test/groovy/bugs/Groovy3511Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3511Bug.groovy
@@ -18,6 +18,7 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation
 
 class Groovy3511Bug extends GroovyTestCase {
diff --git a/src/test/groovy/bugs/Groovy3519Bug.groovy b/src/test/groovy/bugs/Groovy3519Bug.groovy
index fb78429..953c050 100644
--- a/src/test/groovy/bugs/Groovy3519Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3519Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy3519Bug extends GroovyTestCase {
 
     void testShouldSkipPrivateMethodsFromCovariantReturnTypeChecks() {
diff --git a/src/test/groovy/bugs/Groovy3560Bug.groovy b/src/test/groovy/bugs/Groovy3560Bug.groovy
index 353d3a3..80b5c0a 100644
--- a/src/test/groovy/bugs/Groovy3560Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3560Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy3560Bug extends GroovyTestCase {
     void testVarArgsWithAnInterfaceAsVarArgArrayType() {
         assert Groovy3560Helper.m1(new Groovy3560A(), new Groovy3560B()) == 2
diff --git a/src/test/groovy/bugs/Groovy3574Bug.groovy b/src/test/groovy/bugs/Groovy3574Bug.groovy
index 186fa56..9d66a65 100644
--- a/src/test/groovy/bugs/Groovy3574Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3574Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy3574Bug extends GroovyTestCase {
     void testToStringCallDelegationToConvertedClosureProxy() {
         Closure failing1 = { 
diff --git a/src/test/groovy/bugs/Groovy3590Bug.groovy b/src/test/groovy/bugs/Groovy3590Bug.groovy
index 0801f66..3540c49 100644
--- a/src/test/groovy/bugs/Groovy3590Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3590Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy3590Bug extends GroovyTestCase {
     void testMapDefaultValueGetWithPrevKeyHavingNullValue() {
         def map = ['key':null]
diff --git a/src/test/groovy/bugs/Groovy3645Bug.groovy b/src/test/groovy/bugs/Groovy3645Bug.groovy
index 8af5f30..5c5e121 100644
--- a/src/test/groovy/bugs/Groovy3645Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3645Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy3645Bug extends GroovyTestCase {
     void testMethodCallOnSuperInAStaticMethod() {
         try{
diff --git a/src/test/groovy/bugs/Groovy3658Bug.groovy b/src/test/groovy/bugs/Groovy3658Bug.groovy
index 281cb89..fa3cb14 100644
--- a/src/test/groovy/bugs/Groovy3658Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3658Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy3658Bug extends GroovyTestCase {
     void testConstructorWithParameterWithInitialValueAsStaticMethodCallResult() {
         Groovy3658BugHelper bug2 = new Groovy3658BugHelper('person', 'tag')
diff --git a/src/test/groovy/bugs/Groovy3679Bug.groovy b/src/test/groovy/bugs/Groovy3679Bug.groovy
index 00cce73..f4024d8 100644
--- a/src/test/groovy/bugs/Groovy3679Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3679Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy3679Bug extends GroovyTestCase {
     void testMapEntryWinOverPvtAndPkgPrivateClassFields() {
         // map entry should win over a package-private field
diff --git a/src/test/groovy/bugs/Groovy3716Bug.groovy b/src/test/groovy/bugs/Groovy3716Bug.groovy
index 62f4841..defd83e 100644
--- a/src/test/groovy/bugs/Groovy3716Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3716Bug.groovy
@@ -18,6 +18,7 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.ast.ClassHelper
 
 class Groovy3716Bug extends GroovyTestCase {
diff --git a/src/test/groovy/bugs/Groovy3718Bug.groovy b/src/test/groovy/bugs/Groovy3718Bug.groovy
index 9dae911..aefa5a6 100644
--- a/src/test/groovy/bugs/Groovy3718Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3718Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy3718Bug extends GroovyTestCase {
     void testPatternMatchOfNull() {
         assertFalse null ==~ /[^0-9]+/
diff --git a/src/test/groovy/bugs/Groovy3720Bug.groovy b/src/test/groovy/bugs/Groovy3720Bug.groovy
index c9b4d7e..23a5741 100644
--- a/src/test/groovy/bugs/Groovy3720Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3720Bug.groovy
@@ -19,6 +19,7 @@
 package groovy.bugs
 
 import groovy.mock.interceptor.*
+import groovy.test.GroovyTestCase
 
 class Groovy3720Bug extends GroovyTestCase {
     void testCreateStubNode() {
diff --git a/src/test/groovy/bugs/Groovy3723Bug.groovy b/src/test/groovy/bugs/Groovy3723Bug.groovy
index 642bcc5..6e41ed6 100644
--- a/src/test/groovy/bugs/Groovy3723Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3723Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy3723Bug extends GroovyTestCase {
     void testEMCPropertyAccessWitGetPropertySetProperty() {
         assertScript """
diff --git a/src/test/groovy/bugs/Groovy3726Bug.groovy b/src/test/groovy/bugs/Groovy3726Bug.groovy
index cdc28d2..79845c0 100644
--- a/src/test/groovy/bugs/Groovy3726Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3726Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 import java.lang.reflect.*
 
 class Groovy3726Bug extends GroovyTestCase {
diff --git a/src/test/groovy/bugs/Groovy3749Bug.groovy b/src/test/groovy/bugs/Groovy3749Bug.groovy
index e024a25..cdea5ab 100644
--- a/src/test/groovy/bugs/Groovy3749Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3749Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy3749Bug extends GroovyTestCase {
     void testScriptsProvidingStaticMainMethod() {
         def scriptStr
diff --git a/src/test/groovy/bugs/Groovy3770Bug.groovy b/src/test/groovy/bugs/Groovy3770Bug.groovy
index 7c11322..e3dad93 100644
--- a/src/test/groovy/bugs/Groovy3770Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3770Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy3770Bug extends GroovyTestCase {
     void testSetDelegateAndResolveStrategyOnACurriedClosure() {
         assertScript """
diff --git a/src/test/groovy/bugs/Groovy3776Bug.groovy b/src/test/groovy/bugs/Groovy3776Bug.groovy
index f5dd30e..5539f1e 100644
--- a/src/test/groovy/bugs/Groovy3776Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3776Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 import java.lang.reflect.*
 import org.codehaus.groovy.control.MultipleCompilationErrorsException
 import org.codehaus.groovy.GroovyBugError
diff --git a/src/test/groovy/bugs/Groovy3784Bug.groovy b/src/test/groovy/bugs/Groovy3784Bug.groovy
index 575198c..4fecc68 100644
--- a/src/test/groovy/bugs/Groovy3784Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3784Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy3784Bug extends GroovyTestCase {
     void testUseOfDelegateAndThenGenericsSharingTheSameClassHelper() {
         GroovyClassLoader gcl = new GroovyClassLoader()
diff --git a/src/test/groovy/bugs/Groovy3789Bug.groovy b/src/test/groovy/bugs/Groovy3789Bug.groovy
index 95c1482..405e9de 100644
--- a/src/test/groovy/bugs/Groovy3789Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3789Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy3789Bug extends GroovyTestCase {
     void testAddReturnWhenLastStatementIsSwitch() {
         def ifClosure = { ->
diff --git a/src/test/groovy/bugs/Groovy3799Bug.groovy b/src/test/groovy/bugs/Groovy3799Bug.groovy
index b05078d..88e494d 100644
--- a/src/test/groovy/bugs/Groovy3799Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3799Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy37XXBug extends GroovyTestCase {
     void testVarArgsWithAnInterfaceAsVarArgArrayTypeWithInheritenceInArgs() {
         def obj
diff --git a/src/test/groovy/bugs/Groovy3801Bug.groovy b/src/test/groovy/bugs/Groovy3801Bug.groovy
index 8e3c4f7..f372910 100644
--- a/src/test/groovy/bugs/Groovy3801Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3801Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy3801Bug extends GroovyTestCase {
     void testMainMethodSignature() {
         def gcl = new GroovyClassLoader()
diff --git a/src/test/groovy/bugs/Groovy3818Bug.groovy b/src/test/groovy/bugs/Groovy3818Bug.groovy
index 3cd4b07..0ebd515 100644
--- a/src/test/groovy/bugs/Groovy3818Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3818Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy3818Bug extends GroovyTestCase {
     void testCreatingSimilarSetandMapWithComparator() {
         def scompare = { a, b -> a.id <=> b.id } as Comparator
diff --git a/src/test/groovy/bugs/Groovy3827Bug.groovy b/src/test/groovy/bugs/Groovy3827Bug.groovy
index de25663..83cabcf 100644
--- a/src/test/groovy/bugs/Groovy3827Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3827Bug.groovy
@@ -18,6 +18,7 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.control.MultipleCompilationErrorsException
 
 class Groovy3827Bug extends GroovyTestCase {
diff --git a/src/test/groovy/bugs/Groovy3830Bug.groovy b/src/test/groovy/bugs/Groovy3830Bug.groovy
index 9c54dfc..8e1c96d 100644
--- a/src/test/groovy/bugs/Groovy3830Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3830Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy3830Bug extends GroovyTestCase {
     void testCallSitesUsageInAnInterface() {
         assert I3830.i == 2
diff --git a/src/test/groovy/bugs/Groovy3831Bug.groovy b/src/test/groovy/bugs/Groovy3831Bug.groovy
index 33a06ff..e268206 100644
--- a/src/test/groovy/bugs/Groovy3831Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3831Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy3831Bug extends GroovyTestCase {
     void testClosureDefinitionInSpecialCallsInConstructorsV1() {
         def test = new Test3831V1('hello', ["world"])
diff --git a/src/test/groovy/bugs/Groovy3834Bug.groovy b/src/test/groovy/bugs/Groovy3834Bug.groovy
index 1626c14..94a572d 100644
--- a/src/test/groovy/bugs/Groovy3834Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3834Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy3834Bug extends GroovyTestCase {
     void testDuplicateCallsToMissingMethod() {
         def instance = new AClassWithMethodMissingMethod()
diff --git a/src/test/groovy/bugs/Groovy3839Bug.groovy b/src/test/groovy/bugs/Groovy3839Bug.groovy
index 4266391..1fd10f1 100644
--- a/src/test/groovy/bugs/Groovy3839Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3839Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy3839Bug extends GroovyTestCase {
     void testGroovyASTTransformationWithOneClass() {
         assertScript """
diff --git a/src/test/groovy/bugs/Groovy3863Bug.groovy b/src/test/groovy/bugs/Groovy3863Bug.groovy
index 203b981..c6e5726 100644
--- a/src/test/groovy/bugs/Groovy3863Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3863Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy3863Bug extends GroovyTestCase {
     void testClassNameAccessInMainMethod() {
         assertScript """
diff --git a/src/test/groovy/bugs/Groovy3868Bug.groovy b/src/test/groovy/bugs/Groovy3868Bug.groovy
index 4e0d45d..d1999ec 100644
--- a/src/test/groovy/bugs/Groovy3868Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3868Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy3868Bug extends GroovyTestCase {
     void testAsTypeCallWithPrimitiveType() {
         callAndcheckResults(Long)
diff --git a/src/test/groovy/bugs/Groovy3871Bug.groovy b/src/test/groovy/bugs/Groovy3871Bug.groovy
index bdb2a78..2e384e9 100644
--- a/src/test/groovy/bugs/Groovy3871Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3871Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 /**
  * Fix for https://issues.apache.org/jira/browse/GROOVY-3871
  */
diff --git a/src/test/groovy/bugs/Groovy3873Bug.groovy b/src/test/groovy/bugs/Groovy3873Bug.groovy
index 2b291c5..5e3ed63 100644
--- a/src/test/groovy/bugs/Groovy3873Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3873Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy3873Bug extends GroovyTestCase {
     void testAddingMethodsToMetaClassOfInterface() {
         try {
diff --git a/src/test/groovy/bugs/Groovy3876Bug.groovy b/src/test/groovy/bugs/Groovy3876Bug.groovy
index c022d37..7c584f0 100644
--- a/src/test/groovy/bugs/Groovy3876Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3876Bug.groovy
@@ -18,6 +18,7 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.runtime.typehandling.GroovyCastException
 
 class Groovy3876Bug extends GroovyTestCase {
diff --git a/src/test/groovy/bugs/Groovy3894Bug.groovy b/src/test/groovy/bugs/Groovy3894Bug.groovy
index e9b04b9..c2ec4cf 100644
--- a/src/test/groovy/bugs/Groovy3894Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3894Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy3894Bug extends GroovyTestCase {
     void testInfinityToBigDecimalConversion() {
         BigDecimal x = 999999999999999999999999999999999999999999999999999999999999999999999999999999999999999
diff --git a/src/test/groovy/bugs/Groovy389_Bug.groovy b/src/test/groovy/bugs/Groovy389_Bug.groovy
index be42203..54ad428 100644
--- a/src/test/groovy/bugs/Groovy389_Bug.groovy
+++ b/src/test/groovy/bugs/Groovy389_Bug.groovy
@@ -18,11 +18,12 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 /**
  *  Verifies that closures work inside case blocks.
  *
  */
-
 class Groovy389_Bug extends GroovyTestCase {
  
     void testBug() {
diff --git a/src/test/groovy/bugs/Groovy3904Bug.groovy b/src/test/groovy/bugs/Groovy3904Bug.groovy
index f3567be..a8b7464 100644
--- a/src/test/groovy/bugs/Groovy3904Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3904Bug.groovy
@@ -18,6 +18,7 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.control.MultipleCompilationErrorsException
 
 class Groovy3904Bug extends GroovyTestCase {
diff --git a/src/test/groovy/bugs/Groovy3948Bug.groovy b/src/test/groovy/bugs/Groovy3948Bug.groovy
index 45de093..68c76a2 100644
--- a/src/test/groovy/bugs/Groovy3948Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3948Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy3948Bug extends GroovyTestCase {
 
     void testBug1() {
diff --git a/src/test/groovy/bugs/Groovy3949Bug.groovy b/src/test/groovy/bugs/Groovy3949Bug.groovy
index 5fb07c8..266f51b 100644
--- a/src/test/groovy/bugs/Groovy3949Bug.groovy
+++ b/src/test/groovy/bugs/Groovy3949Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy3949Bug extends GroovyTestCase {
     void testClosureCallInStaticContextForClassWithStaticCallMethod() {
         assert Class3949.m { "$it 123" } == "1234 123"
diff --git a/src/test/groovy/bugs/Groovy4006Bug.groovy b/src/test/groovy/bugs/Groovy4006Bug.groovy
index e12dc02..9a279bd 100644
--- a/src/test/groovy/bugs/Groovy4006Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4006Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy4006Bug extends GroovyTestCase {
     void testOuterThisReferenceImplicitPassingToInnerClassConstructorNoArg() {
         try {
diff --git a/src/test/groovy/bugs/Groovy4009Bug.groovy b/src/test/groovy/bugs/Groovy4009Bug.groovy
index af4b448..0cae632 100644
--- a/src/test/groovy/bugs/Groovy4009Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4009Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy4009Bug extends GroovyTestCase {
     void testNoOfTimesResolveCallIsMade() {
         try {
diff --git a/src/test/groovy/bugs/Groovy4018Bug.groovy b/src/test/groovy/bugs/Groovy4018Bug.groovy
index 35690ce..4ae0b62 100644
--- a/src/test/groovy/bugs/Groovy4018Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4018Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy4018Bug extends GroovyTestCase {
 
     void testFloatAsBoolean() {
diff --git a/src/test/groovy/bugs/Groovy4029Bug.groovy b/src/test/groovy/bugs/Groovy4029Bug.groovy
index 63d4f60..6bd4cdd 100644
--- a/src/test/groovy/bugs/Groovy4029Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4029Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy4029Bug extends GroovyTestCase {
     void testAddNullKeyEntryInMapUsingSubscriptNotation() {
         Map m = [:]
diff --git a/src/test/groovy/bugs/Groovy4035Bug.groovy b/src/test/groovy/bugs/Groovy4035Bug.groovy
index 8d104e3..b9aa1ef 100644
--- a/src/test/groovy/bugs/Groovy4035Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4035Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy4035Bug extends GroovyTestCase {
     void testSuperCallInsideAnAIC() {
         def aic = new Foo4035() {
diff --git a/src/test/groovy/bugs/Groovy4038Bug.groovy b/src/test/groovy/bugs/Groovy4038Bug.groovy
index 30c0f4f..72f4d0d 100644
--- a/src/test/groovy/bugs/Groovy4038Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4038Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy4038Bug extends GroovyTestCase {
     void testResondsToOnClosures() {
         def c = {String x -> }
diff --git a/src/test/groovy/bugs/Groovy4046Bug.groovy b/src/test/groovy/bugs/Groovy4046Bug.groovy
index a7297c8..4595435 100644
--- a/src/test/groovy/bugs/Groovy4046Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4046Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy4046Bug extends GroovyTestCase {
     void testComparableOnLeftObjectOnRight() {
         assertFalse MyEnum4046.A == new Object()
diff --git a/src/test/groovy/bugs/Groovy4069Bug.groovy b/src/test/groovy/bugs/Groovy4069Bug.groovy
index 2c81e27..aa4855a 100644
--- a/src/test/groovy/bugs/Groovy4069Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4069Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy4069Bug extends GroovyTestCase {
 
     void testEMCConstructorWithSubClassingTest1V1() {
diff --git a/src/test/groovy/bugs/Groovy4075Bug.groovy b/src/test/groovy/bugs/Groovy4075Bug.groovy
index f87c458..f5ec207 100644
--- a/src/test/groovy/bugs/Groovy4075Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4075Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy4075Bug extends GroovyTestCase {
     static void failChecked() throws Exception {
         throw new Exception(new IllegalArgumentException(new NullPointerException("NPE in failChecked")))
diff --git a/src/test/groovy/bugs/Groovy4078Bug.groovy b/src/test/groovy/bugs/Groovy4078Bug.groovy
index fc13e28..6e33948 100644
--- a/src/test/groovy/bugs/Groovy4078Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4078Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy4078Bug extends GroovyTestCase {
     void testInfiniteLoopDetectionInStepUsage() {
         (2..2).step 0, {assert it != null} //IntRange
diff --git a/src/test/groovy/bugs/Groovy4080Bug.groovy b/src/test/groovy/bugs/Groovy4080Bug.groovy
index 4e44939..1a71b12 100644
--- a/src/test/groovy/bugs/Groovy4080Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4080Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy4080Bug extends GroovyTestCase {
     public void testClassGeneratedWithAnnotationHavingGrabOnImport() {
         GroovyShell shell = new GroovyShell(new GroovyClassLoader())
diff --git a/src/test/groovy/bugs/Groovy4098Bug.groovy b/src/test/groovy/bugs/Groovy4098Bug.groovy
index 7b9769c..99bd083 100644
--- a/src/test/groovy/bugs/Groovy4098Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4098Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy4098Bug extends GroovyTestCase {
     public String propertyOne
     public String propertyTwo
diff --git a/src/test/groovy/bugs/Groovy4104Bug.groovy b/src/test/groovy/bugs/Groovy4104Bug.groovy
index 31b1960..b30cfcb 100644
--- a/src/test/groovy/bugs/Groovy4104Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4104Bug.groovy
@@ -18,6 +18,7 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.runtime.MethodClosure
 
 class Groovy4104Bug extends GroovyTestCase {
diff --git a/src/test/groovy/bugs/Groovy4106Bug.groovy b/src/test/groovy/bugs/Groovy4106Bug.groovy
index 659ac18..57dc228 100644
--- a/src/test/groovy/bugs/Groovy4106Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4106Bug.groovy
@@ -19,6 +19,7 @@
 package groovy.bugs
 
 import groovy.lang.MetaClassRegistry.MetaClassCreationHandle
+import groovy.test.GroovyTestCase
 
 class Groovy4106Bug extends GroovyTestCase {
     void testStackOverflowError() {
diff --git a/src/test/groovy/bugs/Groovy4107Bug.groovy b/src/test/groovy/bugs/Groovy4107Bug.groovy
index fe45ecb..3b6a9ef 100644
--- a/src/test/groovy/bugs/Groovy4107Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4107Bug.groovy
@@ -18,6 +18,7 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.control.MultipleCompilationErrorsException
 
 class Groovy4107Bug extends GroovyTestCase {
diff --git a/src/test/groovy/bugs/Groovy4111Bug.groovy b/src/test/groovy/bugs/Groovy4111Bug.groovy
index 0f01090..01f2cef 100644
--- a/src/test/groovy/bugs/Groovy4111Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4111Bug.groovy
@@ -18,6 +18,7 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.control.MultipleCompilationErrorsException
 
 class Groovy4111Bug extends GroovyTestCase {
diff --git a/src/test/groovy/bugs/Groovy4116Bug.groovy b/src/test/groovy/bugs/Groovy4116Bug.groovy
index db75413..73a09dc 100644
--- a/src/test/groovy/bugs/Groovy4116Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4116Bug.groovy
@@ -18,6 +18,7 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.control.MultipleCompilationErrorsException
 
 class Groovy4116Bug extends GroovyTestCase {
diff --git a/src/test/groovy/bugs/Groovy4119Bug.groovy b/src/test/groovy/bugs/Groovy4119Bug.groovy
index 95895ff..d01c820 100644
--- a/src/test/groovy/bugs/Groovy4119Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4119Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy4119Bug extends GroovyTestCase {
     void testThis$0PassingInSuperCallWithinInnerClasses() {
         assertScript """
diff --git a/src/test/groovy/bugs/Groovy4120Bug.groovy b/src/test/groovy/bugs/Groovy4120Bug.groovy
index c2ec392..486d548 100644
--- a/src/test/groovy/bugs/Groovy4120Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4120Bug.groovy
@@ -18,6 +18,7 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.control.MultipleCompilationErrorsException
 
 class Groovy4120Bug extends GroovyTestCase {
diff --git a/src/test/groovy/bugs/Groovy4121Bug.groovy b/src/test/groovy/bugs/Groovy4121Bug.groovy
index 50cf160..3c26e6d 100644
--- a/src/test/groovy/bugs/Groovy4121Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4121Bug.groovy
@@ -18,6 +18,7 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.control.MultipleCompilationErrorsException
 
 class Groovy4121Bug extends GroovyTestCase {
diff --git a/src/test/groovy/bugs/Groovy4129Bug.groovy b/src/test/groovy/bugs/Groovy4129Bug.groovy
index 0fb521a..a861663 100644
--- a/src/test/groovy/bugs/Groovy4129Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4129Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy4129Bug extends GroovyTestCase {
     void testImplicitThisPassingInObjInitBlock() {
         new GroovyShell().parse """
diff --git a/src/test/groovy/bugs/Groovy4131Bug.groovy b/src/test/groovy/bugs/Groovy4131Bug.groovy
index e7e6da3..4b648dc 100644
--- a/src/test/groovy/bugs/Groovy4131Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4131Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy4131Bug extends GroovyTestCase {
     void testTwoMainMethodsInAScript() {
         try {
diff --git a/src/test/groovy/bugs/Groovy4133Bug.groovy b/src/test/groovy/bugs/Groovy4133Bug.groovy
index 06f4444..2854f99 100644
--- a/src/test/groovy/bugs/Groovy4133Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4133Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy4133Bug extends GroovyTestCase {
     void testDelegateAnnotationWithNativeMethods() {
         new GroovyShell().evaluate """
diff --git a/src/test/groovy/bugs/Groovy4134Bug.groovy b/src/test/groovy/bugs/Groovy4134Bug.groovy
index f80eea5..b949232 100644
--- a/src/test/groovy/bugs/Groovy4134Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4134Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy4134Bug extends GroovyTestCase {
     void testClosureParamsWithDefaultValues() {
         def c = {Integer maxRows = Integer.MAX_VALUE -> maxRows}
diff --git a/src/test/groovy/bugs/Groovy4139Bug.groovy b/src/test/groovy/bugs/Groovy4139Bug.groovy
index 960cfdc..c47cdd4 100644
--- a/src/test/groovy/bugs/Groovy4139Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4139Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy4139Bug extends GroovyTestCase {
     void testEmptyStringAsMapEntryKey() {
         use (groovy.time.TimeCategory) {
diff --git a/src/test/groovy/bugs/Groovy4170Bug.groovy b/src/test/groovy/bugs/Groovy4170Bug.groovy
index 38e9281..33a7e13 100644
--- a/src/test/groovy/bugs/Groovy4170Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4170Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy4170Bug extends GroovyTestCase {
     void testClosureCurrying() {
         new CurryFoo4170().bar()
diff --git a/src/test/groovy/bugs/Groovy4188Bug.groovy b/src/test/groovy/bugs/Groovy4188Bug.groovy
index b666979..e10670f 100644
--- a/src/test/groovy/bugs/Groovy4188Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4188Bug.groovy
@@ -18,6 +18,7 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.control.MultipleCompilationErrorsException
 
 class Groovy4188Bug extends GroovyTestCase {
diff --git a/src/test/groovy/bugs/Groovy4191Bug.groovy b/src/test/groovy/bugs/Groovy4191Bug.groovy
index 4b28da6..f847fe4 100644
--- a/src/test/groovy/bugs/Groovy4191Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4191Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy4191Bug extends GroovyTestCase {
     void testPutIntoArray() {
         recreateProblem()    
diff --git a/src/test/groovy/bugs/Groovy4193Bug.groovy b/src/test/groovy/bugs/Groovy4193Bug.groovy
index efc11a5..6db3096 100644
--- a/src/test/groovy/bugs/Groovy4193Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4193Bug.groovy
@@ -18,6 +18,7 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.ast.ImportNode
 
 class Groovy4193Bug extends GroovyTestCase {
diff --git a/src/test/groovy/bugs/Groovy4202Bug.groovy b/src/test/groovy/bugs/Groovy4202Bug.groovy
index 0132c94..f611b49 100644
--- a/src/test/groovy/bugs/Groovy4202Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4202Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy4202Bug extends GroovyTestCase {
     void testSuccessiveMCModificationFirstClassThenInstance() {
         def inst0 = new Foo4202()
diff --git a/src/test/groovy/bugs/Groovy4206Bug.groovy b/src/test/groovy/bugs/Groovy4206Bug.groovy
index 68ae8f2..011c118 100644
--- a/src/test/groovy/bugs/Groovy4206Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4206Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy4206Bug extends GroovyTestCase {
     void testIsNamesForBooleanProps() {
         assert Bar4206.isValid()
diff --git a/src/test/groovy/bugs/Groovy4235Bug.groovy b/src/test/groovy/bugs/Groovy4235Bug.groovy
index dd19b52..f38224d 100644
--- a/src/test/groovy/bugs/Groovy4235Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4235Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy4235Bug extends GroovyTestCase {
     void testAccessStaticPropInsideClosure() {
         assertScript """
diff --git a/src/test/groovy/bugs/Groovy4241Bug.groovy b/src/test/groovy/bugs/Groovy4241Bug.groovy
index 70ea488..244e2c4 100644
--- a/src/test/groovy/bugs/Groovy4241Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4241Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy4241Bug extends GroovyTestCase {
     void testAsTypeWithinvokeMethodOverridden() {
         Foo4241.metaClass.invokeMethod = { String name, args ->
diff --git a/src/test/groovy/bugs/Groovy4243Bug.groovy b/src/test/groovy/bugs/Groovy4243Bug.groovy
index bd40a8f..2714763 100644
--- a/src/test/groovy/bugs/Groovy4243Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4243Bug.groovy
@@ -18,6 +18,7 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.control.*
 
 class Groovy4243Bug extends GroovyTestCase {
diff --git a/src/test/groovy/bugs/Groovy4246Bug.groovy b/src/test/groovy/bugs/Groovy4246Bug.groovy
index 1803329..edf71f0 100644
--- a/src/test/groovy/bugs/Groovy4246Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4246Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy4246Bug extends GroovyTestCase {
     void testPostFixExpEvaluations() {
         assertScript """
diff --git a/src/test/groovy/bugs/Groovy4247Bug.groovy b/src/test/groovy/bugs/Groovy4247Bug.groovy
index e1fb616..5cd2529 100644
--- a/src/test/groovy/bugs/Groovy4247Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4247Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy4247Bug extends GroovyTestCase {
     void testNewFileRenameToMethod() {
         def file = new File('blah_blah')
diff --git a/src/test/groovy/bugs/Groovy4252Bug.groovy b/src/test/groovy/bugs/Groovy4252Bug.groovy
index bc5e78b..10830bd 100644
--- a/src/test/groovy/bugs/Groovy4252Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4252Bug.groovy
@@ -18,6 +18,7 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyShellTestCase
 import org.codehaus.groovy.control.MultipleCompilationErrorsException
 
 class Groovy4252Bug extends GroovyShellTestCase {
diff --git a/src/test/groovy/bugs/Groovy4257Bug.groovy b/src/test/groovy/bugs/Groovy4257Bug.groovy
index 5e31b67..45cb7a9 100644
--- a/src/test/groovy/bugs/Groovy4257Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4257Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy4257Bug extends GroovyTestCase {
     void testSetUnique() {
         Set orig = [[3035, 26972], [2795, 34412]]
diff --git a/src/test/groovy/bugs/Groovy4264Bug.groovy b/src/test/groovy/bugs/Groovy4264Bug.groovy
index 5be9e54..ae5d955 100644
--- a/src/test/groovy/bugs/Groovy4264Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4264Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy4264Bug extends GroovyTestCase {
     void testSubClassHavingMainEntryPoint() {
         try {
diff --git a/src/test/groovy/bugs/Groovy4272Bug.groovy b/src/test/groovy/bugs/Groovy4272Bug.groovy
index 7973f16..03d4605 100644
--- a/src/test/groovy/bugs/Groovy4272Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4272Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyShellTestCase
+
 class Groovy4272Bug extends GroovyShellTestCase {
     void testAstBuilderOptimizerVisitorConflictInCompilation() {
         evaluate """
diff --git a/src/test/groovy/bugs/Groovy4273Bug.groovy b/src/test/groovy/bugs/Groovy4273Bug.groovy
index 823c742..af35171 100644
--- a/src/test/groovy/bugs/Groovy4273Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4273Bug.groovy
@@ -18,6 +18,7 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyShellTestCase
 import org.codehaus.groovy.control.MultipleCompilationErrorsException
 
 class Groovy4273Bug extends GroovyShellTestCase {
diff --git a/src/test/groovy/bugs/Groovy4287Bug.groovy b/src/test/groovy/bugs/Groovy4287Bug.groovy
index 9f3e79c..662350d 100644
--- a/src/test/groovy/bugs/Groovy4287Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4287Bug.groovy
@@ -18,6 +18,7 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.tools.GroovyStarter
 
 class Groovy4287Bug extends GroovyTestCase {
diff --git a/src/test/groovy/bugs/Groovy4293Bug.groovy b/src/test/groovy/bugs/Groovy4293Bug.groovy
index 401d5da..dfd5dfb 100644
--- a/src/test/groovy/bugs/Groovy4293Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4293Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy4293Bug extends GroovyTestCase {
     void testNoBUGMessageForNullScriptPassedToCompiler() {
         try {
diff --git a/src/test/groovy/bugs/Groovy4386_Bug.groovy b/src/test/groovy/bugs/Groovy4386_Bug.groovy
index 999e361..ffe084d 100644
--- a/src/test/groovy/bugs/Groovy4386_Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4386_Bug.groovy
@@ -18,6 +18,7 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.control.CompilerConfiguration
 import org.codehaus.groovy.runtime.ResourceGroovyMethods
 
diff --git a/src/test/groovy/bugs/Groovy4393Bug.groovy b/src/test/groovy/bugs/Groovy4393Bug.groovy
index c080790..e9a1051 100644
--- a/src/test/groovy/bugs/Groovy4393Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4393Bug.groovy
@@ -18,6 +18,7 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
 import org.junit.Ignore
 
 @Ignore('requires a specific configuration, see: https://issues.apache.org/jira/browse/GROOVY-4393 for details')
diff --git a/src/test/groovy/bugs/Groovy4410Bug.groovy b/src/test/groovy/bugs/Groovy4410Bug.groovy
index 8acc8c5..f7cf82b 100644
--- a/src/test/groovy/bugs/Groovy4410Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4410Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy4410Bug extends GroovyTestCase {
     void testBridgeMethodWithArrayTypeParameterV1() {
         StringProducer1 sp = new StringProducer1()
diff --git a/src/test/groovy/bugs/Groovy4414Bug.groovy b/src/test/groovy/bugs/Groovy4414Bug.groovy
index 6de72d4..dfa9148 100644
--- a/src/test/groovy/bugs/Groovy4414Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4414Bug.groovy
@@ -18,6 +18,7 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.runtime.InvokerHelper
 
 class Groovy4414Bug extends GroovyTestCase {
diff --git a/src/test/groovy/bugs/Groovy4415Bug.groovy b/src/test/groovy/bugs/Groovy4415Bug.groovy
index 6b9a440..59a6f00 100644
--- a/src/test/groovy/bugs/Groovy4415Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4415Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy4415Bug extends GroovyTestCase {
     void testCompilerShouldFindMethod() {
         // interface defined in Groovy
diff --git a/src/test/groovy/bugs/Groovy4416Bug.groovy b/src/test/groovy/bugs/Groovy4416Bug.groovy
index 37de17e..af4e5f6 100644
--- a/src/test/groovy/bugs/Groovy4416Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4416Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy4416Bug extends GroovyTestCase {
     void testImplicitThisPassingInNonStaticInnerClassesBug() {
         assertScript """
diff --git a/src/test/groovy/bugs/Groovy4435Bug.groovy b/src/test/groovy/bugs/Groovy4435Bug.groovy
index 2b47990..ee85921 100644
--- a/src/test/groovy/bugs/Groovy4435Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4435Bug.groovy
@@ -18,6 +18,7 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.control.MultipleCompilationErrorsException
 
 class Groovy4435Bug extends GroovyTestCase {
diff --git a/src/test/groovy/bugs/Groovy4449Bug.groovy b/src/test/groovy/bugs/Groovy4449Bug.groovy
index 66e03f2..6efa4c3 100644
--- a/src/test/groovy/bugs/Groovy4449Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4449Bug.groovy
@@ -18,6 +18,7 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.control.MultipleCompilationErrorsException
 
 class Groovy4449Bug extends GroovyTestCase {
diff --git a/src/test/groovy/bugs/Groovy4457GenericTypeDeclarationLeakTest.groovy b/src/test/groovy/bugs/Groovy4457GenericTypeDeclarationLeakTest.groovy
index d684408..35ebf73 100644
--- a/src/test/groovy/bugs/Groovy4457GenericTypeDeclarationLeakTest.groovy
+++ b/src/test/groovy/bugs/Groovy4457GenericTypeDeclarationLeakTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy4457GenericTypeDeclarationLeakTest extends GroovyTestCase {
 
     void testLeak() {
diff --git a/src/test/groovy/bugs/Groovy4471Bug.groovy b/src/test/groovy/bugs/Groovy4471Bug.groovy
index a3a8fba..3efdb28 100644
--- a/src/test/groovy/bugs/Groovy4471Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4471Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 
 class Groovy4471Bug extends GroovyTestCase {
     void testShouldNotThrowNPE() {
diff --git a/src/test/groovy/bugs/Groovy4480Bug.groovy b/src/test/groovy/bugs/Groovy4480Bug.groovy
index 1461f75..33270dc 100644
--- a/src/test/groovy/bugs/Groovy4480Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4480Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 /**
  * Checks that if else can be used on a single line.
  * A regression got introduced wiht extended command expression that dissallowed if else on the same line
diff --git a/src/test/groovy/bugs/Groovy4497Bug.groovy b/src/test/groovy/bugs/Groovy4497Bug.groovy
index 7db697d..e729fc5 100644
--- a/src/test/groovy/bugs/Groovy4497Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4497Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy4497Bug extends GroovyTestCase {
     void testAccessSuperPrivateField() {
         assertScript """
diff --git a/src/test/groovy/bugs/Groovy4516Bug.groovy b/src/test/groovy/bugs/Groovy4516Bug.groovy
index 482dbb3..498526b 100644
--- a/src/test/groovy/bugs/Groovy4516Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4516Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy4516Bug extends GroovyTestCase {
     void testDelegateMethodsWithDefaultValues() {
         assertScript """
diff --git a/src/test/groovy/bugs/Groovy4584Bug.groovy b/src/test/groovy/bugs/Groovy4584Bug.groovy
index b384aa2..1868f5e 100644
--- a/src/test/groovy/bugs/Groovy4584Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4584Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy4584Bug extends GroovyTestCase {
     void testInnerClass() {
         assertScript '''
diff --git a/src/test/groovy/bugs/Groovy4720Bug.groovy b/src/test/groovy/bugs/Groovy4720Bug.groovy
index cb89523..07d99e2 100644
--- a/src/test/groovy/bugs/Groovy4720Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4720Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 /**
  * Groovy-4720: Method overriding with ExpandoMetaClass is partially broken
  */
diff --git a/src/test/groovy/bugs/Groovy4857Bug.groovy b/src/test/groovy/bugs/Groovy4857Bug.groovy
index 090cdcb..f6d6755 100644
--- a/src/test/groovy/bugs/Groovy4857Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4857Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy4857Bug extends GroovyTestCase {
     void testMissingMethodNotUnsupportedOperation() {
         try {
diff --git a/src/test/groovy/bugs/Groovy4861Bug.groovy b/src/test/groovy/bugs/Groovy4861Bug.groovy
index 0d76b44..2aa33a7 100644
--- a/src/test/groovy/bugs/Groovy4861Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4861Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy4861Bug extends GroovyTestCase {
     void testCallSitesUsageInNestedInterface() {
         assert Foo4861.A.j == 3
diff --git a/src/test/groovy/bugs/Groovy4922Bug.groovy b/src/test/groovy/bugs/Groovy4922Bug.groovy
index 1767f33..3452a3c 100644
--- a/src/test/groovy/bugs/Groovy4922Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4922Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy4922Bug extends GroovyTestCase {
     void testShouldNotThrowStackOverflow() {
         assertScript """
diff --git a/src/test/groovy/bugs/Groovy4958Bug.groovy b/src/test/groovy/bugs/Groovy4958Bug.groovy
index 0b781d9..cea1807 100644
--- a/src/test/groovy/bugs/Groovy4958Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4958Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 
 class Groovy4958Bug extends GroovyTestCase {
     void testConfigSlurperParsingConfigFilesWithDollarSymbolInPropValues() {
diff --git a/src/test/groovy/bugs/Groovy4966Bug.groovy b/src/test/groovy/bugs/Groovy4966Bug.groovy
index d098708..ca1e26f 100644
--- a/src/test/groovy/bugs/Groovy4966Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4966Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 
 class Groovy4966Bug extends GroovyTestCase {
     void testMethodsThatUseMultiDimensionalArrays() {
diff --git a/src/test/groovy/bugs/Groovy4967Bug.groovy b/src/test/groovy/bugs/Groovy4967Bug.groovy
index 418d52f..8644dc9 100644
--- a/src/test/groovy/bugs/Groovy4967Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4967Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 
 class Groovy4967Bug extends GroovyTestCase {
     void testListToLinkedHashSetConversion() {
diff --git a/src/test/groovy/bugs/Groovy4973Bug.groovy b/src/test/groovy/bugs/Groovy4973Bug.groovy
index 2a37356..31a9add 100644
--- a/src/test/groovy/bugs/Groovy4973Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4973Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy4973Bug extends GroovyTestCase {
     void testRangeWithDifferentFromToNumericTypes() {
         assert (1L..10).every { it.class == Long }
diff --git a/src/test/groovy/bugs/Groovy4980Bug.groovy b/src/test/groovy/bugs/Groovy4980Bug.groovy
index 0c622a3..c6de3f2 100644
--- a/src/test/groovy/bugs/Groovy4980Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4980Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy4980Bug extends GroovyTestCase {
     void testNamedArgumentWithInnerClassConstructor() {
         assertScript """
diff --git a/src/test/groovy/bugs/Groovy4986Bug.groovy b/src/test/groovy/bugs/Groovy4986Bug.groovy
index 3462769..c19d162 100644
--- a/src/test/groovy/bugs/Groovy4986Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4986Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 import java.sql.Timestamp
 
 class Groovy4986Bug extends GroovyTestCase {
diff --git a/src/test/groovy/bugs/Groovy4989Bug.groovy b/src/test/groovy/bugs/Groovy4989Bug.groovy
index 11b2a7a..9043001 100644
--- a/src/test/groovy/bugs/Groovy4989Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4989Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy4989Bug extends GroovyTestCase {
     void testCovariantReturnForGetterImplmentedAsProperty() {
         assertScript """
diff --git a/src/test/groovy/bugs/Groovy4999Bug.groovy b/src/test/groovy/bugs/Groovy4999Bug.groovy
index a23d40f..36c4cdc 100644
--- a/src/test/groovy/bugs/Groovy4999Bug.groovy
+++ b/src/test/groovy/bugs/Groovy4999Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 
 class Groovy4999Bug extends GroovyTestCase {
     void testStaticOverloadedMixinMethods() {
diff --git a/src/test/groovy/bugs/Groovy5025Bug.groovy b/src/test/groovy/bugs/Groovy5025Bug.groovy
index 923a1eb..5cc6cd3 100644
--- a/src/test/groovy/bugs/Groovy5025Bug.groovy
+++ b/src/test/groovy/bugs/Groovy5025Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy5025Bug extends GroovyTestCase {
     void testDisableAstBuilder() {
         def config = new org.codehaus.groovy.control.CompilerConfiguration()
diff --git a/src/test/groovy/bugs/Groovy5030Bug.groovy b/src/test/groovy/bugs/Groovy5030Bug.groovy
index 8c8c058..8860db1 100644
--- a/src/test/groovy/bugs/Groovy5030Bug.groovy
+++ b/src/test/groovy/bugs/Groovy5030Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy5030Bug extends GroovyTestCase {
     void testPrimitiveOptimizationGuardsMixupInInheritanceCase() {
         assertScript """
diff --git a/src/test/groovy/bugs/Groovy5033Bug.groovy b/src/test/groovy/bugs/Groovy5033Bug.groovy
index ca82c66..916ee08 100644
--- a/src/test/groovy/bugs/Groovy5033Bug.groovy
+++ b/src/test/groovy/bugs/Groovy5033Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy5033Bug extends GroovyTestCase {
     void testAnnotationsOnAdditionalMethodsCreatedForOptionalParams() {
         assertScript """
diff --git a/src/test/groovy/bugs/Groovy5056Bug.groovy b/src/test/groovy/bugs/Groovy5056Bug.groovy
index f30649a..74ced7e 100644
--- a/src/test/groovy/bugs/Groovy5056Bug.groovy
+++ b/src/test/groovy/bugs/Groovy5056Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy5056Bug extends GroovyTestCase {
     void testASortedSetMinusACollection() {
         def comparator = [compare: {a,b->
diff --git a/src/test/groovy/bugs/Groovy5061.groovy b/src/test/groovy/bugs/Groovy5061.groovy
index dfca210..0bc9a0b 100644
--- a/src/test/groovy/bugs/Groovy5061.groovy
+++ b/src/test/groovy/bugs/Groovy5061.groovy
@@ -18,6 +18,7 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.control.CompilerConfiguration
 import org.codehaus.groovy.tools.javac.JavaAwareCompilationUnit
 
diff --git a/src/test/groovy/bugs/Groovy5101Test.groovy b/src/test/groovy/bugs/Groovy5101Test.groovy
index 80ebb19..fb0c051 100644
--- a/src/test/groovy/bugs/Groovy5101Test.groovy
+++ b/src/test/groovy/bugs/Groovy5101Test.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy5101Test extends GroovyTestCase {
 
     static class ClassA {
diff --git a/src/test/groovy/bugs/Groovy5109Bug.groovy b/src/test/groovy/bugs/Groovy5109Bug.groovy
index 72a133f..b3ef843 100644
--- a/src/test/groovy/bugs/Groovy5109Bug.groovy
+++ b/src/test/groovy/bugs/Groovy5109Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy5109Bug extends GroovyTestCase {
     void testShouldNotThrowArrayOutOfBounds() {
         assertScript '''
diff --git a/src/test/groovy/bugs/Groovy5122Bug.groovy b/src/test/groovy/bugs/Groovy5122Bug.groovy
index 0b09240..e987e64 100644
--- a/src/test/groovy/bugs/Groovy5122Bug.groovy
+++ b/src/test/groovy/bugs/Groovy5122Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy5122Bug extends GroovyTestCase {
     void testInterfaceFieldShouldBeInitialized() {
         assertScript '''
diff --git a/src/test/groovy/bugs/Groovy5137Bug.groovy b/src/test/groovy/bugs/Groovy5137Bug.groovy
index 4d28eca..465745a 100644
--- a/src/test/groovy/bugs/Groovy5137Bug.groovy
+++ b/src/test/groovy/bugs/Groovy5137Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy5137Bug extends GroovyTestCase {
     void testShouldNotThrowGroovyBugError() {
         assertScript '''
diff --git a/src/test/groovy/bugs/Groovy513_Bug.groovy b/src/test/groovy/bugs/Groovy513_Bug.groovy
index 9d91be2..c73613e 100644
--- a/src/test/groovy/bugs/Groovy513_Bug.groovy
+++ b/src/test/groovy/bugs/Groovy513_Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 /**
  *  Verifies that comparisons to Integer.MIN_VALUE work
  */
diff --git a/src/test/groovy/bugs/Groovy5150Bug.groovy b/src/test/groovy/bugs/Groovy5150Bug.groovy
index a0cc8e5..5b1d33a 100644
--- a/src/test/groovy/bugs/Groovy5150Bug.groovy
+++ b/src/test/groovy/bugs/Groovy5150Bug.groovy
@@ -18,6 +18,7 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
 import junit.framework.TestCase
 import org.codehaus.groovy.control.CompilationFailedException
 import org.codehaus.groovy.control.CompilerConfiguration
diff --git a/src/test/groovy/bugs/Groovy5152Bug.groovy b/src/test/groovy/bugs/Groovy5152Bug.groovy
index 0961e5e..cfa5163 100644
--- a/src/test/groovy/bugs/Groovy5152Bug.groovy
+++ b/src/test/groovy/bugs/Groovy5152Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy5152Bug extends GroovyTestCase {
     void testShouldNotThrowClassFormatError() {
         assertScript '''
diff --git a/src/test/groovy/bugs/Groovy5185Bug.groovy b/src/test/groovy/bugs/Groovy5185Bug.groovy
index 4fc1b80..d2f28fe 100644
--- a/src/test/groovy/bugs/Groovy5185Bug.groovy
+++ b/src/test/groovy/bugs/Groovy5185Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy5185Bug extends GroovyTestCase {
     void testShouldNotThrowMethodMissingException() {
         assertScript '''
diff --git a/src/test/groovy/bugs/Groovy5193Bug.groovy b/src/test/groovy/bugs/Groovy5193Bug.groovy
index f83643c..be76f0c 100644
--- a/src/test/groovy/bugs/Groovy5193Bug.groovy
+++ b/src/test/groovy/bugs/Groovy5193Bug.groovy
@@ -18,6 +18,7 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.control.MultipleCompilationErrorsException
 
 class Groovy5193Bug extends GroovyTestCase {
diff --git a/src/test/groovy/bugs/Groovy5210Bug.groovy b/src/test/groovy/bugs/Groovy5210Bug.groovy
index e2e1769..63ac690 100644
--- a/src/test/groovy/bugs/Groovy5210Bug.groovy
+++ b/src/test/groovy/bugs/Groovy5210Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy5210Bug extends GroovyTestCase {
     void testAssignPrimitiveArrayToSet() {
         assertScript '''
diff --git a/src/test/groovy/bugs/Groovy5212Bug.groovy b/src/test/groovy/bugs/Groovy5212Bug.groovy
index 3bdaf92..0b75332 100644
--- a/src/test/groovy/bugs/Groovy5212Bug.groovy
+++ b/src/test/groovy/bugs/Groovy5212Bug.groovy
@@ -18,6 +18,7 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.ast.ClassNode
 import org.objectweb.asm.Opcodes
 import org.codehaus.groovy.tools.javac.JavaStubGenerator
diff --git a/src/test/groovy/bugs/Groovy5260Bug.groovy b/src/test/groovy/bugs/Groovy5260Bug.groovy
index 367111d..6c95ebc 100644
--- a/src/test/groovy/bugs/Groovy5260Bug.groovy
+++ b/src/test/groovy/bugs/Groovy5260Bug.groovy
@@ -18,6 +18,7 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.ast.ClassNode
 import org.codehaus.groovy.ast.CompileUnit
 import org.codehaus.groovy.ast.ModuleNode
diff --git a/src/test/groovy/bugs/Groovy5272Bug.groovy b/src/test/groovy/bugs/Groovy5272Bug.groovy
index 3044d1e..c953a23 100644
--- a/src/test/groovy/bugs/Groovy5272Bug.groovy
+++ b/src/test/groovy/bugs/Groovy5272Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy5272Bug extends GroovyTestCase {
     /**
      * In Groovy-5272, there are chances that the following test fails.
diff --git a/src/test/groovy/bugs/Groovy5285Bug.groovy b/src/test/groovy/bugs/Groovy5285Bug.groovy
index 96e01c2..a704627 100644
--- a/src/test/groovy/bugs/Groovy5285Bug.groovy
+++ b/src/test/groovy/bugs/Groovy5285Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy5285Bug extends GroovyTestCase {
     void testShouldNotThrowStackOverflow() {
         assertScript '''
diff --git a/src/test/groovy/bugs/Groovy5396Bug.groovy b/src/test/groovy/bugs/Groovy5396Bug.groovy
index 8157ad4..a147c18 100644
--- a/src/test/groovy/bugs/Groovy5396Bug.groovy
+++ b/src/test/groovy/bugs/Groovy5396Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy5396Bug extends GroovyTestCase {
     void testClassAccessToPackageLocalPropertyInSuper() {
         assertScript """
diff --git a/src/test/groovy/bugs/Groovy5418Bug.groovy b/src/test/groovy/bugs/Groovy5418Bug.groovy
index 2238019..8a5502e 100644
--- a/src/test/groovy/bugs/Groovy5418Bug.groovy
+++ b/src/test/groovy/bugs/Groovy5418Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy5418Bug extends GroovyTestCase {
     void testShouldRecognizeCovariantReturnType() {
         assertScript '''interface Base {
diff --git a/src/test/groovy/bugs/Groovy5425_Bug.groovy b/src/test/groovy/bugs/Groovy5425_Bug.groovy
index 1b7d500..155f62a 100644
--- a/src/test/groovy/bugs/Groovy5425_Bug.groovy
+++ b/src/test/groovy/bugs/Groovy5425_Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 /**
  * Check Range.size finishes in a timely fashion. If we get a regression on this bug,
  * the build will take 10 - 20 minutes longer than normal
diff --git a/src/test/groovy/bugs/Groovy5572Bug.groovy b/src/test/groovy/bugs/Groovy5572Bug.groovy
index 2fab37c..eebf5f8 100644
--- a/src/test/groovy/bugs/Groovy5572Bug.groovy
+++ b/src/test/groovy/bugs/Groovy5572Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy5572Bug extends GroovyTestCase {
     void testTernaryOperator() {
         assertScript '''
diff --git a/src/test/groovy/bugs/Groovy558_616_Bug.groovy b/src/test/groovy/bugs/Groovy558_616_Bug.groovy
index 7b3ac27..841c2a0 100644
--- a/src/test/groovy/bugs/Groovy558_616_Bug.groovy
+++ b/src/test/groovy/bugs/Groovy558_616_Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 /**
   * Fixes GROOVY-558 and GROOVY-616.
   * A fully qualified class name ending with .class or not were not recognized properly.
diff --git a/src/test/groovy/bugs/Groovy5687Bug.groovy b/src/test/groovy/bugs/Groovy5687Bug.groovy
index 0a052ef..fb8b94b 100644
--- a/src/test/groovy/bugs/Groovy5687Bug.groovy
+++ b/src/test/groovy/bugs/Groovy5687Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 import java.text.SimpleDateFormat
 
 class Groovy5687Bug extends GroovyTestCase {
diff --git a/src/test/groovy/bugs/Groovy5783Bug.groovy b/src/test/groovy/bugs/Groovy5783Bug.groovy
index 89a626e..8f75e35 100644
--- a/src/test/groovy/bugs/Groovy5783Bug.groovy
+++ b/src/test/groovy/bugs/Groovy5783Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy5783Bug extends GroovyTestCase {
 
     void testDefaultTypeTransformationCreatesLinkedHashSet() {
diff --git a/src/test/groovy/bugs/Groovy5802Bug.groovy b/src/test/groovy/bugs/Groovy5802Bug.groovy
index 86c5ae4..4f33888 100644
--- a/src/test/groovy/bugs/Groovy5802Bug.groovy
+++ b/src/test/groovy/bugs/Groovy5802Bug.groovy
@@ -18,6 +18,7 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.runtime.InvokerHelper
 
 class Groovy5802Bug extends GroovyTestCase {
diff --git a/src/test/groovy/bugs/Groovy5806Bug.groovy b/src/test/groovy/bugs/Groovy5806Bug.groovy
index f7ef71e..bdfe8bd 100644
--- a/src/test/groovy/bugs/Groovy5806Bug.groovy
+++ b/src/test/groovy/bugs/Groovy5806Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 import java.util.concurrent.Callable
 
 class Groovy5806Bug extends GroovyTestCase {
diff --git a/src/test/groovy/bugs/Groovy5852Bug.groovy b/src/test/groovy/bugs/Groovy5852Bug.groovy
index 5b9b83f..1264880 100644
--- a/src/test/groovy/bugs/Groovy5852Bug.groovy
+++ b/src/test/groovy/bugs/Groovy5852Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy5852Bug extends GroovyTestCase {
     void testMissingProperty() {
         def errMsg = shouldFail '''
diff --git a/src/test/groovy/bugs/Groovy5915Bug.groovy b/src/test/groovy/bugs/Groovy5915Bug.groovy
index 7a36b18..2d4268a 100644
--- a/src/test/groovy/bugs/Groovy5915Bug.groovy
+++ b/src/test/groovy/bugs/Groovy5915Bug.groovy
@@ -18,6 +18,7 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.control.*
 import org.codehaus.groovy.control.messages.*
 
diff --git a/src/test/groovy/bugs/Groovy6042Bug.groovy b/src/test/groovy/bugs/Groovy6042Bug.groovy
index cad24b6..459b4f8 100644
--- a/src/test/groovy/bugs/Groovy6042Bug.groovy
+++ b/src/test/groovy/bugs/Groovy6042Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy6042Bug extends GroovyTestCase {
     void testShouldAllowObjectAsConfigKey() {
         Map result = new ConfigSlurper().parse('''
diff --git a/src/test/groovy/bugs/Groovy6045Bug.groovy b/src/test/groovy/bugs/Groovy6045Bug.groovy
index bdf811b..381ed88 100644
--- a/src/test/groovy/bugs/Groovy6045Bug.groovy
+++ b/src/test/groovy/bugs/Groovy6045Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy6045Bug extends GroovyTestCase {
     void testCallingSafeSuperShouldNotThrowVerifyError() {
         assertScript '''
diff --git a/src/test/groovy/bugs/Groovy6072Bug.groovy b/src/test/groovy/bugs/Groovy6072Bug.groovy
index c31c067..c238797 100644
--- a/src/test/groovy/bugs/Groovy6072Bug.groovy
+++ b/src/test/groovy/bugs/Groovy6072Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy6072Bug extends GroovyTestCase {
     void testShouldNotChangeBinExpToClassExp() {
         assertScript '''import groovy.transform.ASTTest
diff --git a/src/test/groovy/bugs/Groovy6086Bug.groovy b/src/test/groovy/bugs/Groovy6086Bug.groovy
index a547f04..49eb6f4 100644
--- a/src/test/groovy/bugs/Groovy6086Bug.groovy
+++ b/src/test/groovy/bugs/Groovy6086Bug.groovy
@@ -18,6 +18,7 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.control.CompilePhase
 import org.codehaus.groovy.control.CompilerConfiguration
 import org.codehaus.groovy.tools.javac.JavaAwareCompilationUnit
diff --git a/src/test/groovy/bugs/Groovy6271Bug.groovy b/src/test/groovy/bugs/Groovy6271Bug.groovy
index 8d6131d..f9c3b37 100644
--- a/src/test/groovy/bugs/Groovy6271Bug.groovy
+++ b/src/test/groovy/bugs/Groovy6271Bug.groovy
@@ -19,7 +19,7 @@
 package groovy.bugs
 
 import gls.CompilableTestSupport
-import groovy.transform.NotYetImplemented
+import groovy.test.NotYetImplemented
 
 class Groovy6271Bug extends CompilableTestSupport {
 
diff --git a/src/test/groovy/bugs/Groovy6374Bug.groovy b/src/test/groovy/bugs/Groovy6374Bug.groovy
index 89ba1f7..1eb3cb1 100644
--- a/src/test/groovy/bugs/Groovy6374Bug.groovy
+++ b/src/test/groovy/bugs/Groovy6374Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy6374Bug extends GroovyTestCase {
     void testShouldNotAllowCoercionOfFinalClass() {
         assertScript '''import org.codehaus.groovy.runtime.typehandling.GroovyCastException
diff --git a/src/test/groovy/bugs/Groovy6396Bug.groovy b/src/test/groovy/bugs/Groovy6396Bug.groovy
index dbf944b..de6bd71 100644
--- a/src/test/groovy/bugs/Groovy6396Bug.groovy
+++ b/src/test/groovy/bugs/Groovy6396Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy6396Bug extends GroovyTestCase {
     void testClassUsageInInterfaceDef() {
         assertScript """
diff --git a/src/test/groovy/bugs/Groovy6508Bug.groovy b/src/test/groovy/bugs/Groovy6508Bug.groovy
index 970cad6..1ffab00 100644
--- a/src/test/groovy/bugs/Groovy6508Bug.groovy
+++ b/src/test/groovy/bugs/Groovy6508Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 import java.util.concurrent.Callable
 
 /**
diff --git a/src/test/groovy/bugs/Groovy6522Bug.groovy b/src/test/groovy/bugs/Groovy6522Bug.groovy
index 45cf98e..6570d18 100644
--- a/src/test/groovy/bugs/Groovy6522Bug.groovy
+++ b/src/test/groovy/bugs/Groovy6522Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy6522Bug extends GroovyTestCase {
     // this is a non-regression test that makes sure
     // that the fix for 6522 doesn't introduce breaking changes
diff --git a/src/test/groovy/bugs/Groovy662Bug.groovy b/src/test/groovy/bugs/Groovy662Bug.groovy
index 99b871a..ccf47cb 100644
--- a/src/test/groovy/bugs/Groovy662Bug.groovy
+++ b/src/test/groovy/bugs/Groovy662Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 //  The order of the classes is crucial, the first must be the GroovyTestCase.  Its name doesn't
 //  matter it just has to be first.
 
diff --git a/src/test/groovy/bugs/Groovy666_Bug.groovy b/src/test/groovy/bugs/Groovy666_Bug.groovy
index 6c4c5c6..33c0857 100644
--- a/src/test/groovy/bugs/Groovy666_Bug.groovy
+++ b/src/test/groovy/bugs/Groovy666_Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyShellTestCase
+
 class Groovy666_Bug extends GroovyShellTestCase {
   void testRunScript() {
     evaluate("x = 1")
diff --git a/src/test/groovy/bugs/Groovy6722Bug.groovy b/src/test/groovy/bugs/Groovy6722Bug.groovy
index 5fff2ca..73b171f 100644
--- a/src/test/groovy/bugs/Groovy6722Bug.groovy
+++ b/src/test/groovy/bugs/Groovy6722Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy6722Bug extends GroovyTestCase {
     void testThatCompilerRecognizesCovariantArray() {
         assertScript '''
diff --git a/src/test/groovy/bugs/Groovy674_Bug.groovy b/src/test/groovy/bugs/Groovy674_Bug.groovy
index bd3a043..d7b481b 100644
--- a/src/test/groovy/bugs/Groovy674_Bug.groovy
+++ b/src/test/groovy/bugs/Groovy674_Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 /**
  *  Test to ensure all the right exceptions are thrown for all the right/wrong combinations of
  *  parentheses and no parameters for print and println.
diff --git a/src/test/groovy/bugs/Groovy6755Bug.groovy b/src/test/groovy/bugs/Groovy6755Bug.groovy
index c27ad2c..99c1a07 100644
--- a/src/test/groovy/bugs/Groovy6755Bug.groovy
+++ b/src/test/groovy/bugs/Groovy6755Bug.groovy
@@ -18,6 +18,7 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.control.CompilerConfiguration
 import org.codehaus.groovy.tools.FileSystemCompiler
 
diff --git a/src/test/groovy/bugs/Groovy675_Bug.groovy b/src/test/groovy/bugs/Groovy675_Bug.groovy
index 9f72f85..ace0329 100644
--- a/src/test/groovy/bugs/Groovy675_Bug.groovy
+++ b/src/test/groovy/bugs/Groovy675_Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy675_Bug extends GroovyTestCase {
     void testStringAndGString() {
     assert "\\"!="\\\\" 
diff --git a/src/test/groovy/bugs/Groovy6764Bug.groovy b/src/test/groovy/bugs/Groovy6764Bug.groovy
index c33c791..e4f9a42 100644
--- a/src/test/groovy/bugs/Groovy6764Bug.groovy
+++ b/src/test/groovy/bugs/Groovy6764Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy6764Bug extends GroovyTestCase {
     void testStaticImportViaInheritedInterface() {
         assertScript '''
diff --git a/src/test/groovy/bugs/Groovy6786Bug.groovy b/src/test/groovy/bugs/Groovy6786Bug.groovy
index d8611e8..44aeaa4 100644
--- a/src/test/groovy/bugs/Groovy6786Bug.groovy
+++ b/src/test/groovy/bugs/Groovy6786Bug.groovy
@@ -18,7 +18,7 @@
  */
 package groovy.bugs
 
-import groovy.transform.NotYetImplemented
+import groovy.test.NotYetImplemented
 import groovy.transform.stc.StaticTypeCheckingTestCase
 
 class Groovy6786Bug extends StaticTypeCheckingTestCase {
diff --git a/src/test/groovy/bugs/Groovy6804Bug.groovy b/src/test/groovy/bugs/Groovy6804Bug.groovy
index 18243c4..b9cb04a 100644
--- a/src/test/groovy/bugs/Groovy6804Bug.groovy
+++ b/src/test/groovy/bugs/Groovy6804Bug.groovy
@@ -18,7 +18,7 @@
  */
 package groovy.bugs
 
-import groovy.transform.NotYetImplemented
+import groovy.test.NotYetImplemented
 import groovy.transform.stc.StaticTypeCheckingTestCase
 
 class Groovy6804Bug extends StaticTypeCheckingTestCase {
diff --git a/src/test/groovy/bugs/Groovy6808Bug.groovy b/src/test/groovy/bugs/Groovy6808Bug.groovy
index 0d87cca..15efcc7 100644
--- a/src/test/groovy/bugs/Groovy6808Bug.groovy
+++ b/src/test/groovy/bugs/Groovy6808Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy6808Bug extends GroovyTestCase {
     void testThatInnerClassTableIsNotCorrupt() {
         assertScript """
diff --git a/src/test/groovy/bugs/Groovy6811Bug.groovy b/src/test/groovy/bugs/Groovy6811Bug.groovy
index 1cfbc78..b474c52 100644
--- a/src/test/groovy/bugs/Groovy6811Bug.groovy
+++ b/src/test/groovy/bugs/Groovy6811Bug.groovy
@@ -20,6 +20,8 @@
 
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy6811Bug extends GroovyTestCase {
     void testShouldAllowAnonymousInnerClassFromNonStaticInnerClass() {
         assertScript '''class CreatePaymentPanel {
diff --git a/src/test/groovy/bugs/Groovy6821Bug.groovy b/src/test/groovy/bugs/Groovy6821Bug.groovy
index 459fa2f..926c6d6 100644
--- a/src/test/groovy/bugs/Groovy6821Bug.groovy
+++ b/src/test/groovy/bugs/Groovy6821Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 /**
  * Tests that 6821 is fixed using an explicit Outer.this notation if not using @CompileStatic
  */
diff --git a/src/test/groovy/bugs/Groovy6830Bug.groovy b/src/test/groovy/bugs/Groovy6830Bug.groovy
index 6978cae..4aad2f5 100644
--- a/src/test/groovy/bugs/Groovy6830Bug.groovy
+++ b/src/test/groovy/bugs/Groovy6830Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy6830Bug extends GroovyTestCase {
     void testShouldAccessOuterClassMethodFromInnerClassClosure() {
         assertScript '''
diff --git a/src/test/groovy/bugs/Groovy6841Bug.groovy b/src/test/groovy/bugs/Groovy6841Bug.groovy
index 1ed2199..d969ec5 100644
--- a/src/test/groovy/bugs/Groovy6841Bug.groovy
+++ b/src/test/groovy/bugs/Groovy6841Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy6841Bug extends GroovyTestCase {
     void testShouldNotThrowNPEduringCompilation() {
         assertScript '''
diff --git a/src/test/groovy/bugs/Groovy6862Bug.groovy b/src/test/groovy/bugs/Groovy6862Bug.groovy
index cc5c98e..64af86f 100644
--- a/src/test/groovy/bugs/Groovy6862Bug.groovy
+++ b/src/test/groovy/bugs/Groovy6862Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy6862Bug extends GroovyTestCase {
     void testDollarAllowedInTraitMethodNames() {
         assertScript '''
diff --git a/src/test/groovy/bugs/Groovy6932Bug.groovy b/src/test/groovy/bugs/Groovy6932Bug.groovy
index 706c17b..671a0f5 100644
--- a/src/test/groovy/bugs/Groovy6932Bug.groovy
+++ b/src/test/groovy/bugs/Groovy6932Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy6932Bug extends GroovyTestCase {
     void testLoggingWithinClosuresShouldHaveGuards() {
         assertScript '''
diff --git a/src/test/groovy/bugs/Groovy7031Bug.groovy b/src/test/groovy/bugs/Groovy7031Bug.groovy
index 3bb4750..e94f472 100644
--- a/src/test/groovy/bugs/Groovy7031Bug.groovy
+++ b/src/test/groovy/bugs/Groovy7031Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy7031Bug extends GroovyTestCase {
 
     void test() {
diff --git a/src/test/groovy/bugs/Groovy7081Bug.groovy b/src/test/groovy/bugs/Groovy7081Bug.groovy
index 1415318..240620d 100644
--- a/src/test/groovy/bugs/Groovy7081Bug.groovy
+++ b/src/test/groovy/bugs/Groovy7081Bug.groovy
@@ -19,6 +19,8 @@
 
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy7081Bug extends GroovyTestCase {
     void testShouldSeeThatMethodIsNotImplemented() {
         def msg = shouldFail '''
diff --git a/src/test/groovy/bugs/Groovy7204Bug.groovy b/src/test/groovy/bugs/Groovy7204Bug.groovy
index b297112..5c5f20e 100644
--- a/src/test/groovy/bugs/Groovy7204Bug.groovy
+++ b/src/test/groovy/bugs/Groovy7204Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy7204Bug extends GroovyTestCase {
     void testTypeChecked1() {
         assertScript '''
diff --git a/src/test/groovy/bugs/Groovy7248Bug.groovy b/src/test/groovy/bugs/Groovy7248Bug.groovy
index b8057fb..7e44d64 100644
--- a/src/test/groovy/bugs/Groovy7248Bug.groovy
+++ b/src/test/groovy/bugs/Groovy7248Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 /**
  * StatementWriter.writeTryCatchFinally visits the finally block
  * twice, once for the normal path and once again for the "catch all"
diff --git a/src/test/groovy/bugs/Groovy7291Bug.groovy b/src/test/groovy/bugs/Groovy7291Bug.groovy
index f82925c..8f7a5a9 100644
--- a/src/test/groovy/bugs/Groovy7291Bug.groovy
+++ b/src/test/groovy/bugs/Groovy7291Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy7291Bug extends GroovyTestCase {
 
     void testPrimitiveDouble() {
diff --git a/src/test/groovy/bugs/Groovy7520Bug.groovy b/src/test/groovy/bugs/Groovy7520Bug.groovy
index bbfb452..0160fa1 100644
--- a/src/test/groovy/bugs/Groovy7520Bug.groovy
+++ b/src/test/groovy/bugs/Groovy7520Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy7520Bug extends GroovyTestCase {
     void testShouldSeeConflictUsingAbstractMethod() {
         def msg = shouldFail '''
diff --git a/src/test/groovy/bugs/Groovy7584Bug.groovy b/src/test/groovy/bugs/Groovy7584Bug.groovy
index 6f4772f..42b65e2 100644
--- a/src/test/groovy/bugs/Groovy7584Bug.groovy
+++ b/src/test/groovy/bugs/Groovy7584Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy7584Bug extends GroovyTestCase {
     void testTraitFieldModifiersAreRetained() {
         assertScript """
diff --git a/src/test/groovy/bugs/Groovy7691Bug.groovy b/src/test/groovy/bugs/Groovy7691Bug.groovy
index 58588b0..5ffe0ee 100644
--- a/src/test/groovy/bugs/Groovy7691Bug.groovy
+++ b/src/test/groovy/bugs/Groovy7691Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy7691Bug extends GroovyTestCase {
 //    @NotYetImplemented
     void testCovariantGenericField() {
diff --git a/src/test/groovy/bugs/Groovy7709Bug.groovy b/src/test/groovy/bugs/Groovy7709Bug.groovy
index be5e789..d363274 100644
--- a/src/test/groovy/bugs/Groovy7709Bug.groovy
+++ b/src/test/groovy/bugs/Groovy7709Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy7709Bug extends GroovyTestCase {
 
     void testConvertedClosureAsGroovyObject() {
diff --git a/src/test/groovy/bugs/Groovy770_Bug.groovy b/src/test/groovy/bugs/Groovy770_Bug.groovy
index 5995150..f0e25a1 100644
--- a/src/test/groovy/bugs/Groovy770_Bug.groovy
+++ b/src/test/groovy/bugs/Groovy770_Bug.groovy
@@ -21,6 +21,8 @@
 
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy770_Bug extends GroovyTestCase {
      
     void testBug() {
diff --git a/src/test/groovy/bugs/Groovy7721Bug.groovy b/src/test/groovy/bugs/Groovy7721Bug.groovy
index 4e41958..f116d6b 100644
--- a/src/test/groovy/bugs/Groovy7721Bug.groovy
+++ b/src/test/groovy/bugs/Groovy7721Bug.groovy
@@ -20,6 +20,7 @@
 
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.control.CompilerConfiguration
 import org.codehaus.groovy.tools.javac.JavaAwareCompilationUnit
 
diff --git a/src/test/groovy/bugs/Groovy7753Bug.groovy b/src/test/groovy/bugs/Groovy7753Bug.groovy
index 8134eee..b11dcc2 100644
--- a/src/test/groovy/bugs/Groovy7753Bug.groovy
+++ b/src/test/groovy/bugs/Groovy7753Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy7753Bug extends GroovyTestCase {
 
     void testGroovy7753() {
diff --git a/src/test/groovy/bugs/Groovy7797Bug.groovy b/src/test/groovy/bugs/Groovy7797Bug.groovy
index 892b6eb..afdef3a 100644
--- a/src/test/groovy/bugs/Groovy7797Bug.groovy
+++ b/src/test/groovy/bugs/Groovy7797Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy7797Bug extends GroovyTestCase {
     void test() {
         new GroovyShell().evaluate('''
diff --git a/src/test/groovy/bugs/Groovy779_Bug.groovy b/src/test/groovy/bugs/Groovy779_Bug.groovy
index 8ec2adb..0cc8ca0 100644
--- a/src/test/groovy/bugs/Groovy779_Bug.groovy
+++ b/src/test/groovy/bugs/Groovy779_Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy779_Bug extends GroovyTestCase {
 
     def boolean exceptionCalled = false
diff --git a/src/test/groovy/bugs/Groovy7812Bug.groovy b/src/test/groovy/bugs/Groovy7812Bug.groovy
index ac94ee6..fab71db 100644
--- a/src/test/groovy/bugs/Groovy7812Bug.groovy
+++ b/src/test/groovy/bugs/Groovy7812Bug.groovy
@@ -18,6 +18,7 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.tools.GroovyStarter
 
 class Groovy7812Bug extends GroovyTestCase {
diff --git a/src/test/groovy/bugs/Groovy7876Bug.groovy b/src/test/groovy/bugs/Groovy7876Bug.groovy
index 051e56e..71ae904 100644
--- a/src/test/groovy/bugs/Groovy7876Bug.groovy
+++ b/src/test/groovy/bugs/Groovy7876Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy7876Bug extends GroovyTestCase {
     void testClassCastExceptionsFromCompareToShouldNotLeakOutOfEqualityCheck() {
         assertScript '''
diff --git a/src/test/groovy/bugs/Groovy7912Bug.groovy b/src/test/groovy/bugs/Groovy7912Bug.groovy
index 005974c..e7801b1 100644
--- a/src/test/groovy/bugs/Groovy7912Bug.groovy
+++ b/src/test/groovy/bugs/Groovy7912Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 import static java.util.Collections.EMPTY_LIST
 import static java.util.Collections.emptyList
 
diff --git a/src/test/groovy/bugs/Groovy7916Bug.groovy b/src/test/groovy/bugs/Groovy7916Bug.groovy
index 4a7ebcf..b705ec1 100644
--- a/src/test/groovy/bugs/Groovy7916Bug.groovy
+++ b/src/test/groovy/bugs/Groovy7916Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy7916Bug extends GroovyTestCase {
     void testShouldBeAbleToOverrideStaticConstantProperties() {
         assertScript '''
diff --git a/src/test/groovy/bugs/Groovy7917Bug.groovy b/src/test/groovy/bugs/Groovy7917Bug.groovy
index 7016cd3..89616a9 100644
--- a/src/test/groovy/bugs/Groovy7917Bug.groovy
+++ b/src/test/groovy/bugs/Groovy7917Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy7917Bug extends GroovyTestCase {
     void testShouldBeAbleToOverrideStaticConstantProperties() {
         assertScript '''
diff --git a/src/test/groovy/bugs/Groovy7920Bug.groovy b/src/test/groovy/bugs/Groovy7920Bug.groovy
index f59a63f..78acc29 100644
--- a/src/test/groovy/bugs/Groovy7920Bug.groovy
+++ b/src/test/groovy/bugs/Groovy7920Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy7920Bug extends GroovyTestCase {
     void testGetAtViaInterface() {
         assertScript '''
diff --git a/src/test/groovy/bugs/Groovy7921Bug.groovy b/src/test/groovy/bugs/Groovy7921Bug.groovy
index 5f68ba7..d302b6e 100644
--- a/src/test/groovy/bugs/Groovy7921Bug.groovy
+++ b/src/test/groovy/bugs/Groovy7921Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy7921Bug extends GroovyTestCase {
     void testShouldBeAbleToAssignThisInsideCategoryAnnotatedClass() {
         assertScript '''
diff --git a/src/test/groovy/bugs/Groovy7924Bug.groovy b/src/test/groovy/bugs/Groovy7924Bug.groovy
index 4c33c22..44b6fa3 100644
--- a/src/test/groovy/bugs/Groovy7924Bug.groovy
+++ b/src/test/groovy/bugs/Groovy7924Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy7924Bug extends GroovyTestCase {
     void testShouldBeAbleToAssignThisInsideCategoryAnnotatedClass() {
         assertScript '''
diff --git a/src/test/groovy/bugs/Groovy7933Bug.groovy b/src/test/groovy/bugs/Groovy7933Bug.groovy
index bf31c60..765c409 100644
--- a/src/test/groovy/bugs/Groovy7933Bug.groovy
+++ b/src/test/groovy/bugs/Groovy7933Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy7933Bug extends GroovyTestCase {
 
     void testPrimitiveMethodArgsSelection() {
diff --git a/src/test/groovy/bugs/Groovy7937Bug.groovy b/src/test/groovy/bugs/Groovy7937Bug.groovy
index 9b2f2f4..9a8c8d5 100644
--- a/src/test/groovy/bugs/Groovy7937Bug.groovy
+++ b/src/test/groovy/bugs/Groovy7937Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy7937Bug extends GroovyTestCase {
     void testMethodsWithinAnInstanceShouldBeChosenAheadOfDGMMethodsOnAnInterface() {
         assertScript """
diff --git a/src/test/groovy/bugs/Groovy7938Bug.groovy b/src/test/groovy/bugs/Groovy7938Bug.groovy
index be7000a..a068be4 100644
--- a/src/test/groovy/bugs/Groovy7938Bug.groovy
+++ b/src/test/groovy/bugs/Groovy7938Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy7938Bug extends GroovyTestCase {
     void testClassUsageInInterfaceDef() {
         assertScript """
diff --git a/src/test/groovy/bugs/Groovy7951Bug.groovy b/src/test/groovy/bugs/Groovy7951Bug.groovy
index ec523c8..812740d 100644
--- a/src/test/groovy/bugs/Groovy7951Bug.groovy
+++ b/src/test/groovy/bugs/Groovy7951Bug.groovy
@@ -18,6 +18,7 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.ast.ClassCodeExpressionTransformer
 import org.codehaus.groovy.ast.ClassCodeVisitorSupport
 import org.codehaus.groovy.ast.ClassNode
diff --git a/src/test/groovy/bugs/Groovy7958Bug.groovy b/src/test/groovy/bugs/Groovy7958Bug.groovy
index 1198c39..541f4c7 100644
--- a/src/test/groovy/bugs/Groovy7958Bug.groovy
+++ b/src/test/groovy/bugs/Groovy7958Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy7958Bug extends GroovyTestCase {
     void testCommaSepVariableDeclarationAfterIf() {
         assertScript """
diff --git a/src/test/groovy/bugs/Groovy7969Bug.groovy b/src/test/groovy/bugs/Groovy7969Bug.groovy
index edcaed4..fcecfdc 100644
--- a/src/test/groovy/bugs/Groovy7969Bug.groovy
+++ b/src/test/groovy/bugs/Groovy7969Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy7969Bug extends GroovyTestCase {
     void testBindablePropertySettersHaveValidModifiersForMethod() {
         assertScript """
diff --git a/src/test/groovy/bugs/Groovy7970Bug.groovy b/src/test/groovy/bugs/Groovy7970Bug.groovy
index 9bda2a3..5d5395a 100644
--- a/src/test/groovy/bugs/Groovy7970Bug.groovy
+++ b/src/test/groovy/bugs/Groovy7970Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy7970Bug extends GroovyTestCase {
 
     private static final String getScriptAIC(String visibility, boolean cs) {
diff --git a/src/test/groovy/bugs/Groovy7985Bug.groovy b/src/test/groovy/bugs/Groovy7985Bug.groovy
index e0b45b5..c2b781a 100644
--- a/src/test/groovy/bugs/Groovy7985Bug.groovy
+++ b/src/test/groovy/bugs/Groovy7985Bug.groovy
@@ -22,6 +22,8 @@
 
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy7985Bug extends GroovyTestCase {
     void test1() {
         assertScript '''
diff --git a/src/test/groovy/bugs/Groovy7994Bug.groovy b/src/test/groovy/bugs/Groovy7994Bug.groovy
index 4f4c84a..ba6b881 100644
--- a/src/test/groovy/bugs/Groovy7994Bug.groovy
+++ b/src/test/groovy/bugs/Groovy7994Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy7994Bug extends GroovyTestCase {
     void testJavaBeanPropertiesAvailableInInnerClasses() {
         assertScript '''
diff --git a/src/test/groovy/bugs/Groovy7995Bug.groovy b/src/test/groovy/bugs/Groovy7995Bug.groovy
index d3856fb..b1d142a 100644
--- a/src/test/groovy/bugs/Groovy7995Bug.groovy
+++ b/src/test/groovy/bugs/Groovy7995Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy7995Bug extends GroovyTestCase{
 
     void testClosureShortSyntaxCallFromOtherClosure(){
diff --git a/src/test/groovy/bugs/Groovy7996Bug.groovy b/src/test/groovy/bugs/Groovy7996Bug.groovy
index cc6a3d0..12452e3 100644
--- a/src/test/groovy/bugs/Groovy7996Bug.groovy
+++ b/src/test/groovy/bugs/Groovy7996Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy7996Bug extends GroovyTestCase {
     void testPropertyAccessFromInnerClass() {
         assertScript '''
diff --git a/src/test/groovy/bugs/Groovy8026Bug.groovy b/src/test/groovy/bugs/Groovy8026Bug.groovy
index 8483ee0..ef0ec4c 100644
--- a/src/test/groovy/bugs/Groovy8026Bug.groovy
+++ b/src/test/groovy/bugs/Groovy8026Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy8026Bug extends GroovyTestCase {
     void testJavaBeanPropertiesAvailableInInnerClasses() {
         assertScript '''
diff --git a/src/test/groovy/bugs/Groovy8030Bug.groovy b/src/test/groovy/bugs/Groovy8030Bug.groovy
index 5438989..f3d89e6 100644
--- a/src/test/groovy/bugs/Groovy8030Bug.groovy
+++ b/src/test/groovy/bugs/Groovy8030Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy8030Bug extends GroovyTestCase {
     void testCompileStaticWithBinaryExpressionAndFlowTyping() {
         assertScript """
diff --git a/src/test/groovy/bugs/Groovy8048Bug.groovy b/src/test/groovy/bugs/Groovy8048Bug.groovy
index e541f2f..23b4cf4 100644
--- a/src/test/groovy/bugs/Groovy8048Bug.groovy
+++ b/src/test/groovy/bugs/Groovy8048Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy8048Bug extends GroovyTestCase {
     void testFinalFieldInPreCompiledTrait() {
         def shell = new GroovyShell(getClass().classLoader)
diff --git a/src/test/groovy/bugs/Groovy8055Bug.groovy b/src/test/groovy/bugs/Groovy8055Bug.groovy
index ca15c7e..968403e 100644
--- a/src/test/groovy/bugs/Groovy8055Bug.groovy
+++ b/src/test/groovy/bugs/Groovy8055Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy8055Bug extends GroovyTestCase {
     void test1() {
         assertScript '''
diff --git a/src/test/groovy/bugs/Groovy8059Bug.groovy b/src/test/groovy/bugs/Groovy8059Bug.groovy
index a86cdb2..85d77fd 100644
--- a/src/test/groovy/bugs/Groovy8059Bug.groovy
+++ b/src/test/groovy/bugs/Groovy8059Bug.groovy
@@ -22,6 +22,8 @@
 
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy8059Bug extends GroovyTestCase {
     void test1() {
         assertScript '''
diff --git a/src/test/groovy/bugs/Groovy8060Bug.groovy b/src/test/groovy/bugs/Groovy8060Bug.groovy
index a4b1af1..9c8ba01 100644
--- a/src/test/groovy/bugs/Groovy8060Bug.groovy
+++ b/src/test/groovy/bugs/Groovy8060Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy8060Bug extends GroovyTestCase {
     void testLoggingWithinClosuresThatAreMethodArgsShouldHaveGuards() {
         assertScript '''
diff --git a/src/test/groovy/bugs/Groovy8065Bug.groovy b/src/test/groovy/bugs/Groovy8065Bug.groovy
index 5c3f018..be18ca3 100644
--- a/src/test/groovy/bugs/Groovy8065Bug.groovy
+++ b/src/test/groovy/bugs/Groovy8065Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy8065Bug extends GroovyTestCase {
     void testMapWithCustomSetDuringAsTypeCast() {
         assertScript '''
diff --git a/src/test/groovy/bugs/Groovy8084Bug.groovy b/src/test/groovy/bugs/Groovy8084Bug.groovy
index db92df8..ef2de01 100644
--- a/src/test/groovy/bugs/Groovy8084Bug.groovy
+++ b/src/test/groovy/bugs/Groovy8084Bug.groovy
@@ -19,7 +19,7 @@
 package groovy.bugs
 
 import gls.CompilableTestSupport
-import groovy.transform.NotYetImplemented
+import groovy.test.NotYetImplemented
 
 class Groovy8084Bug extends CompilableTestSupport {
     // TODO REFINE ME
diff --git a/src/test/groovy/bugs/Groovy8085Bug.groovy b/src/test/groovy/bugs/Groovy8085Bug.groovy
index f1a9310..7bf3a17 100644
--- a/src/test/groovy/bugs/Groovy8085Bug.groovy
+++ b/src/test/groovy/bugs/Groovy8085Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy8085Bug extends GroovyTestCase {
     void testTryCatchFinally() {
         assertScript '''
diff --git a/src/test/groovy/bugs/Groovy8110Bug.groovy b/src/test/groovy/bugs/Groovy8110Bug.groovy
index 355d462..0cd8afa 100644
--- a/src/test/groovy/bugs/Groovy8110Bug.groovy
+++ b/src/test/groovy/bugs/Groovy8110Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy8110Bug extends GroovyTestCase {
     void testListenerListWithArrayParam() {
         assertScript '''
diff --git a/src/test/groovy/bugs/Groovy8138Bug.groovy b/src/test/groovy/bugs/Groovy8138Bug.groovy
index e89ac25..a014dcc 100644
--- a/src/test/groovy/bugs/Groovy8138Bug.groovy
+++ b/src/test/groovy/bugs/Groovy8138Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy8138Bug extends GroovyTestCase {
     void test() {
         assertScript '''
diff --git a/src/test/groovy/bugs/Groovy8140Bug.groovy b/src/test/groovy/bugs/Groovy8140Bug.groovy
index 4de5c88..abb83e0 100644
--- a/src/test/groovy/bugs/Groovy8140Bug.groovy
+++ b/src/test/groovy/bugs/Groovy8140Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 
 class Groovy8140Bug extends GroovyTestCase {
 
diff --git a/src/test/groovy/bugs/Groovy8176Bug.groovy b/src/test/groovy/bugs/Groovy8176Bug.groovy
index 5c52122..5f0c5cb 100644
--- a/src/test/groovy/bugs/Groovy8176Bug.groovy
+++ b/src/test/groovy/bugs/Groovy8176Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy8176Bug extends GroovyTestCase {
     void testTernaryWithTap() {
         assertScript '''
diff --git a/src/test/groovy/bugs/Groovy8212Bug.groovy b/src/test/groovy/bugs/Groovy8212Bug.groovy
index e4bc5b6..3145aa7 100644
--- a/src/test/groovy/bugs/Groovy8212Bug.groovy
+++ b/src/test/groovy/bugs/Groovy8212Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy8212Bug extends GroovyTestCase {
     void test() {
         assertScript '''
diff --git a/src/test/groovy/bugs/Groovy8229Bug.groovy b/src/test/groovy/bugs/Groovy8229Bug.groovy
index eac96a2..1dd225b 100644
--- a/src/test/groovy/bugs/Groovy8229Bug.groovy
+++ b/src/test/groovy/bugs/Groovy8229Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy8229Bug extends GroovyTestCase {
     void testFinallyBlockInClosureCalledOnce() {
         assert shouldFail(
diff --git a/src/test/groovy/bugs/Groovy8260Bug.groovy b/src/test/groovy/bugs/Groovy8260Bug.groovy
index e69d68b..5c79158 100644
--- a/src/test/groovy/bugs/Groovy8260Bug.groovy
+++ b/src/test/groovy/bugs/Groovy8260Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy8260Bug extends GroovyTestCase {
 
     void testNoCastForInstanceofInsideLoop() {
diff --git a/src/test/groovy/bugs/Groovy8313Bug.groovy b/src/test/groovy/bugs/Groovy8313Bug.groovy
index aa3b43f..dc1fda5 100644
--- a/src/test/groovy/bugs/Groovy8313Bug.groovy
+++ b/src/test/groovy/bugs/Groovy8313Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy8313Bug extends GroovyTestCase {
     void testCorrectBridgeMethodForGenericArrayReturnType() {
         assertScript '''
diff --git a/src/test/groovy/bugs/Groovy831_Bug.groovy b/src/test/groovy/bugs/Groovy831_Bug.groovy
index f79b646..bed9aed 100644
--- a/src/test/groovy/bugs/Groovy831_Bug.groovy
+++ b/src/test/groovy/bugs/Groovy831_Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 /**
  * Test for fixing the Jira issue GROOVY-831
  */
diff --git a/src/test/groovy/bugs/Groovy8327Bug.groovy b/src/test/groovy/bugs/Groovy8327Bug.groovy
index a70cb81..8a5ad26 100644
--- a/src/test/groovy/bugs/Groovy8327Bug.groovy
+++ b/src/test/groovy/bugs/Groovy8327Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy8327Bug extends GroovyTestCase {
     void testCallStaticMethodInClosureParamOfThisConstructor() {
         assertScript '''
diff --git a/src/test/groovy/bugs/Groovy8337Bug.groovy b/src/test/groovy/bugs/Groovy8337Bug.groovy
index 87c166e..d47d34d 100644
--- a/src/test/groovy/bugs/Groovy8337Bug.groovy
+++ b/src/test/groovy/bugs/Groovy8337Bug.groovy
@@ -19,7 +19,7 @@
 package groovy.bugs
 
 import gls.CompilableTestSupport
-import groovy.transform.NotYetImplemented
+import groovy.test.NotYetImplemented
 
 class Groovy8337Bug extends CompilableTestSupport {
     void testGroovy8337() {
diff --git a/src/test/groovy/bugs/Groovy8339Bug.groovy b/src/test/groovy/bugs/Groovy8339Bug.groovy
index 5fa94f5..c9e2393 100644
--- a/src/test/groovy/bugs/Groovy8339Bug.groovy
+++ b/src/test/groovy/bugs/Groovy8339Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 // TODO add JVM option `--illegal-access=deny` when all warnings fixed
 class Groovy8339Bug extends GroovyTestCase {
     void testCase2() {
diff --git a/src/test/groovy/bugs/Groovy8383Bug.groovy b/src/test/groovy/bugs/Groovy8383Bug.groovy
index 1091260..45793f5 100644
--- a/src/test/groovy/bugs/Groovy8383Bug.groovy
+++ b/src/test/groovy/bugs/Groovy8383Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy8383Bug extends GroovyTestCase {
     void testCompileStaticWithOptimizedConstants() {
         assertScript '''
diff --git a/src/test/groovy/bugs/Groovy8389Bug.groovy b/src/test/groovy/bugs/Groovy8389Bug.groovy
index bf56fbd..5443b27 100644
--- a/src/test/groovy/bugs/Groovy8389Bug.groovy
+++ b/src/test/groovy/bugs/Groovy8389Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy8389Bug extends GroovyTestCase {
     void testLocalMethodInvoked() {
         assertScript '''
diff --git a/src/test/groovy/bugs/Groovy8409Bug.groovy b/src/test/groovy/bugs/Groovy8409Bug.groovy
index c4de8b7..d122ae5 100644
--- a/src/test/groovy/bugs/Groovy8409Bug.groovy
+++ b/src/test/groovy/bugs/Groovy8409Bug.groovy
@@ -19,7 +19,7 @@
 package groovy.bugs
 
 import gls.CompilableTestSupport
-import groovy.transform.NotYetImplemented
+import groovy.test.NotYetImplemented
 
 class Groovy8409Bug extends CompilableTestSupport {
     @NotYetImplemented
diff --git a/src/test/groovy/bugs/Groovy8439Bug.groovy b/src/test/groovy/bugs/Groovy8439Bug.groovy
index ccca137..e01c78e 100644
--- a/src/test/groovy/bugs/Groovy8439Bug.groovy
+++ b/src/test/groovy/bugs/Groovy8439Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy8439Bug extends GroovyTestCase {
     void testSTCGenerics() {
         assertScript '''
diff --git a/src/test/groovy/bugs/Groovy8474Bug.groovy b/src/test/groovy/bugs/Groovy8474Bug.groovy
index ab64c75..b235f0f 100644
--- a/src/test/groovy/bugs/Groovy8474Bug.groovy
+++ b/src/test/groovy/bugs/Groovy8474Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy8474Bug extends GroovyTestCase {
     void testSettingSuperProperty() {
         assertScript '''
diff --git a/src/test/groovy/bugs/Groovy8523Bug.groovy b/src/test/groovy/bugs/Groovy8523Bug.groovy
index d3c3165..a0450e4 100755
--- a/src/test/groovy/bugs/Groovy8523Bug.groovy
+++ b/src/test/groovy/bugs/Groovy8523Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy8523Bug extends GroovyTestCase {
     void testInstanceofNot1() {
         assertScript '''
diff --git a/src/test/groovy/bugs/Groovy8600Bug.groovy b/src/test/groovy/bugs/Groovy8600Bug.groovy
index 43d4093..17fccfc 100644
--- a/src/test/groovy/bugs/Groovy8600Bug.groovy
+++ b/src/test/groovy/bugs/Groovy8600Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy8600Bug extends GroovyTestCase {
     void testClosureFieldUseWithinMethod() {
         assertScript '''
diff --git a/src/test/groovy/bugs/Groovy8609Bug.groovy b/src/test/groovy/bugs/Groovy8609Bug.groovy
index 2ada73c..a6ed105 100644
--- a/src/test/groovy/bugs/Groovy8609Bug.groovy
+++ b/src/test/groovy/bugs/Groovy8609Bug.groovy
@@ -18,6 +18,7 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
 import groovy.transform.CompileStatic
 
 @CompileStatic
diff --git a/src/test/groovy/bugs/Groovy8629Bug.groovy b/src/test/groovy/bugs/Groovy8629Bug.groovy
index f4c949d..e96da8f 100644
--- a/src/test/groovy/bugs/Groovy8629Bug.groovy
+++ b/src/test/groovy/bugs/Groovy8629Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 public class Groovy8629Bug extends GroovyTestCase {
     void testNestedMethodCallInConstructor() {
         assertScript '''
diff --git a/src/test/groovy/bugs/Groovy872Bug.groovy b/src/test/groovy/bugs/Groovy872Bug.groovy
index b4f3c17..a912354 100644
--- a/src/test/groovy/bugs/Groovy872Bug.groovy
+++ b/src/test/groovy/bugs/Groovy872Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy872 extends GroovyTestCase {
   void testScript ( ) {
     assertScript ( """
diff --git a/src/test/groovy/bugs/Groovy8764Bug.groovy b/src/test/groovy/bugs/Groovy8764Bug.groovy
index 9102f04..1150db1 100644
--- a/src/test/groovy/bugs/Groovy8764Bug.groovy
+++ b/src/test/groovy/bugs/Groovy8764Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy8764Bug extends GroovyTestCase {
     void testDgmMethodInClosureInAnonymousInnerClass() {
         assertScript '''
diff --git a/src/test/groovy/bugs/Groovy8816Bug.groovy b/src/test/groovy/bugs/Groovy8816Bug.groovy
index 880a02e..2d6854d 100644
--- a/src/test/groovy/bugs/Groovy8816Bug.groovy
+++ b/src/test/groovy/bugs/Groovy8816Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy8816Bug extends GroovyTestCase {
     void testCallNoArgClosureWithArg() {
         def msg = shouldFail MissingMethodException, '''
diff --git a/src/test/groovy/bugs/Groovy8819Bug.groovy b/src/test/groovy/bugs/Groovy8819Bug.groovy
index 1203eb7..7e0cf39 100644
--- a/src/test/groovy/bugs/Groovy8819Bug.groovy
+++ b/src/test/groovy/bugs/Groovy8819Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy8819Bug extends GroovyTestCase {
     void testAccessStaticFieldInThisConstructor() {
         assertScript '''
diff --git a/src/test/groovy/bugs/Groovy8833Bug.groovy b/src/test/groovy/bugs/Groovy8833Bug.groovy
index 8fe4b28..6ed3bdb 100644
--- a/src/test/groovy/bugs/Groovy8833Bug.groovy
+++ b/src/test/groovy/bugs/Groovy8833Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy8833Bug extends GroovyTestCase {
     void testEqualsAndHashCodeAndToStringWithCompileStatic() {
         assertScript '''
diff --git a/src/test/groovy/bugs/Groovy8864Bug.groovy b/src/test/groovy/bugs/Groovy8864Bug.groovy
index 2c84055..27d804f 100644
--- a/src/test/groovy/bugs/Groovy8864Bug.groovy
+++ b/src/test/groovy/bugs/Groovy8864Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy8864Bug extends GroovyTestCase {
     void testGenericsAppliedToStaticMethodsForTraits() {
         assertScript '''
diff --git a/src/test/groovy/bugs/Groovy8868Bug.groovy b/src/test/groovy/bugs/Groovy8868Bug.groovy
index d30d8a2..02d8c54 100644
--- a/src/test/groovy/bugs/Groovy8868Bug.groovy
+++ b/src/test/groovy/bugs/Groovy8868Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy8868Bug extends GroovyTestCase {
     void testNoargConstructorIncludedForImmutableWithNoProperties() {
         assertScript '''
diff --git a/src/test/groovy/bugs/Groovy8881Bug.groovy b/src/test/groovy/bugs/Groovy8881Bug.groovy
index 0e1d2e2..967f5f5 100644
--- a/src/test/groovy/bugs/Groovy8881Bug.groovy
+++ b/src/test/groovy/bugs/Groovy8881Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy8881Bug extends GroovyTestCase {
     void testClosureWithinClosureInInnerClassReferencesThisCorrectly() {
         assertScript '''
diff --git a/src/test/groovy/bugs/Groovy8887.groovy b/src/test/groovy/bugs/Groovy8887.groovy
index e6cdd09..b56ff9d 100644
--- a/src/test/groovy/bugs/Groovy8887.groovy
+++ b/src/test/groovy/bugs/Groovy8887.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy8887 extends GroovyTestCase {
     void testMultiAssignment() {
         assertScript '''
diff --git a/src/test/groovy/bugs/Groovy8962.groovy b/src/test/groovy/bugs/Groovy8962.groovy
index 69a6e62..ce192d4 100644
--- a/src/test/groovy/bugs/Groovy8962.groovy
+++ b/src/test/groovy/bugs/Groovy8962.groovy
@@ -18,6 +18,7 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
 import junit.framework.TestCase
 import org.codehaus.groovy.control.CompilerConfiguration
 import org.codehaus.groovy.tools.javac.JavaAwareCompilationUnit
diff --git a/src/test/groovy/bugs/Groovy9074.groovy b/src/test/groovy/bugs/Groovy9074.groovy
index b3ebf16..aac3c9c 100644
--- a/src/test/groovy/bugs/Groovy9074.groovy
+++ b/src/test/groovy/bugs/Groovy9074.groovy
@@ -18,6 +18,7 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
 import groovy.transform.CompileStatic
 import org.codehaus.groovy.control.CompilationUnit
 
diff --git a/src/test/groovy/bugs/Groovy965_Bug.groovy b/src/test/groovy/bugs/Groovy965_Bug.groovy
index 1a9a4ae..089a490 100644
--- a/src/test/groovy/bugs/Groovy965_Bug.groovy
+++ b/src/test/groovy/bugs/Groovy965_Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 /**
  * A test case to ensure that Groovy can compile class names and variable names with non-ASCII
  * characters and that non-ASCII characters in Strings do the right thing.
diff --git a/src/test/groovy/bugs/Groovy996_Bug.groovy b/src/test/groovy/bugs/Groovy996_Bug.groovy
index ea50b4f..5e3175e 100644
--- a/src/test/groovy/bugs/Groovy996_Bug.groovy
+++ b/src/test/groovy/bugs/Groovy996_Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class Groovy996_Bug extends GroovyTestCase {
     void testAccessToSuperProtectedField() {
         def a = new Groovy996_SubClass()
diff --git a/src/test/groovy/bugs/GroovyInnerEnumBug.groovy b/src/test/groovy/bugs/GroovyInnerEnumBug.groovy
index adf69e0..28e105e 100644
--- a/src/test/groovy/bugs/GroovyInnerEnumBug.groovy
+++ b/src/test/groovy/bugs/GroovyInnerEnumBug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class GroovyInnerEnumBug extends GroovyTestCase {
     static public enum MyEnum { 
         a, b, c
diff --git a/src/test/groovy/bugs/GuillaumesBug.groovy b/src/test/groovy/bugs/GuillaumesBug.groovy
index 168ad8d..c47aea0 100644
--- a/src/test/groovy/bugs/GuillaumesBug.groovy
+++ b/src/test/groovy/bugs/GuillaumesBug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class GuillaumesBug extends GroovyTestCase {
     
     void testBug() {
diff --git a/src/test/groovy/bugs/GuillaumesMapBug.groovy b/src/test/groovy/bugs/GuillaumesMapBug.groovy
index c3aa1b0..01784f5 100644
--- a/src/test/groovy/bugs/GuillaumesMapBug.groovy
+++ b/src/test/groovy/bugs/GuillaumesMapBug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class GuillaumesMapBug extends GroovyTestCase {
     
     void testBug2() {
diff --git a/src/test/groovy/bugs/ImportNodeLineNumberTest.groovy b/src/test/groovy/bugs/ImportNodeLineNumberTest.groovy
index 1fcaf0d..f4d967a 100644
--- a/src/test/groovy/bugs/ImportNodeLineNumberTest.groovy
+++ b/src/test/groovy/bugs/ImportNodeLineNumberTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class ImportNodeLineNumberTest extends GroovyTestCase {
     void testLineNumberOfImports() {
         assertScript '''import groovy.transform.ASTTest
diff --git a/src/test/groovy/bugs/InconsistentStackHeightBug.groovy b/src/test/groovy/bugs/InconsistentStackHeightBug.groovy
index 200de65..37eefb2 100644
--- a/src/test/groovy/bugs/InconsistentStackHeightBug.groovy
+++ b/src/test/groovy/bugs/InconsistentStackHeightBug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 /**
  */
 class InconsistentStackHeightBug extends GroovyTestCase {
diff --git a/src/test/groovy/bugs/InterfaceImplBug.groovy b/src/test/groovy/bugs/InterfaceImplBug.groovy
index d1cbe99..5c188c9 100644
--- a/src/test/groovy/bugs/InterfaceImplBug.groovy
+++ b/src/test/groovy/bugs/InterfaceImplBug.groovy
@@ -18,6 +18,7 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.dummy.FooHandler
 
 class InterfaceImplBug extends GroovyTestCase implements FooHandler {
diff --git a/src/test/groovy/bugs/InvokeNormalMethodFromBuilder_Groovy657Bug.groovy b/src/test/groovy/bugs/InvokeNormalMethodFromBuilder_Groovy657Bug.groovy
index 609cabb..8034569 100644
--- a/src/test/groovy/bugs/InvokeNormalMethodFromBuilder_Groovy657Bug.groovy
+++ b/src/test/groovy/bugs/InvokeNormalMethodFromBuilder_Groovy657Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 /**
   * Test that ensures that:
   * <ul>
diff --git a/src/test/groovy/bugs/MarkupAndMethodBug.groovy b/src/test/groovy/bugs/MarkupAndMethodBug.groovy
index 1c9031a..302ac21 100644
--- a/src/test/groovy/bugs/MarkupAndMethodBug.groovy
+++ b/src/test/groovy/bugs/MarkupAndMethodBug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 /**
  * Mixes variables, closures and method calls in markup
  *
diff --git a/src/test/groovy/bugs/MetaClassCachingBug.groovy b/src/test/groovy/bugs/MetaClassCachingBug.groovy
index 9b65032..2153c6d 100644
--- a/src/test/groovy/bugs/MetaClassCachingBug.groovy
+++ b/src/test/groovy/bugs/MetaClassCachingBug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class MetaClassCachingBug extends GroovyTestCase {
 
     protected void tearDown() {
diff --git a/src/test/groovy/bugs/MethodCallWithoutParensInStaticMethodBug.groovy b/src/test/groovy/bugs/MethodCallWithoutParensInStaticMethodBug.groovy
index 1f8d35f..eadb1a6 100644
--- a/src/test/groovy/bugs/MethodCallWithoutParensInStaticMethodBug.groovy
+++ b/src/test/groovy/bugs/MethodCallWithoutParensInStaticMethodBug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class MethodCallWithoutParensInStaticMethodBug extends GroovyTestCase {
 
     void testBug() {
diff --git a/src/test/groovy/bugs/MethodClosureTest.groovy b/src/test/groovy/bugs/MethodClosureTest.groovy
index 1ce27fc..bdba5fd 100644
--- a/src/test/groovy/bugs/MethodClosureTest.groovy
+++ b/src/test/groovy/bugs/MethodClosureTest.groovy
@@ -18,6 +18,7 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.runtime.MethodClosure
 
 class MethodClosureTest extends GroovyTestCase {
diff --git a/src/test/groovy/bugs/MethodDispatchBug.groovy b/src/test/groovy/bugs/MethodDispatchBug.groovy
index 7e1620e..3a5a496 100644
--- a/src/test/groovy/bugs/MethodDispatchBug.groovy
+++ b/src/test/groovy/bugs/MethodDispatchBug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class MethodDispatchBug extends GroovyTestCase {
     def doit(Object parameter1, Object parameter2) {
         "OO"
diff --git a/src/test/groovy/bugs/MethodPointerBug.groovy b/src/test/groovy/bugs/MethodPointerBug.groovy
index 0fc7d26..17b2b69 100644
--- a/src/test/groovy/bugs/MethodPointerBug.groovy
+++ b/src/test/groovy/bugs/MethodPointerBug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class MethodPointerBug extends GroovyTestCase {
 
     void sayHello() {
diff --git a/src/test/groovy/bugs/MorgansBug.groovy b/src/test/groovy/bugs/MorgansBug.groovy
index 51e3f61..e8bdb79 100644
--- a/src/test/groovy/bugs/MorgansBug.groovy
+++ b/src/test/groovy/bugs/MorgansBug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class MorgansBug extends GroovyTestCase {
 
     void testBug() {
diff --git a/src/test/groovy/bugs/NestedClosureBug.groovy b/src/test/groovy/bugs/NestedClosureBug.groovy
index 5721495..0091357 100644
--- a/src/test/groovy/bugs/NestedClosureBug.groovy
+++ b/src/test/groovy/bugs/NestedClosureBug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 /**
  */
 class NestedClosureBug extends GroovyTestCase {
diff --git a/src/test/groovy/bugs/NullAsBooleanCoercionTest.groovy b/src/test/groovy/bugs/NullAsBooleanCoercionTest.groovy
index 2394fd7..160865c 100644
--- a/src/test/groovy/bugs/NullAsBooleanCoercionTest.groovy
+++ b/src/test/groovy/bugs/NullAsBooleanCoercionTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 /**
  * NullObject has no asBoolean() method,
  * making null.asBoolean() return true instead of false.
diff --git a/src/test/groovy/bugs/NullCompareBug.groovy b/src/test/groovy/bugs/NullCompareBug.groovy
index cdb0917..a973973 100644
--- a/src/test/groovy/bugs/NullCompareBug.groovy
+++ b/src/test/groovy/bugs/NullCompareBug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class NullCompareBug extends GroovyTestCase {
     
     void testBug() {
diff --git a/src/test/groovy/bugs/OverloadInvokeMethodBug.groovy b/src/test/groovy/bugs/OverloadInvokeMethodBug.groovy
index 6c909fe..9bb8b68 100644
--- a/src/test/groovy/bugs/OverloadInvokeMethodBug.groovy
+++ b/src/test/groovy/bugs/OverloadInvokeMethodBug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 /**
  */
  
diff --git a/src/test/groovy/bugs/POJOCallSiteBug.groovy b/src/test/groovy/bugs/POJOCallSiteBug.groovy
index 7a4483e..5ba2e11 100644
--- a/src/test/groovy/bugs/POJOCallSiteBug.groovy
+++ b/src/test/groovy/bugs/POJOCallSiteBug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class POJOCallSiteBug extends GroovyTestCase {
 
     MetaClassRegistry registry
diff --git a/src/test/groovy/bugs/PrimitivePropertyBug.groovy b/src/test/groovy/bugs/PrimitivePropertyBug.groovy
index 187f904..22e7ae8 100644
--- a/src/test/groovy/bugs/PrimitivePropertyBug.groovy
+++ b/src/test/groovy/bugs/PrimitivePropertyBug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 /**
  * Fix Bug GROOVY-683
  */
diff --git a/src/test/groovy/bugs/PrintlnWithNewBug.groovy b/src/test/groovy/bugs/PrintlnWithNewBug.groovy
index 1c59bfb..079deb8 100644
--- a/src/test/groovy/bugs/PrintlnWithNewBug.groovy
+++ b/src/test/groovy/bugs/PrintlnWithNewBug.groovy
@@ -19,6 +19,7 @@
 package groovy.bugs
 
 import groovy.Foo
+import groovy.test.GroovyTestCase
 
 class PrintlnWithNewBug extends GroovyTestCase {
     
diff --git a/src/test/groovy/bugs/PropertyNameBug.groovy b/src/test/groovy/bugs/PropertyNameBug.groovy
index a54fb0f..c41d54e 100644
--- a/src/test/groovy/bugs/PropertyNameBug.groovy
+++ b/src/test/groovy/bugs/PropertyNameBug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 /**
  * Test to fix the issue GROOVY-843.
  */
diff --git a/src/test/groovy/bugs/RodsBooleanBug.groovy b/src/test/groovy/bugs/RodsBooleanBug.groovy
index a7738c0..3fa805c 100644
--- a/src/test/groovy/bugs/RodsBooleanBug.groovy
+++ b/src/test/groovy/bugs/RodsBooleanBug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 /**
  */
 class RodsBooleanBug extends GroovyTestCase {
diff --git a/src/test/groovy/bugs/RodsBug.groovy b/src/test/groovy/bugs/RodsBug.groovy
index b9ee14a..d5c3d76 100644
--- a/src/test/groovy/bugs/RodsBug.groovy
+++ b/src/test/groovy/bugs/RodsBug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class RodsBug extends GroovyTestCase {
 
     void testBug() {
diff --git a/src/test/groovy/bugs/RussellsOptionalParenTest.groovy b/src/test/groovy/bugs/RussellsOptionalParenTest.groovy
index 6f7c165..b78fa0d 100644
--- a/src/test/groovy/bugs/RussellsOptionalParenTest.groovy
+++ b/src/test/groovy/bugs/RussellsOptionalParenTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class RussellsOptionalParenTest extends GroovyTestCase {
 
     void testMethodCallWithOneParam() {
diff --git a/src/test/groovy/bugs/SingleEvalTest.groovy b/src/test/groovy/bugs/SingleEvalTest.groovy
index 7b2b960..09a2e86 100644
--- a/src/test/groovy/bugs/SingleEvalTest.groovy
+++ b/src/test/groovy/bugs/SingleEvalTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class SingleEvalTest extends GroovyTestCase {
     int getArrayCount
     int getIndexCount
diff --git a/src/test/groovy/bugs/StaticClosurePropertyBug.groovy b/src/test/groovy/bugs/StaticClosurePropertyBug.groovy
index f08e00f..d0a05c3 100644
--- a/src/test/groovy/bugs/StaticClosurePropertyBug.groovy
+++ b/src/test/groovy/bugs/StaticClosurePropertyBug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class StaticClosurePropertyBug extends GroovyTestCase {
 
     static def out = {System.out.println(it)}
diff --git a/src/test/groovy/bugs/StaticMethodCallBug.groovy b/src/test/groovy/bugs/StaticMethodCallBug.groovy
index 48638bd..07c6ccf 100644
--- a/src/test/groovy/bugs/StaticMethodCallBug.groovy
+++ b/src/test/groovy/bugs/StaticMethodCallBug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 /** 
  */
 class StaticMethodCallBug extends GroovyTestCase {
diff --git a/src/test/groovy/bugs/StaticMethodImportBug.groovy b/src/test/groovy/bugs/StaticMethodImportBug.groovy
index 3e5c3cf..93f1bef 100644
--- a/src/test/groovy/bugs/StaticMethodImportBug.groovy
+++ b/src/test/groovy/bugs/StaticMethodImportBug.groovy
@@ -16,8 +16,9 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package groovy.bugs;
+package groovy.bugs
 
+import groovy.test.GroovyTestCase;
 import org.codehaus.groovy.dummy.*
 
 /**
diff --git a/src/test/groovy/bugs/StaticMethodImportGroovy935Bug.groovy b/src/test/groovy/bugs/StaticMethodImportGroovy935Bug.groovy
index cb145ed..b29030a 100644
--- a/src/test/groovy/bugs/StaticMethodImportGroovy935Bug.groovy
+++ b/src/test/groovy/bugs/StaticMethodImportGroovy935Bug.groovy
@@ -16,8 +16,9 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package groovy.bugs;
+package groovy.bugs
 
+import groovy.test.GroovyTestCase;
 import org.codehaus.groovy.dummy.ClassWithStaticMethod
 
 /**
diff --git a/src/test/groovy/bugs/StaticPropertyBug.groovy b/src/test/groovy/bugs/StaticPropertyBug.groovy
index e08d463..991c068 100644
--- a/src/test/groovy/bugs/StaticPropertyBug.groovy
+++ b/src/test/groovy/bugs/StaticPropertyBug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class StaticPropertyBug extends GroovyTestCase {
 
     MetaClassRegistry registry
diff --git a/src/test/groovy/bugs/SubscriptAndExpressionBug.groovy b/src/test/groovy/bugs/SubscriptAndExpressionBug.groovy
index dd8c3e4..185119b 100644
--- a/src/test/groovy/bugs/SubscriptAndExpressionBug.groovy
+++ b/src/test/groovy/bugs/SubscriptAndExpressionBug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class SubscriptAndExpressionBug extends GroovyTestCase {
     
     void testBug() {
diff --git a/src/test/groovy/bugs/SuperMethod2Bug.groovy b/src/test/groovy/bugs/SuperMethod2Bug.groovy
index 6fa5f35..093cb42 100644
--- a/src/test/groovy/bugs/SuperMethod2Bug.groovy
+++ b/src/test/groovy/bugs/SuperMethod2Bug.groovy
@@ -18,9 +18,10 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 /**
  */
- 
 class SuperMethod2Bug extends GroovyTestCase {
      
     void testBug() {
diff --git a/src/test/groovy/bugs/SuperMethodBug.groovy b/src/test/groovy/bugs/SuperMethodBug.groovy
index e88eaa6..1479621 100644
--- a/src/test/groovy/bugs/SuperMethodBug.groovy
+++ b/src/test/groovy/bugs/SuperMethodBug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 /**
  */
 class SuperMethodBug extends GroovyTestCase {
diff --git a/src/test/groovy/bugs/SynchronizedBytecodeBug.groovy b/src/test/groovy/bugs/SynchronizedBytecodeBug.groovy
index e20e065..ad0fb08 100644
--- a/src/test/groovy/bugs/SynchronizedBytecodeBug.groovy
+++ b/src/test/groovy/bugs/SynchronizedBytecodeBug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class SynchronizedBytecodeBug extends GroovyTestCase {
 
     /**
diff --git a/src/test/groovy/bugs/TernaryOperatorTest.groovy b/src/test/groovy/bugs/TernaryOperatorTest.groovy
index 59c2a52..fd740d6 100644
--- a/src/test/groovy/bugs/TernaryOperatorTest.groovy
+++ b/src/test/groovy/bugs/TernaryOperatorTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class TernaryOperatorBugTest extends GroovyTestCase {
     void testTernaryOperator() {
         assertScript '''
diff --git a/src/test/groovy/bugs/ToStringBug.groovy b/src/test/groovy/bugs/ToStringBug.groovy
index 3330f7b..f99785d 100644
--- a/src/test/groovy/bugs/ToStringBug.groovy
+++ b/src/test/groovy/bugs/ToStringBug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 /**
  */
 class ToStringBug extends GroovyTestCase {
diff --git a/src/test/groovy/bugs/TryCatch2Bug.groovy b/src/test/groovy/bugs/TryCatch2Bug.groovy
index 36b30a6..8f3f4d8 100644
--- a/src/test/groovy/bugs/TryCatch2Bug.groovy
+++ b/src/test/groovy/bugs/TryCatch2Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class TryCatch2Bug extends GroovyTestCase {
     
     void testBug() {
diff --git a/src/test/groovy/bugs/TryCatchBug.groovy b/src/test/groovy/bugs/TryCatchBug.groovy
index f874562..bb88ab4 100644
--- a/src/test/groovy/bugs/TryCatchBug.groovy
+++ b/src/test/groovy/bugs/TryCatchBug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class TryCatchBug extends GroovyTestCase {
     
     void testBug() {
diff --git a/src/test/groovy/bugs/UnknownVariableBug.groovy b/src/test/groovy/bugs/UnknownVariableBug.groovy
index d626b3f..4730f5c 100644
--- a/src/test/groovy/bugs/UnknownVariableBug.groovy
+++ b/src/test/groovy/bugs/UnknownVariableBug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 /**
  */
 class UnknownVariableBug extends GroovyTestCase {
diff --git a/src/test/groovy/bugs/UseClosureInClosureBug.groovy b/src/test/groovy/bugs/UseClosureInClosureBug.groovy
index 0a01c72..62f4354 100644
--- a/src/test/groovy/bugs/UseClosureInClosureBug.groovy
+++ b/src/test/groovy/bugs/UseClosureInClosureBug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 /**
  */
 class UseClosureInClosureBug extends GroovyTestCase {
diff --git a/src/test/groovy/bugs/UseStaticInClosureBug.groovy b/src/test/groovy/bugs/UseStaticInClosureBug.groovy
index 191e698..a492510 100644
--- a/src/test/groovy/bugs/UseStaticInClosureBug.groovy
+++ b/src/test/groovy/bugs/UseStaticInClosureBug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 /**
  */
 class UseStaticInClosureBug extends GroovyTestCase {
diff --git a/src/test/groovy/bugs/VariablePrecedence.groovy b/src/test/groovy/bugs/VariablePrecedence.groovy
index 90f38c5..35fd358 100644
--- a/src/test/groovy/bugs/VariablePrecedence.groovy
+++ b/src/test/groovy/bugs/VariablePrecedence.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class VariblePrecedence extends GroovyTestCase {
     
     void testVariablePrecedence() {
diff --git a/src/test/groovy/bugs/VariablePrecedenceTest.groovy b/src/test/groovy/bugs/VariablePrecedenceTest.groovy
index 380d34e..c634cb2 100644
--- a/src/test/groovy/bugs/VariablePrecedenceTest.groovy
+++ b/src/test/groovy/bugs/VariablePrecedenceTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class VariablePrecedenceTest extends GroovyTestCase {
     def x = 100
     def y = 93
diff --git a/src/test/groovy/bugs/VerifyErrorBug.groovy b/src/test/groovy/bugs/VerifyErrorBug.groovy
index 7073032..572685d 100644
--- a/src/test/groovy/bugs/VerifyErrorBug.groovy
+++ b/src/test/groovy/bugs/VerifyErrorBug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class VerifyErrorBug extends GroovyTestCase {
     void testShouldNotThrowVerifyError1() {
         assertScript """
diff --git a/src/test/groovy/bugs/WriteOnlyPropertyBug.groovy b/src/test/groovy/bugs/WriteOnlyPropertyBug.groovy
index 7a5455d..227fed8 100644
--- a/src/test/groovy/bugs/WriteOnlyPropertyBug.groovy
+++ b/src/test/groovy/bugs/WriteOnlyPropertyBug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 /**
  */
 class WriteOnlyPropertyBug extends GroovyTestCase {
diff --git a/src/test/groovy/bugs/ZoharsBug.groovy b/src/test/groovy/bugs/ZoharsBug.groovy
index 5396a68..47b99ac 100644
--- a/src/test/groovy/bugs/ZoharsBug.groovy
+++ b/src/test/groovy/bugs/ZoharsBug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs
 
+import groovy.test.GroovyTestCase
+
 class ZoharsBug extends GroovyTestCase {
     
     void testBug() {
diff --git a/src/test/groovy/bugs/groovy5912/otherpkg/Groovy5912Bug.groovy b/src/test/groovy/bugs/groovy5912/otherpkg/Groovy5912Bug.groovy
index b1fd605..d537453 100644
--- a/src/test/groovy/bugs/groovy5912/otherpkg/Groovy5912Bug.groovy
+++ b/src/test/groovy/bugs/groovy5912/otherpkg/Groovy5912Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs.groovy5912.otherpkg
 
+import groovy.test.GroovyTestCase
+
 class Groovy5912Bug extends GroovyTestCase {
     void test() {
         def errMsg = shouldFail '''
diff --git a/src/test/groovy/bugs/groovy6938/Groovy6938Bug.groovy b/src/test/groovy/bugs/groovy6938/Groovy6938Bug.groovy
index 8b6a6d0..b76ddda 100644
--- a/src/test/groovy/bugs/groovy6938/Groovy6938Bug.groovy
+++ b/src/test/groovy/bugs/groovy6938/Groovy6938Bug.groovy
@@ -19,6 +19,8 @@
 
 package groovy.bugs.groovy6938
 
+import groovy.test.GroovyTestCase
+
 class Groovy6938Bug extends GroovyTestCase {
     void test() {
         assert null == new L().doSomething()
diff --git a/src/test/groovy/bugs/groovy8531/Groovy8531Bug.groovy b/src/test/groovy/bugs/groovy8531/Groovy8531Bug.groovy
index 53a71f2..8b09a30 100644
--- a/src/test/groovy/bugs/groovy8531/Groovy8531Bug.groovy
+++ b/src/test/groovy/bugs/groovy8531/Groovy8531Bug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs.groovy8531
 
+import groovy.test.GroovyTestCase
+
 class Groovy8531Bug extends GroovyTestCase {
     void testPublicAndProtectedInnerType() {
         assertScript '''
diff --git a/src/test/groovy/bugs/groovy8757/UsageTest.groovy b/src/test/groovy/bugs/groovy8757/UsageTest.groovy
index 321820e..0c385dd 100644
--- a/src/test/groovy/bugs/groovy8757/UsageTest.groovy
+++ b/src/test/groovy/bugs/groovy8757/UsageTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs.groovy8757
 
+import groovy.test.GroovyTestCase
+
 class UsageTest extends GroovyTestCase {
     void testAccessingPrecompiledTraitWithMethodGenerics() {
         def c0 = new GroovyShell().evaluate('''
diff --git a/src/test/groovy/bugs/groovy8953/SyntheticParameterAnnotationsBug.groovy b/src/test/groovy/bugs/groovy8953/SyntheticParameterAnnotationsBug.groovy
index 316e5b9..9ba5c1e 100644
--- a/src/test/groovy/bugs/groovy8953/SyntheticParameterAnnotationsBug.groovy
+++ b/src/test/groovy/bugs/groovy8953/SyntheticParameterAnnotationsBug.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.bugs.groovy8953
 
+import groovy.test.GroovyTestCase
+
 class SyntheticParameterAnnotationsBug extends GroovyTestCase {
     void testEnumConstructorWithSyntheticParamUsageWithAsmResolvingDisabled() {
         assertScript '''
diff --git a/src/test/groovy/bugs/groovy9236/Groovy9236Bug.groovy b/src/test/groovy/bugs/groovy9236/Groovy9236Bug.groovy
index 0ad30d0..393cfb5 100644
--- a/src/test/groovy/bugs/groovy9236/Groovy9236Bug.groovy
+++ b/src/test/groovy/bugs/groovy9236/Groovy9236Bug.groovy
@@ -18,6 +18,7 @@
  */
 package groovy.bugs.groovy9236
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.tools.GroovyStarter
 
 class Groovy9236Bug extends GroovyTestCase {
diff --git a/src/test/groovy/execute/ExecuteTest.groovy b/src/test/groovy/execute/ExecuteTest.groovy
index d654c1d..53c88e1 100644
--- a/src/test/groovy/execute/ExecuteTest.groovy
+++ b/src/test/groovy/execute/ExecuteTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.execute
 
+import groovy.test.GroovyTestCase
+
 import static groovy.test.GroovyAssert.isAtLeastJdk
 
 /**
diff --git a/src/test/groovy/execute/ExecuteTest_LinuxSolaris.groovy b/src/test/groovy/execute/ExecuteTest_LinuxSolaris.groovy
index 338bd8b..803ee2f 100644
--- a/src/test/groovy/execute/ExecuteTest_LinuxSolaris.groovy
+++ b/src/test/groovy/execute/ExecuteTest_LinuxSolaris.groovy
@@ -21,6 +21,7 @@
 
 package groovy.execute
 
+import groovy.test.GroovyTestCase
 import org.junit.Before
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/src/test/groovy/execute/ExecuteTest_Windows.groovy b/src/test/groovy/execute/ExecuteTest_Windows.groovy
index 49d994f..a30449a 100644
--- a/src/test/groovy/execute/ExecuteTest_Windows.groovy
+++ b/src/test/groovy/execute/ExecuteTest_Windows.groovy
@@ -18,6 +18,7 @@
  */
 package groovy.execute
 
+import groovy.test.GroovyTestCase
 import org.junit.Before
 import org.junit.Test
 import org.junit.runner.RunWith
diff --git a/src/test/groovy/gpath/GPathTest.groovy b/src/test/groovy/gpath/GPathTest.groovy
index fefbb4b..57e0a1c 100644
--- a/src/test/groovy/gpath/GPathTest.groovy
+++ b/src/test/groovy/gpath/GPathTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.gpath
 
+import groovy.test.GroovyTestCase
+
 /**
  * Some GPath tests using maps and lists
  */
diff --git a/src/test/groovy/gpath/NodeGPathTest.groovy b/src/test/groovy/gpath/NodeGPathTest.groovy
index 5690376..31791e0 100644
--- a/src/test/groovy/gpath/NodeGPathTest.groovy
+++ b/src/test/groovy/gpath/NodeGPathTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.gpath
 
+import groovy.test.GroovyTestCase
+
 /**
  * Some GPath tests using trees
  */
diff --git a/src/test/groovy/grape/GrabErrorIsolationTest.groovy b/src/test/groovy/grape/GrabErrorIsolationTest.groovy
index c355345..4bd6646 100644
--- a/src/test/groovy/grape/GrabErrorIsolationTest.groovy
+++ b/src/test/groovy/grape/GrabErrorIsolationTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.grape
 
+import groovy.test.GroovyTestCase
+
 /**
  * Test for GROOVY-3853. Kept with other grab tests and not normally
  * run unless -Djunit.network=true is set on command line.
diff --git a/src/test/groovy/grape/GrabExcludeTest.groovy b/src/test/groovy/grape/GrabExcludeTest.groovy
index ec946d6..1872103 100644
--- a/src/test/groovy/grape/GrabExcludeTest.groovy
+++ b/src/test/groovy/grape/GrabExcludeTest.groovy
@@ -18,6 +18,7 @@
  */
 package groovy.grape
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.control.MultipleCompilationErrorsException
 
 class GrabExcludeTest extends GroovyTestCase {
diff --git a/src/test/groovy/grape/GrabResolverTest.groovy b/src/test/groovy/grape/GrabResolverTest.groovy
index da4f09a..369f10b 100644
--- a/src/test/groovy/grape/GrabResolverTest.groovy
+++ b/src/test/groovy/grape/GrabResolverTest.groovy
@@ -18,6 +18,7 @@
  */
 package groovy.grape
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.control.CompilationFailedException
 
 class GrabResolverTest extends GroovyTestCase {
diff --git a/src/test/groovy/grape/GrapeClassLoaderTest.groovy b/src/test/groovy/grape/GrapeClassLoaderTest.groovy
index d70868c..dc2ccfa 100644
--- a/src/test/groovy/grape/GrapeClassLoaderTest.groovy
+++ b/src/test/groovy/grape/GrapeClassLoaderTest.groovy
@@ -17,6 +17,9 @@
  *  under the License.
  */
 package groovy.grape
+
+import groovy.test.GroovyTestCase
+
 /**
  * Created by IntelliJ IDEA.
  * User: Danno
diff --git a/src/test/groovy/io/LineColumnReaderTest.groovy b/src/test/groovy/io/LineColumnReaderTest.groovy
index b7ff52d..3e58c02 100644
--- a/src/test/groovy/io/LineColumnReaderTest.groovy
+++ b/src/test/groovy/io/LineColumnReaderTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.io
 
+import groovy.test.GroovyTestCase
+
 import java.nio.CharBuffer
 
 class LineColumnReaderTest extends GroovyTestCase {
diff --git a/src/test/groovy/lang/BenchmarkInterceptorTest.groovy b/src/test/groovy/lang/BenchmarkInterceptorTest.groovy
index ceeece7..98c7a78 100644
--- a/src/test/groovy/lang/BenchmarkInterceptorTest.groovy
+++ b/src/test/groovy/lang/BenchmarkInterceptorTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.lang
 
+import groovy.test.GroovyTestCase
+
 /**
  * Test for the BenchmarkInterceptor
  */
diff --git a/src/test/groovy/lang/CategoryAnnotationTest.groovy b/src/test/groovy/lang/CategoryAnnotationTest.groovy
index ca9e32b..1627838 100644
--- a/src/test/groovy/lang/CategoryAnnotationTest.groovy
+++ b/src/test/groovy/lang/CategoryAnnotationTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.lang
 
+import groovy.test.GroovyTestCase
+
 class CategoryAnnotationTest extends GroovyTestCase {
     void testTransformationOfPropertyInvokedOnThis() {
         //Test the fix for GROOVY-3367
diff --git a/src/test/groovy/lang/ClassReloadingTest.groovy b/src/test/groovy/lang/ClassReloadingTest.groovy
index e6b4ccd..be0e545 100644
--- a/src/test/groovy/lang/ClassReloadingTest.groovy
+++ b/src/test/groovy/lang/ClassReloadingTest.groovy
@@ -18,6 +18,7 @@
  */
 package groovy.lang
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.control.CompilerConfiguration
 
 class ClassReloadingTest extends GroovyTestCase {
diff --git a/src/test/groovy/lang/ClosureResolvingTest.groovy b/src/test/groovy/lang/ClosureResolvingTest.groovy
index 64e3ea2..14f27a2 100644
--- a/src/test/groovy/lang/ClosureResolvingTest.groovy
+++ b/src/test/groovy/lang/ClosureResolvingTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.lang
 
+import groovy.test.GroovyTestCase
+
 /**
  * Tests how closures resolve to either a delegate or an owner for a given resolveStrategy
  *
diff --git a/src/test/groovy/lang/DelegatingMetaClassTest.groovy b/src/test/groovy/lang/DelegatingMetaClassTest.groovy
index 4607069..8d23ca0 100644
--- a/src/test/groovy/lang/DelegatingMetaClassTest.groovy
+++ b/src/test/groovy/lang/DelegatingMetaClassTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.lang
 
+import groovy.test.GroovyTestCase
+
 /**
  * Tests for the DelegatingMetaClass
  */
diff --git a/src/test/groovy/lang/ExceptionTest.groovy b/src/test/groovy/lang/ExceptionTest.groovy
index 565354f..96506c5 100644
--- a/src/test/groovy/lang/ExceptionTest.groovy
+++ b/src/test/groovy/lang/ExceptionTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.lang
 
+import groovy.test.GroovyTestCase
+
 public class ExceptionTest extends GroovyTestCase {
 
     private int finallyCounter;
diff --git a/src/test/groovy/lang/ExpandoMetaClassConstructorTest.groovy b/src/test/groovy/lang/ExpandoMetaClassConstructorTest.groovy
index f01e63f..1ce05f3 100644
--- a/src/test/groovy/lang/ExpandoMetaClassConstructorTest.groovy
+++ b/src/test/groovy/lang/ExpandoMetaClassConstructorTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.lang
 
+import groovy.test.GroovyTestCase
+
 class ExpandoMetaClassConstructorTest extends GroovyTestCase {
     void testVariousConstructorForms() {
         try {
diff --git a/src/test/groovy/lang/ExpandoMetaClassCreationHandleTest.groovy b/src/test/groovy/lang/ExpandoMetaClassCreationHandleTest.groovy
index 172f7a7..159bd4d 100644
--- a/src/test/groovy/lang/ExpandoMetaClassCreationHandleTest.groovy
+++ b/src/test/groovy/lang/ExpandoMetaClassCreationHandleTest.groovy
@@ -16,7 +16,9 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package groovy.lang;
+package groovy.lang
+
+import groovy.test.GroovyTestCase;
 
 class ExpandoMetaClassCreationHandleTest extends GroovyTestCase {
     def registry = GroovySystem.metaClassRegistry
diff --git a/src/test/groovy/lang/ExpandoMetaClassTest.groovy b/src/test/groovy/lang/ExpandoMetaClassTest.groovy
index f285ad4..5d996b8 100644
--- a/src/test/groovy/lang/ExpandoMetaClassTest.groovy
+++ b/src/test/groovy/lang/ExpandoMetaClassTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.lang
 
+import groovy.test.GroovyTestCase
+
 class ExpandoMetaClassTest extends GroovyTestCase {
 
     @Override
diff --git a/src/test/groovy/lang/GetMethodsTest.groovy b/src/test/groovy/lang/GetMethodsTest.groovy
index da079d6..b95e176 100644
--- a/src/test/groovy/lang/GetMethodsTest.groovy
+++ b/src/test/groovy/lang/GetMethodsTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.lang
 
+import groovy.test.GroovyTestCase
+
 /**
  * Tests the behaviour of the runtime evaluating methods of Groovy's MetaClass system
  *
diff --git a/src/test/groovy/lang/GroovyClassLoaderTest.groovy b/src/test/groovy/lang/GroovyClassLoaderTest.groovy
index 27ec8aa..9466beb 100644
--- a/src/test/groovy/lang/GroovyClassLoaderTest.groovy
+++ b/src/test/groovy/lang/GroovyClassLoaderTest.groovy
@@ -18,6 +18,7 @@
  */
 package groovy.lang
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.ast.ClassHelper
 import org.codehaus.groovy.ast.ClassNode
 import org.codehaus.groovy.ast.CompileUnit
@@ -119,7 +120,7 @@ class GroovyClassLoaderTest extends GroovyTestCase implements Opcodes {
 
             def name = file.name - ".groovy"
             def script = """
-            class $name extends GroovyTestCase{}
+            class $name extends groovy.test.GroovyTestCase{}
           """
             file << script
             paths << file.parentFile.toURL()
diff --git a/src/test/groovy/lang/GroovyCodeSourceTest.groovy b/src/test/groovy/lang/GroovyCodeSourceTest.groovy
index 9f8422f..f3be18a 100644
--- a/src/test/groovy/lang/GroovyCodeSourceTest.groovy
+++ b/src/test/groovy/lang/GroovyCodeSourceTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.lang
 
+import groovy.test.GroovyTestCase
+
 class GroovyCodeSourceTest extends GroovyTestCase {
     void testValidEncoding() {
         new GroovyCodeSource(createTemporaryGroovyClassFile(), "UTF-8")
diff --git a/src/test/groovy/lang/GroovyShellTest2.groovy b/src/test/groovy/lang/GroovyShellTest2.groovy
index 27259bf..bdd3b64 100644
--- a/src/test/groovy/lang/GroovyShellTest2.groovy
+++ b/src/test/groovy/lang/GroovyShellTest2.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.lang
 
+import groovy.test.GroovyTestCase
+
 /**
  * Created by jim on 8/14/14.
  */
diff --git a/src/test/groovy/lang/GroovySystemTest.groovy b/src/test/groovy/lang/GroovySystemTest.groovy
index 448247d..5d99691 100644
--- a/src/test/groovy/lang/GroovySystemTest.groovy
+++ b/src/test/groovy/lang/GroovySystemTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.lang
 
+import groovy.test.GroovyTestCase
+
 /**
  * Tests for the GroovySystem class
  */
diff --git a/src/test/groovy/lang/InnerClassResolvingTest.groovy b/src/test/groovy/lang/InnerClassResolvingTest.groovy
index 427d3f8..873a241 100644
--- a/src/test/groovy/lang/InnerClassResolvingTest.groovy
+++ b/src/test/groovy/lang/InnerClassResolvingTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.lang
 
+import groovy.test.GroovyTestCase
+
 class InnerClassResolvingTest extends GroovyTestCase {
     void testInnerClass() {
         // Thread.UncaughtExceptionHandler was added in Java 1.5
diff --git a/src/test/groovy/lang/IntRangeTest.groovy b/src/test/groovy/lang/IntRangeTest.groovy
index 09589c7..c7fa51c 100644
--- a/src/test/groovy/lang/IntRangeTest.groovy
+++ b/src/test/groovy/lang/IntRangeTest.groovy
@@ -16,7 +16,9 @@
  *  specific language governing permissions and limitations
  *  under the License.
  */
-package groovy.lang;
+package groovy.lang
+
+import groovy.test.GroovyTestCase;
 
 /**
  * Provides unit tests for the <code>IntRange</code> class.
diff --git a/src/test/groovy/lang/InterceptorTest.groovy b/src/test/groovy/lang/InterceptorTest.groovy
index 3d74369..13db0ff 100644
--- a/src/test/groovy/lang/InterceptorTest.groovy
+++ b/src/test/groovy/lang/InterceptorTest.groovy
@@ -18,6 +18,7 @@
  */
 package groovy.lang
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.runtime.StringBufferWriter
 
 /**
diff --git a/src/test/groovy/lang/MapOfClosureTest.groovy b/src/test/groovy/lang/MapOfClosureTest.groovy
index 3a1cc11..9fd4e83 100644
--- a/src/test/groovy/lang/MapOfClosureTest.groovy
+++ b/src/test/groovy/lang/MapOfClosureTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.lang
 
+import groovy.test.GroovyTestCase
+
 /**
  * Tests maps of closures coerced to classes by asType()
  */
diff --git a/src/test/groovy/lang/MetaClassPropertyTest.groovy b/src/test/groovy/lang/MetaClassPropertyTest.groovy
index e20d22c..fa5b2df 100644
--- a/src/test/groovy/lang/MetaClassPropertyTest.groovy
+++ b/src/test/groovy/lang/MetaClassPropertyTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.lang
 
+import groovy.test.GroovyTestCase
+
 class MetaClassPropertyTest extends GroovyTestCase {
 
     void testForJavaClass() {
diff --git a/src/test/groovy/lang/MetaClassRegistryTest.groovy b/src/test/groovy/lang/MetaClassRegistryTest.groovy
index 83d4f13..79f4733 100644
--- a/src/test/groovy/lang/MetaClassRegistryTest.groovy
+++ b/src/test/groovy/lang/MetaClassRegistryTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.lang
 
+import groovy.test.GroovyTestCase
+
 /**
  * GROOVY-2875: MetaClassRegistryImpl constantMetaClasses map is leaking resources
  * GROOVY-4481: the listener and iterator mechanism over the MetaClassRegistry wasn't working.
diff --git a/src/test/groovy/lang/MethodMissingTest.groovy b/src/test/groovy/lang/MethodMissingTest.groovy
index c519fc4..9aa805f 100644
--- a/src/test/groovy/lang/MethodMissingTest.groovy
+++ b/src/test/groovy/lang/MethodMissingTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.lang
 
+import groovy.test.GroovyTestCase
+
 /**
  * Tests for method missing handling in Groovy
  *
diff --git a/src/test/groovy/lang/MixinAnnotationTest.groovy b/src/test/groovy/lang/MixinAnnotationTest.groovy
index 844041a..6aa66ef 100644
--- a/src/test/groovy/lang/MixinAnnotationTest.groovy
+++ b/src/test/groovy/lang/MixinAnnotationTest.groovy
@@ -18,6 +18,7 @@
  */
 package groovy.lang
 
+import groovy.test.GroovyShellTestCase
 import org.codehaus.groovy.reflection.ReflectionCache
 
 class MixinAnnotationTest extends GroovyShellTestCase {
@@ -47,7 +48,7 @@ class ClassToExtend implements Mixed{
     def a = "blah"
 }
 
-        GroovyTestCase.assertEquals("under category: object of ClassToExtend: blah", new ClassToExtend().asText ())
+        groovy.test.GroovyTestCase.assertEquals("under category: object of ClassToExtend: blah", new ClassToExtend().asText ())
 
         boolean failed = false;
         try {
@@ -84,7 +85,7 @@ class ClassToExtend {
     }
 }
 
-        GroovyTestCase.assertEquals("under category: under BIG category: object of ClassToExtend", new ClassToExtend().asText ())
+        groovy.test.GroovyTestCase.assertEquals("under category: under BIG category: object of ClassToExtend", new ClassToExtend().asText ())
         """
     }
 
diff --git a/src/test/groovy/lang/MixinTest.groovy b/src/test/groovy/lang/MixinTest.groovy
index 33dd64e..c67a8d1 100644
--- a/src/test/groovy/lang/MixinTest.groovy
+++ b/src/test/groovy/lang/MixinTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.lang
 
+import groovy.test.GroovyTestCase
+
 import java.util.concurrent.locks.ReentrantLock
 import org.codehaus.groovy.reflection.ClassInfo
 
diff --git a/src/test/groovy/lang/PropertyMissingTest.groovy b/src/test/groovy/lang/PropertyMissingTest.groovy
index 7016464..3dcbbb0 100644
--- a/src/test/groovy/lang/PropertyMissingTest.groovy
+++ b/src/test/groovy/lang/PropertyMissingTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.lang
 
+import groovy.test.GroovyTestCase
+
 /**
  * Tests the behaviour of the propertyMissing functionality of Groovy
  *
diff --git a/src/test/groovy/lang/ReferenceSerializationTest.groovy b/src/test/groovy/lang/ReferenceSerializationTest.groovy
index 603cf12..51a06cd 100644
--- a/src/test/groovy/lang/ReferenceSerializationTest.groovy
+++ b/src/test/groovy/lang/ReferenceSerializationTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.lang
 
+import groovy.test.GroovyTestCase
+
 /**
  * GROOVY-4305: Make groovy.lang.Reference implement Serializable
  */
diff --git a/src/test/groovy/lang/RespondsToTest.groovy b/src/test/groovy/lang/RespondsToTest.groovy
index 890ed44..ef0a70a 100644
--- a/src/test/groovy/lang/RespondsToTest.groovy
+++ b/src/test/groovy/lang/RespondsToTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.lang
 
+import groovy.test.GroovyTestCase
+
 /**
  * Tests the respondsTo functionality of Groovy
  *
diff --git a/src/test/groovy/lang/ScriptCacheTest.groovy b/src/test/groovy/lang/ScriptCacheTest.groovy
index 929fb82..4f8c2a8 100644
--- a/src/test/groovy/lang/ScriptCacheTest.groovy
+++ b/src/test/groovy/lang/ScriptCacheTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.lang
 
+import groovy.test.GroovyTestCase
+
 class ScriptCacheTest extends GroovyTestCase {
 
     def packageName = "scriptcachetest"
diff --git a/src/test/groovy/lang/ScriptSourcePositionInAstTest.groovy b/src/test/groovy/lang/ScriptSourcePositionInAstTest.groovy
index d550ddb..9c96f21 100644
--- a/src/test/groovy/lang/ScriptSourcePositionInAstTest.groovy
+++ b/src/test/groovy/lang/ScriptSourcePositionInAstTest.groovy
@@ -18,6 +18,7 @@
  */
 package groovy.lang
 
+import groovy.test.GroovyTestCase
 import org.codehaus.groovy.control.CompilationUnit
 import org.codehaus.groovy.control.Phases
 
diff --git a/src/test/groovy/lang/StringConcatTest.groovy b/src/test/groovy/lang/StringConcatTest.groovy
index bf0a841..143f27d 100644
--- a/src/test/groovy/lang/StringConcatTest.groovy
+++ b/src/test/groovy/lang/StringConcatTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.lang
 
+import groovy.test.GroovyTestCase
+
 class StringConcatTest extends GroovyTestCase{
   void testMe () {
 //      def x = new Object()
diff --git a/src/test/groovy/lang/StripMarginTest.groovy b/src/test/groovy/lang/StripMarginTest.groovy
index 2215fbc..9862b4b 100644
--- a/src/test/groovy/lang/StripMarginTest.groovy
+++ b/src/test/groovy/lang/StripMarginTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.lang
 
+import groovy.test.GroovyTestCase
+
 class StripMarginTest extends GroovyTestCase {
     void testStripMarginOnSingleLineString() {
         def expected = "the quick brown fox jumps over the lazy dog"
diff --git a/src/test/groovy/lang/SyntheticReturnTest.groovy b/src/test/groovy/lang/SyntheticReturnTest.groovy
index 2176ab7..b0ab966 100644
--- a/src/test/groovy/lang/SyntheticReturnTest.groovy
+++ b/src/test/groovy/lang/SyntheticReturnTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.lang
 
+import groovy.test.GroovyShellTestCase
+
 class SyntheticReturnTest extends GroovyShellTestCase{
 
     // GROOVY-5980
diff --git a/src/test/groovy/lang/TapMethodTest.groovy b/src/test/groovy/lang/TapMethodTest.groovy
index 95e4774..c947f8c 100644
--- a/src/test/groovy/lang/TapMethodTest.groovy
+++ b/src/test/groovy/lang/TapMethodTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.lang
 
+import groovy.test.GroovyTestCase
+
 /**
  * Tests the .tap method
  */
diff --git a/src/test/groovy/lang/WithMethodTest.groovy b/src/test/groovy/lang/WithMethodTest.groovy
index d93ea48..f6da0d9 100644
--- a/src/test/groovy/lang/WithMethodTest.groovy
+++ b/src/test/groovy/lang/WithMethodTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.lang
 
+import groovy.test.GroovyTestCase
+
 /**
  * Tests the .with method
  */
diff --git a/src/test/groovy/mock/example/SandwichMakerTest.groovy b/src/test/groovy/mock/example/SandwichMakerTest.groovy
index 941f859..57e3501 100644
--- a/src/test/groovy/mock/example/SandwichMakerTest.groovy
+++ b/src/test/groovy/mock/example/SandwichMakerTest.groovy
@@ -19,6 +19,7 @@
 package groovy.mock.example
 
 import groovy.mock.interceptor.MockFor
+import groovy.test.GroovyTestCase
 
 class SandwichMakerTest extends GroovyTestCase {
 
diff --git a/src/test/groovy/mock/interceptor/HalfMockTest.groovy b/src/test/groovy/mock/interceptor/HalfMockTest.groovy
index a0b53d2..4e73753 100644
--- a/src/test/groovy/mock/interceptor/HalfMockTest.groovy
+++ b/src/test/groovy/mock/interceptor/HalfMockTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.mock.interceptor
 
+import groovy.test.GroovyTestCase
+
 class HalfMockTest extends GroovyTestCase {
 
     void setUp() {
diff --git a/src/test/groovy/mock/interceptor/MockCallSequenceTest.groovy b/src/test/groovy/mock/interceptor/MockCallSequenceTest.groovy
index b7cfe1f..f0c03c7 100644
--- a/src/test/groovy/mock/interceptor/MockCallSequenceTest.groovy
+++ b/src/test/groovy/mock/interceptor/MockCallSequenceTest.groovy
@@ -18,6 +18,7 @@
  */
 package groovy.mock.interceptor
 
+import groovy.test.GroovyTestCase
 import junit.framework.AssertionFailedError
 
 /**
diff --git a/src/test/groovy/mock/interceptor/MockForJavaTest.groovy b/src/test/groovy/mock/interceptor/MockForJavaTest.groovy
index 4522161..40d2e3c 100644
--- a/src/test/groovy/mock/interceptor/MockForJavaTest.groovy
+++ b/src/test/groovy/mock/interceptor/MockForJavaTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.mock.interceptor
 
+import groovy.test.GroovyTestCase
+
 class MockForJavaTest extends GroovyTestCase {
     void testIterator() {
         def iteratorContext = new MockFor(Iterator)
diff --git a/src/test/groovy/mock/interceptor/MockNestedCallTest.groovy b/src/test/groovy/mock/interceptor/MockNestedCallTest.groovy
index caf5412..d81ddeb 100644
--- a/src/test/groovy/mock/interceptor/MockNestedCallTest.groovy
+++ b/src/test/groovy/mock/interceptor/MockNestedCallTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.mock.interceptor
 
+import groovy.test.GroovyTestCase
+
 class MockNestedCallTest extends GroovyTestCase {
 
     void testRestore() {
diff --git a/src/test/groovy/mock/interceptor/MockSingleCallTest.groovy b/src/test/groovy/mock/interceptor/MockSingleCallTest.groovy
index 36f8605..4f49d89 100644
--- a/src/test/groovy/mock/interceptor/MockSingleCallTest.groovy
+++ b/src/test/groovy/mock/interceptor/MockSingleCallTest.groovy
@@ -18,6 +18,7 @@
  */
 package groovy.mock.interceptor
 
+import groovy.test.GroovyTestCase
 import junit.framework.AssertionFailedError
 
 /**
diff --git a/src/test/groovy/mock/interceptor/MockWithZeroRangeTest.groovy b/src/test/groovy/mock/interceptor/MockWithZeroRangeTest.groovy
index 889c353..e6b3e8b 100644
--- a/src/test/groovy/mock/interceptor/MockWithZeroRangeTest.groovy
+++ b/src/test/groovy/mock/interceptor/MockWithZeroRangeTest.groovy
@@ -19,6 +19,7 @@
 package groovy.mock.interceptor
 
 import groovy.mock.interceptor.MockFor
+import groovy.test.GroovyTestCase
 import junit.framework.AssertionFailedError
 
 class MockForWithZeroRangeTest extends GroovyTestCase {
diff --git a/src/test/groovy/mock/interceptor/StubCallSequenceTest.groovy b/src/test/groovy/mock/interceptor/StubCallSequenceTest.groovy
index 1011743..89fba03 100644
--- a/src/test/groovy/mock/interceptor/StubCallSequenceTest.groovy
+++ b/src/test/groovy/mock/interceptor/StubCallSequenceTest.groovy
@@ -18,6 +18,7 @@
  */
 package groovy.mock.interceptor
 
+import groovy.test.GroovyTestCase
 import junit.framework.AssertionFailedError
 
 /**
diff --git a/src/test/groovy/mock/interceptor/StubForJavaTest.groovy b/src/test/groovy/mock/interceptor/StubForJavaTest.groovy
index f7b966c..10269a4 100644
--- a/src/test/groovy/mock/interceptor/StubForJavaTest.groovy
+++ b/src/test/groovy/mock/interceptor/StubForJavaTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.mock.interceptor
 
+import groovy.test.GroovyTestCase
+
 class StubForJavaTest extends GroovyTestCase {
     void testIterator() {
 //        ProxyGenerator.INSTANCE.debug = true
diff --git a/src/test/groovy/mock/interceptor/StubSingleCallTest.groovy b/src/test/groovy/mock/interceptor/StubSingleCallTest.groovy
index 3785175..a956e1d 100644
--- a/src/test/groovy/mock/interceptor/StubSingleCallTest.groovy
+++ b/src/test/groovy/mock/interceptor/StubSingleCallTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.mock.interceptor
 
+import groovy.test.GroovyTestCase
+
 /**
  * Testing Groovy Stub support for single calls to the Collaborator
  */
diff --git a/src/test/groovy/mock/interceptor/StubTest.groovy b/src/test/groovy/mock/interceptor/StubTest.groovy
index 13700ff..a283141 100644
--- a/src/test/groovy/mock/interceptor/StubTest.groovy
+++ b/src/test/groovy/mock/interceptor/StubTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.mock.interceptor
 
+import groovy.test.GroovyTestCase
+
 class StubTest extends GroovyTestCase {
 
    void testBehaviorWithInstanceCreatedOutsideUseClosure() {
diff --git a/src/test/groovy/operator/BigDecimalOperatorsTest.groovy b/src/test/groovy/operator/BigDecimalOperatorsTest.groovy
index ace3194..be916c8 100644
--- a/src/test/groovy/operator/BigDecimalOperatorsTest.groovy
+++ b/src/test/groovy/operator/BigDecimalOperatorsTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.operator
 
+import groovy.test.GroovyTestCase
+
 class BigDecimalOperatorsTest extends GroovyTestCase {
 
     def x, y
diff --git a/src/test/groovy/operator/BigIntegerOperationsTest.groovy b/src/test/groovy/operator/BigIntegerOperationsTest.groovy
index 21f79e8..3a0e936 100644
--- a/src/test/groovy/operator/BigIntegerOperationsTest.groovy
+++ b/src/test/groovy/operator/BigIntegerOperationsTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.operator
 
+import groovy.test.GroovyTestCase
+
 class BigIntegerOperationsTest extends GroovyTestCase {
     void testAssign() {
         BigInteger foo
diff --git a/src/test/groovy/operator/BitwiseOperatorsTest.groovy b/src/test/groovy/operator/BitwiseOperatorsTest.groovy
index fc5c719..08f1500 100644
--- a/src/test/groovy/operator/BitwiseOperatorsTest.groovy
+++ b/src/test/groovy/operator/BitwiseOperatorsTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.operator
 
+import groovy.test.GroovyTestCase
+
 /**
  * Test Bitwise Operations
  */
diff --git a/src/test/groovy/operator/BooleanOperationsTest.groovy b/src/test/groovy/operator/BooleanOperationsTest.groovy
index d062e73..c578af4 100644
--- a/src/test/groovy/operator/BooleanOperationsTest.groovy
+++ b/src/test/groovy/operator/BooleanOperationsTest.groovy
@@ -18,6 +18,8 @@
  */
 package groovy.operator
 
+import groovy.test.GroovyTestCase
+
 class BooleanOperationsTest extends GroovyTestCase {
 
     void testComparisons() {
diff --git a/src/test/groovy/operator/DoubleOperationTest.groovy b/src/test/groovy/operator/DoubleOperationTest.groovy
index 77ff7e8..5829ee9 100644
--- a/src/test/groovy/operator/DoubleOperationTest.groovy
+++ b/src/test/groovy/operator/DoubleOperationTest.groovy
@@ -18,6 +18,8 @@
... 2920 lines suppressed ...


[groovy] 02/23: fix javadoc

Posted by pa...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

paulk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git

commit a8c2c336feac3cf9e9e350a27041de9c68cfa93d
Author: Paul King <pa...@asert.com.au>
AuthorDate: Sat Sep 14 05:35:18 2019 +1000

    fix javadoc
---
 src/main/java/groovy/transform/AnnotationCollector.java | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/main/java/groovy/transform/AnnotationCollector.java b/src/main/java/groovy/transform/AnnotationCollector.java
index 769698d..4112825 100644
--- a/src/main/java/groovy/transform/AnnotationCollector.java
+++ b/src/main/java/groovy/transform/AnnotationCollector.java
@@ -171,6 +171,7 @@ import java.lang.annotation.Target;
  * </pre>
  * 
  * @see org.codehaus.groovy.transform.AnnotationCollectorTransform
+ * @since 2.1.0
  */
 @java.lang.annotation.Documented
 @Retention(RetentionPolicy.RUNTIME)


[groovy] 15/23: don't use deprecated version of class

Posted by pa...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

paulk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git

commit 1b68852ab70ca7aa419815dc43fc575e1b1957dc
Author: Paul King <pa...@asert.com.au>
AuthorDate: Thu Sep 19 18:16:41 2019 +1000

    don't use deprecated version of class
---
 .../groovy-test/src/main/java/groovy/test/AllTestSuite.java       | 2 +-
 .../groovy-test/src/main/java/groovy/test/GroovyTestSuite.java    | 2 +-
 .../src/test/groovy/groovy/test/AllTestSuiteTest.groovy           | 2 +-
 .../groovy-xml/src/main/java/groovy/xml/dom/DOMCategory.java      | 8 ++++----
 4 files changed, 7 insertions(+), 7 deletions(-)

diff --git a/subprojects/groovy-test/src/main/java/groovy/test/AllTestSuite.java b/subprojects/groovy-test/src/main/java/groovy/test/AllTestSuite.java
index dc816bc..26f718b 100644
--- a/subprojects/groovy-test/src/main/java/groovy/test/AllTestSuite.java
+++ b/subprojects/groovy-test/src/main/java/groovy/test/AllTestSuite.java
@@ -45,7 +45,7 @@ import java.util.logging.Logger;
  * <p>
  * When setting the log level of this class to FINEST, all file loading will be logged.
  * <p>
- * See also groovy.util.AllTestSuiteTest.groovy
+ * See also groovy.test.AllTestSuiteTest.groovy
  */
 public class AllTestSuite extends TestSuite {
 
diff --git a/subprojects/groovy-test/src/main/java/groovy/test/GroovyTestSuite.java b/subprojects/groovy-test/src/main/java/groovy/test/GroovyTestSuite.java
index 24b2535..0dbe3c3 100644
--- a/subprojects/groovy-test/src/main/java/groovy/test/GroovyTestSuite.java
+++ b/subprojects/groovy-test/src/main/java/groovy/test/GroovyTestSuite.java
@@ -37,7 +37,7 @@ import java.security.PrivilegedAction;
  * You can specify the GroovyUnitTest to run by running this class as an application
  * and specifying the script to run on the command line.
  * <code>
- * java groovy.util.GroovyTestSuite src/test/Foo.groovy
+ * java groovy.test.GroovyTestSuite src/test/Foo.groovy
  * </code>
  * 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.
diff --git a/subprojects/groovy-test/src/test/groovy/groovy/test/AllTestSuiteTest.groovy b/subprojects/groovy-test/src/test/groovy/groovy/test/AllTestSuiteTest.groovy
index 1ee15b0..b428468 100644
--- a/subprojects/groovy-test/src/test/groovy/groovy/test/AllTestSuiteTest.groovy
+++ b/subprojects/groovy-test/src/test/groovy/groovy/test/AllTestSuiteTest.groovy
@@ -21,7 +21,7 @@ package groovy.test
 import java.util.logging.Level
 
 /**
- * Testing groovy.util.AllTestSuite.
+ * Testing groovy.test.AllTestSuite.
  * The suite() method must properly collect Test files under the given dir and pattern,
  * add found files to the log,
  * produce a proper TestSuite,
diff --git a/subprojects/groovy-xml/src/main/java/groovy/xml/dom/DOMCategory.java b/subprojects/groovy-xml/src/main/java/groovy/xml/dom/DOMCategory.java
index 365f21a..88798ed 100644
--- a/subprojects/groovy-xml/src/main/java/groovy/xml/dom/DOMCategory.java
+++ b/subprojects/groovy-xml/src/main/java/groovy/xml/dom/DOMCategory.java
@@ -23,8 +23,8 @@ import groovy.lang.GroovyRuntimeException;
 import groovy.lang.IntRange;
 import groovy.xml.DOMBuilder;
 import groovy.namespace.QName;
+import org.apache.groovy.xml.extensions.XmlExtensions;
 import org.codehaus.groovy.runtime.InvokerHelper;
-import org.codehaus.groovy.runtime.XmlGroovyMethods;
 import org.w3c.dom.Attr;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
@@ -281,7 +281,7 @@ public class DOMCategory {
 
     public static List<Node> list(NodeList self) {
         List<Node> answer = new ArrayList<Node>();
-        Iterator<Node> it = XmlGroovyMethods.iterator(self);
+        Iterator<Node> it = XmlExtensions.iterator(self);
         while (it.hasNext()) {
             answer.add(it.next());
         }
@@ -381,7 +381,7 @@ public class DOMCategory {
         Node beforeNode = self.getNextSibling();
         DOMBuilder b = new DOMBuilder(self.getOwnerDocument());
         Element newNodes = (Element) b.invokeMethod("rootNode", c);
-        Iterator<Node> iter = XmlGroovyMethods.iterator(children(newNodes));
+        Iterator<Node> iter = XmlExtensions.iterator(children(newNodes));
         while (iter.hasNext()) {
             parent.insertBefore(iter.next(), beforeNode);
         }
@@ -507,7 +507,7 @@ public class DOMCategory {
     private static String toString(NodeList self) {
         StringBuilder sb = new StringBuilder();
         sb.append("[");
-        Iterator it = XmlGroovyMethods.iterator(self);
+        Iterator it = XmlExtensions.iterator(self);
         while (it.hasNext()) {
             if (sb.length() > 1) sb.append(", ");
             sb.append(it.next().toString());


[groovy] 08/23: don't use deprecated version of class

Posted by pa...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

paulk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git

commit eb5683aa432cfc1df811f13def61a85fc1defbf9
Author: Paul King <pa...@asert.com.au>
AuthorDate: Wed Sep 18 19:04:50 2019 +1000

    don't use deprecated version of class
---
 .../groovy/groovy/swing/binding/AbstractButtonProperties.java  | 10 +++++-----
 .../groovy/groovy/swing/binding/AbstractSyntheticBinding.java  |  8 ++++----
 2 files changed, 9 insertions(+), 9 deletions(-)

diff --git a/subprojects/groovy-swing/src/main/groovy/groovy/swing/binding/AbstractButtonProperties.java b/subprojects/groovy-swing/src/main/groovy/groovy/swing/binding/AbstractButtonProperties.java
index 826b2b6..21410b2 100644
--- a/subprojects/groovy-swing/src/main/groovy/groovy/swing/binding/AbstractButtonProperties.java
+++ b/subprojects/groovy-swing/src/main/groovy/groovy/swing/binding/AbstractButtonProperties.java
@@ -18,11 +18,11 @@
  */
 package groovy.swing.binding;
 
-import org.codehaus.groovy.binding.FullBinding;
-import org.codehaus.groovy.binding.PropertyBinding;
-import org.codehaus.groovy.binding.SourceBinding;
-import org.codehaus.groovy.binding.TargetBinding;
-import org.codehaus.groovy.binding.TriggerBinding;
+import org.apache.groovy.swing.binding.FullBinding;
+import org.apache.groovy.swing.binding.PropertyBinding;
+import org.apache.groovy.swing.binding.SourceBinding;
+import org.apache.groovy.swing.binding.TargetBinding;
+import org.apache.groovy.swing.binding.TriggerBinding;
 
 import javax.swing.*;
 import java.awt.event.ItemEvent;
diff --git a/subprojects/groovy-swing/src/main/groovy/groovy/swing/binding/AbstractSyntheticBinding.java b/subprojects/groovy-swing/src/main/groovy/groovy/swing/binding/AbstractSyntheticBinding.java
index c99f46f..5ba7538 100644
--- a/subprojects/groovy-swing/src/main/groovy/groovy/swing/binding/AbstractSyntheticBinding.java
+++ b/subprojects/groovy-swing/src/main/groovy/groovy/swing/binding/AbstractSyntheticBinding.java
@@ -18,10 +18,10 @@
  */
 package groovy.swing.binding;
 
-import org.codehaus.groovy.binding.AbstractFullBinding;
-import org.codehaus.groovy.binding.PropertyBinding;
-import org.codehaus.groovy.binding.SourceBinding;
-import org.codehaus.groovy.binding.TargetBinding;
+import org.apache.groovy.swing.binding.AbstractFullBinding;
+import org.apache.groovy.swing.binding.PropertyBinding;
+import org.apache.groovy.swing.binding.SourceBinding;
+import org.apache.groovy.swing.binding.TargetBinding;
 
 public abstract class AbstractSyntheticBinding extends AbstractFullBinding {
     boolean bound;


[groovy] 03/23: GROOVY-9251: Bump picocli to 4.0.4

Posted by pa...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

paulk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git

commit c652220bb072188449976c6a33e7000b9c077daf
Author: Daniel.Sun <re...@hotmail.com>
AuthorDate: Thu Sep 12 07:48:14 2019 +0800

    GROOVY-9251: Bump picocli to 4.0.4
---
 build.gradle | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/build.gradle b/build.gradle
index b93f60d..54efb16 100644
--- a/build.gradle
+++ b/build.gradle
@@ -157,7 +157,7 @@ ext {
     log4jVersion = '1.2.17'
     log4j2Version = '2.8'
     openbeansVersion = '1.0'
-    picocliVersion = '4.0.3'
+    picocliVersion = '4.0.4'
     qdoxVersion = '1.12.1'
     slf4jVersion = '1.7.25'
     xmlunitVersion = '1.6'


[groovy] 20/23: Fix link to NSIS installer

Posted by pa...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

paulk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git

commit 2d84eed15f730d2c39a350b4b44ac2db2a162b29
Author: Keegan Witt <ke...@gmail.com>
AuthorDate: Sat Sep 21 14:34:24 2019 -0400

    Fix link to NSIS installer
---
 src/spec/doc/core-getting-started.adoc | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/spec/doc/core-getting-started.adoc b/src/spec/doc/core-getting-started.adoc
index 588c741..dafdbee 100644
--- a/src/spec/doc/core-getting-started.adoc
+++ b/src/spec/doc/core-getting-started.adoc
@@ -147,7 +147,7 @@ brew install groovy
 
 === Installation on Windows
 
-If you're on Windows, you can also use the link:TODO-Windows+NSIS-Installer[NSIS Windows installer].
+If you're on Windows, you can also use the https://bintray.com/groovy/Distributions/Windows-Installer[NSIS Windows installer].
 
 === Other Distributions