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/02/01 08:01:17 UTC

[groovy] branch GROOVY_2_5_X updated (9fd11f0 -> 26e43dd)

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

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


    from 9fd11f0  GROOVY-8964: MissingMethodException when trying to resolve overload with variable arguments (closes #866)
     new 6f21310  GROOVY-8959: Avoid NPE in StaticVerifier
     new f23a403  GROOVY-8719: Add DelegatesTo annotation to CompilerCustomizationBuilder.withConfig
     new 86ccccb  GROOVY-8535: FieldNode constructor appears to call setType incorrectly
     new 3b3ad67  whitespace/formatting plus cleanup/remove @author tags as per Apache recommended practices cont'd
     new 9692fda  Trivial refactoring: handle `Sql` with try-with-resources for simplicity (closes #861)
     new 26e43dd  GROOVY-7160: NoSuchMethodError for varargs when type parameter extends interface (closes #869)

The 6 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:
 gradle/pomconfigurer.gradle                        |   39 +
 .../groovy/groovy/lang/GroovyResourceLoader.java   |    2 -
 src/main/groovy/groovy/lang/MapWithDefault.java    |    1 -
 .../groovy/lang/MetaArrayLengthProperty.java       |    2 -
 src/main/groovy/groovy/lang/MetaClass.java         |    3 -
 src/main/groovy/groovy/lang/MetaClassRegistry.java |    5 -
 .../groovy/lang/MetaClassRegistryChangeEvent.java  |    2 -
 .../lang/MetaClassRegistryChangeEventListener.java |    2 -
 .../groovy/groovy/lang/MetaExpandoProperty.java    |    2 -
 src/main/groovy/groovy/lang/MetaMethod.java        |    3 -
 .../groovy/groovy/lang/MetaObjectProtocol.java     |    2 -
 src/main/groovy/groovy/lang/MetaProperty.java      |    2 -
 .../groovy/groovy/lang/MissingClassException.java  |    2 -
 .../groovy/groovy/lang/MissingFieldException.java  |    2 -
 src/main/groovy/groovy/lang/Mixin.java             |    2 -
 src/main/groovy/groovy/lang/MutableMetaClass.java  |    1 -
 src/main/groovy/groovy/lang/ParameterArray.java    |    2 -
 .../groovy/lang/PropertyAccessInterceptor.java     |    1 -
 src/main/groovy/groovy/lang/ProxyMetaClass.java    |    2 -
 .../groovy/lang/ReadOnlyPropertyException.java     |    2 -
 src/main/groovy/groovy/lang/Reference.java         |    2 -
 src/main/groovy/groovy/lang/Script.java            |    3 -
 src/main/groovy/groovy/lang/Singleton.java         |    3 -
 .../groovy/lang/StringWriterIOException.java       |    2 -
 src/main/groovy/groovy/lang/TrampolineClosure.java |    2 -
 src/main/groovy/groovy/lang/Tuple.java             |    2 -
 src/main/groovy/groovy/lang/Writable.java          |    2 -
 .../security/GroovyCodeSourcePermission.java       |    2 -
 src/main/groovy/groovy/time/BaseDuration.java      |    1 -
 .../groovy/groovy/time/DatumDependentDuration.java |    2 -
 src/main/groovy/groovy/time/Duration.java          |    2 -
 .../groovy/time/TimeDatumDependentDuration.java    |    2 -
 src/main/groovy/groovy/time/TimeDuration.java      |    2 -
 .../groovy/transform/builder/SimpleStrategy.java   |    2 -
 .../groovy/transform/stc/ClosureSignatureHint.java |    1 -
 .../groovy/groovy/transform/stc/FirstParam.java    |    4 -
 .../transform/stc/FromAbstractTypeMethods.java     |    1 -
 .../groovy/groovy/transform/stc/FromString.java    |    1 -
 .../groovy/transform/stc/PickAnyArgumentHint.java  |    1 -
 .../groovy/groovy/transform/stc/SecondParam.java   |    4 -
 .../transform/stc/SingleSignatureClosureHint.java  |    1 -
 .../groovy/groovy/transform/stc/ThirdParam.java    |    4 -
 src/main/groovy/groovy/ui/GroovySocketServer.java  |    2 -
 src/main/groovy/groovy/util/AbstractFactory.java   |    4 -
 src/main/groovy/groovy/util/BufferedIterator.java  |    1 -
 src/main/groovy/groovy/util/BuilderSupport.java    |    5 +-
 src/main/groovy/groovy/util/CharsetToolkit.java    |    2 -
 src/main/groovy/groovy/util/ClosureComparator.java |    2 -
 src/main/groovy/groovy/util/ConfigObject.java      |    2 -
 src/main/groovy/groovy/util/DelegatingScript.java  |    2 -
 src/main/groovy/groovy/util/Eval.java              |    1 -
 src/main/groovy/groovy/util/Expando.java           |    4 -
 src/main/groovy/groovy/util/Factory.java           |    4 -
 .../groovy/groovy/util/FactoryBuilderSupport.java  |    4 -
 src/main/groovy/groovy/util/GroovyCollections.java |    3 -
 .../groovy/groovy/util/GroovyScriptEngine.java     |    6 -
 src/main/groovy/groovy/util/IndentPrinter.java     |    2 -
 src/main/groovy/groovy/util/MapEntry.java          |    2 -
 src/main/groovy/groovy/util/Node.java              |    3 -
 src/main/groovy/groovy/util/NodeBuilder.java       |    2 -
 src/main/groovy/groovy/util/NodePrinter.java       |    3 -
 .../groovy/groovy/util/ObjectGraphBuilder.java     |    3 -
 src/main/groovy/groovy/util/OrderBy.java           |    2 -
 src/main/groovy/groovy/util/Proxy.java             |    3 -
 src/main/groovy/groovy/util/ProxyGenerator.java    |    4 -
 src/main/groovy/groovy/util/ResourceConnector.java |    2 -
 src/main/groovy/groovy/util/ResourceException.java |    3 -
 src/main/groovy/groovy/util/ScriptException.java   |    3 -
 .../builder/CompilerCustomizationBuilder.groovy    |    8 +-
 .../groovy/tools/ast/TransformTestHelper.groovy    |   58 +-
 .../tailrec/ReturnAdderForClosures.groovy          |    4 +-
 .../ReturnStatementToIterationConverter.groovy     |    6 +-
 .../transform/tailrec/StatementReplacer.groovy     |   14 +-
 .../tailrec/TailRecursiveASTTransformation.groovy  |   24 +-
 .../tailrec/TernaryToIfStatementConverter.groovy   |    2 -
 .../tailrec/VariableAccessReplacer.groovy          |    2 -
 .../tailrec/VariableExpressionReplacer.groovy      |   44 +-
 .../tailrec/VariableExpressionTransformer.groovy   |    2 -
 .../ConcurrentLinkedHashMap.java                   |    1 -
 .../util/concurrentlinkedhashmap/EntryWeigher.java |    1 -
 .../concurrentlinkedhashmap/EvictionListener.java  |    1 -
 .../util/concurrentlinkedhashmap/LinkedDeque.java  |    1 -
 .../util/concurrentlinkedhashmap/Weigher.java      |    1 -
 .../util/concurrentlinkedhashmap/Weighers.java     |    1 -
 .../groovy/antlr/AntlrASTProcessSnippets.java      |    2 -
 .../codehaus/groovy/antlr/AntlrASTProcessor.java   |    2 -
 .../codehaus/groovy/antlr/AntlrParserPlugin.java   |    2 -
 .../codehaus/groovy/antlr/GroovySourceToken.java   |    2 -
 .../java/org/codehaus/groovy/antlr/LineColumn.java |    2 -
 .../org/codehaus/groovy/antlr/SourceBuffer.java    |    2 -
 .../groovy/antlr/UnicodeLexerSharedInputState.java |    1 -
 .../groovy/antlr/treewalker/CompositeVisitor.java  |    2 -
 .../antlr/treewalker/FlatNodeListTraversal.java    |    2 -
 .../groovy/antlr/treewalker/MindMapPrinter.java    |    2 -
 .../groovy/antlr/treewalker/NodeAsHTMLPrinter.java |    3 -
 .../groovy/antlr/treewalker/NodeCollector.java     |    3 -
 .../groovy/antlr/treewalker/NodePrinter.java       |    3 -
 .../groovy/antlr/treewalker/PreOrderTraversal.java |    2 -
 .../antlr/treewalker/SourceCodeTraversal.java      |    2 -
 .../groovy/antlr/treewalker/SourcePrinter.java     |    4 -
 .../groovy/antlr/treewalker/TraversalHelper.java   |    2 -
 .../codehaus/groovy/antlr/treewalker/Visitor.java  |    3 -
 .../groovy/antlr/treewalker/VisitorAdapter.java    |    3 -
 src/main/java/org/codehaus/groovy/ast/ASTNode.java |    3 -
 .../org/codehaus/groovy/ast/AnnotatedNode.java     |    2 -
 .../org/codehaus/groovy/ast/AstToTextHelper.java   |    1 -
 .../groovy/ast/ClassCodeExpressionTransformer.java |  290 ++--
 .../codehaus/groovy/ast/CodeVisitorSupport.java    |    2 -
 .../org/codehaus/groovy/ast/ConstructorNode.java   |    2 -
 .../codehaus/groovy/ast/EnumConstantClassNode.java |   76 +-
 .../java/org/codehaus/groovy/ast/FieldNode.java    |   11 +-
 .../java/org/codehaus/groovy/ast/GenericsType.java |    1 -
 .../codehaus/groovy/ast/GroovyClassVisitor.java    |    2 -
 .../org/codehaus/groovy/ast/GroovyCodeVisitor.java |    3 -
 .../java/org/codehaus/groovy/ast/ImportNode.java   |    4 -
 .../org/codehaus/groovy/ast/InnerClassNode.java    |    2 -
 .../groovy/ast/InterfaceHelperClassNode.java       |  100 +-
 .../groovy/ast/MethodCallTransformation.java       |    8 +-
 .../codehaus/groovy/ast/MethodInvocationTrap.java  |   13 +-
 .../java/org/codehaus/groovy/ast/MethodNode.java   |    3 -
 .../java/org/codehaus/groovy/ast/MixinNode.java    |    2 -
 .../java/org/codehaus/groovy/ast/ModuleNode.java   |    4 -
 .../java/org/codehaus/groovy/ast/PackageNode.java  |   90 +-
 .../java/org/codehaus/groovy/ast/Parameter.java    |    2 -
 .../java/org/codehaus/groovy/ast/PropertyNode.java |    2 -
 .../java/org/codehaus/groovy/ast/Variable.java     |    2 -
 .../org/codehaus/groovy/ast/VariableScope.java     |    3 -
 .../ast/builder/AstBuilderTransformation.java      |  369 +++--
 .../groovy/ast/decompiled/Annotations.java         |    3 -
 .../ast/decompiled/AsmReferenceResolver.java       |    2 -
 .../ast/decompiled/ClassSignatureParser.java       |    3 -
 .../groovy/ast/decompiled/DecompiledClassNode.java |    1 -
 .../ast/decompiled/FormalParameterParser.java      |    3 -
 .../ast/decompiled/MemberSignatureParser.java      |    5 +-
 .../groovy/ast/decompiled/TypeSignatureParser.java |    3 -
 .../ast/expr/AnnotationConstantExpression.java     |   98 +-
 .../groovy/ast/expr/ArgumentListExpression.java    |    2 -
 .../codehaus/groovy/ast/expr/ArrayExpression.java  |    2 -
 .../groovy/ast/expr/AttributeExpression.java       |    3 -
 .../codehaus/groovy/ast/expr/BinaryExpression.java |    2 -
 .../groovy/ast/expr/BitwiseNegationExpression.java |    3 -
 .../groovy/ast/expr/BooleanExpression.java         |    2 -
 .../codehaus/groovy/ast/expr/CastExpression.java   |    2 -
 .../codehaus/groovy/ast/expr/ClassExpression.java  |    2 -
 .../groovy/ast/expr/ClosureExpression.java         |    3 -
 .../groovy/ast/expr/ClosureListExpression.java     |    3 -
 .../groovy/ast/expr/ConstantExpression.java        |    2 -
 .../groovy/ast/expr/ConstructorCallExpression.java |    3 -
 .../groovy/ast/expr/DeclarationExpression.java     |    3 -
 .../groovy/ast/expr/ElvisOperatorExpression.java   |    1 -
 .../codehaus/groovy/ast/expr/EmptyExpression.java  |   79 +-
 .../org/codehaus/groovy/ast/expr/Expression.java   |    2 -
 .../groovy/ast/expr/ExpressionTransformer.java     |    2 -
 .../codehaus/groovy/ast/expr/FieldExpression.java  |    2 -
 .../groovy/ast/expr/GStringExpression.java         |    2 -
 .../codehaus/groovy/ast/expr/ListExpression.java   |    2 -
 .../groovy/ast/expr/MapEntryExpression.java        |    2 -
 .../codehaus/groovy/ast/expr/MapExpression.java    |    2 -
 .../org/codehaus/groovy/ast/expr/MethodCall.java   |    1 -
 .../groovy/ast/expr/MethodCallExpression.java      |    2 -
 .../ast/expr/NamedArgumentListExpression.java      |    2 -
 .../codehaus/groovy/ast/expr/NotExpression.java    |    3 -
 .../groovy/ast/expr/PostfixExpression.java         |    2 -
 .../codehaus/groovy/ast/expr/PrefixExpression.java |    2 -
 .../groovy/ast/expr/PropertyExpression.java        |    2 -
 .../codehaus/groovy/ast/expr/RangeExpression.java  |    2 -
 .../ast/expr/StaticMethodCallExpression.java       |    2 -
 .../groovy/ast/expr/TernaryExpression.java         |    2 -
 .../codehaus/groovy/ast/expr/TupleExpression.java  |    2 -
 .../groovy/ast/expr/UnaryMinusExpression.java      |    3 -
 .../groovy/ast/expr/UnaryPlusExpression.java       |    3 -
 .../groovy/ast/expr/VariableExpression.java        |    2 -
 .../codehaus/groovy/ast/stmt/AssertStatement.java  |    2 -
 .../codehaus/groovy/ast/stmt/BlockStatement.java   |    2 -
 .../codehaus/groovy/ast/stmt/BreakStatement.java   |    3 -
 .../codehaus/groovy/ast/stmt/CaseStatement.java    |    2 -
 .../codehaus/groovy/ast/stmt/CatchStatement.java   |    2 -
 .../groovy/ast/stmt/ContinueStatement.java         |    2 -
 .../codehaus/groovy/ast/stmt/DoWhileStatement.java |    2 -
 .../codehaus/groovy/ast/stmt/EmptyStatement.java   |    2 -
 .../groovy/ast/stmt/ExpressionStatement.java       |    2 -
 .../org/codehaus/groovy/ast/stmt/ForStatement.java |    2 -
 .../org/codehaus/groovy/ast/stmt/IfStatement.java  |    2 -
 .../codehaus/groovy/ast/stmt/LoopingStatement.java |    4 +-
 .../codehaus/groovy/ast/stmt/ReturnStatement.java  |    2 -
 .../org/codehaus/groovy/ast/stmt/Statement.java    |    2 -
 .../codehaus/groovy/ast/stmt/SwitchStatement.java  |    2 -
 .../groovy/ast/stmt/SynchronizedStatement.java     |    2 -
 .../codehaus/groovy/ast/stmt/ThrowStatement.java   |    2 -
 .../groovy/ast/stmt/TryCatchStatement.java         |    2 -
 .../codehaus/groovy/ast/stmt/WhileStatement.java   |    2 -
 .../groovy/ast/tools/WideningCategories.java       |    3 -
 .../groovy/classgen/BytecodeExpression.java        |    2 -
 .../groovy/classgen/BytecodeInstruction.java       |   62 +-
 .../codehaus/groovy/classgen/ClassGenerator.java   |    3 -
 .../groovy/classgen/ClassGeneratorException.java   |    2 -
 .../groovy/classgen/DummyClassGenerator.java       |    3 -
 .../codehaus/groovy/classgen/GeneratorContext.java |    2 -
 .../groovy/classgen/VerifierCodeVisitor.java       |    2 -
 .../classgen/asm/BinaryDoubleExpressionHelper.java |    3 -
 .../classgen/asm/BinaryExpressionWriter.java       |    1 -
 .../classgen/asm/BinaryFloatExpressionHelper.java  |    3 -
 .../classgen/asm/BinaryLongExpressionHelper.java   |    3 -
 .../classgen/asm/BinaryObjectExpressionHelper.java |    3 -
 .../groovy/classgen/asm/BytecodeDumper.java        |    1 -
 .../groovy/classgen/asm/BytecodeHelper.java        |    4 -
 .../groovy/classgen/asm/BytecodeVariable.java      |    3 -
 .../codehaus/groovy/classgen/asm/CompileStack.java |    1 -
 .../groovy/classgen/asm/DelegatingController.java  |    1 -
 .../classgen/asm/ExpressionAsVariableSlot.java     |    1 -
 .../codehaus/groovy/classgen/asm/MethodCaller.java |    2 -
 .../classgen/asm/StatementMetaTypeChooser.java     |    3 -
 .../codehaus/groovy/classgen/asm/TypeChooser.java  |    2 -
 .../groovy/classgen/asm/UnaryExpressionHelper.java |    2 -
 .../classgen/asm/WriterControllerFactory.java      |    1 -
 .../classgen/asm/indy/IndyCallSiteWriter.java      |    1 -
 .../classgen/asm/indy/InvokeDynamicWriter.java     |    2 -
 .../sc/IndyStaticTypesMultiTypeDispatcher.java     |    2 +-
 .../asm/sc/StaticCompilationMopWriter.java         |    1 -
 .../asm/sc/StaticPropertyAccessHelper.java         |    1 -
 ...icTypesBinaryExpressionMultiTypeDispatcher.java |    3 -
 .../classgen/asm/sc/StaticTypesCallSiteWriter.java |    2 -
 .../classgen/asm/sc/StaticTypesClosureWriter.java  |    2 -
 .../asm/sc/StaticTypesStatementWriter.java         |    1 -
 .../classgen/asm/sc/StaticTypesTypeChooser.java    |    2 -
 .../asm/sc/StaticTypesUnaryExpressionHelper.java   |    2 -
 .../asm/sc/StaticTypesWriterController.java        |    2 -
 .../sc/StaticTypesWriterControllerFactoryImpl.java |    3 -
 .../groovy/control/ASTTransformationsContext.java  |    2 -
 .../codehaus/groovy/control/ClassNodeResolver.java |    3 -
 .../groovy/control/CompilationFailedException.java |    3 -
 .../codehaus/groovy/control/CompilationUnit.java   |    4 -
 .../org/codehaus/groovy/control/CompilePhase.java  |  234 ++--
 .../org/codehaus/groovy/control/HasCleanup.java    |   10 +-
 .../java/org/codehaus/groovy/control/Janitor.java  |   35 +-
 .../org/codehaus/groovy/control/LabelVerifier.java |    2 -
 .../java/org/codehaus/groovy/control/Phases.java   |   69 +-
 .../codehaus/groovy/control/ProcessingUnit.java    |   17 +-
 .../org/codehaus/groovy/control/SourceUnit.java    |   21 +-
 .../codehaus/groovy/control/StaticVerifier.java    |  407 +++---
 .../control/customizers/CompilationCustomizer.java |    3 -
 .../control/customizers/DelegatingCustomizer.java  |    1 -
 .../control/customizers/ImportCustomizer.java      |    3 -
 .../control/customizers/SecureASTCustomizer.java   |    3 -
 .../control/customizers/SourceAwareCustomizer.java |    1 -
 .../customizers/builder/CustomizersFactory.java    |    1 -
 .../builder/ImportCustomizerFactory.java           |    1 -
 .../builder/InlinedASTCustomizerFactory.java       |    1 -
 .../customizers/builder/PostCompletionFactory.java |    1 -
 .../builder/SecureASTCustomizerFactory.java        |    1 -
 .../builder/SourceAwareCustomizerFactory.java      |    2 -
 .../groovy/control/io/AbstractReaderSource.java    |    3 -
 .../groovy/control/io/FileReaderSource.java        |    2 -
 .../groovy/control/io/InputStreamReaderSource.java |    2 -
 .../org/codehaus/groovy/control/io/NullWriter.java |    2 -
 .../codehaus/groovy/control/io/ReaderSource.java   |    2 -
 .../groovy/control/io/StringReaderSource.java      |    3 -
 .../groovy/control/io/URLReaderSource.java         |    2 -
 .../groovy/control/messages/ExceptionMessage.java  |   59 +-
 .../groovy/control/messages/LocatedMessage.java    |   51 +-
 .../codehaus/groovy/control/messages/Message.java  |   97 +-
 .../groovy/control/messages/SimpleMessage.java     |   55 +-
 .../control/messages/SyntaxErrorMessage.java       |    7 +-
 .../groovy/control/messages/WarningMessage.java    |  121 +-
 .../codehaus/groovy/reflection/CachedClass.java    |    3 -
 .../groovy/reflection/CachedConstructor.java       |    3 -
 .../codehaus/groovy/reflection/CachedMethod.java   |  685 +++++-----
 .../org/codehaus/groovy/reflection/ClassInfo.java  |    2 -
 .../reflection/stdclasses/ArrayCachedClass.java    |    3 -
 .../stdclasses/BigDecimalCachedClass.java          |    3 -
 .../stdclasses/BigIntegerCachedClass.java          |    3 -
 .../reflection/stdclasses/BooleanCachedClass.java  |    3 -
 .../reflection/stdclasses/ByteCachedClass.java     |    3 -
 .../stdclasses/CharacterCachedClass.java           |    3 -
 .../reflection/stdclasses/DoubleCachedClass.java   |    3 -
 .../reflection/stdclasses/FloatCachedClass.java    |    3 -
 .../reflection/stdclasses/IntegerCachedClass.java  |    3 -
 .../reflection/stdclasses/LongCachedClass.java     |    3 -
 .../reflection/stdclasses/NumberCachedClass.java   |    3 -
 .../reflection/stdclasses/ObjectCachedClass.java   |    3 -
 .../reflection/stdclasses/ShortCachedClass.java    |    3 -
 .../reflection/stdclasses/StringCachedClass.java   |    3 -
 .../groovy/runtime/AbstractComparator.java         |    3 -
 .../groovy/runtime/BytecodeInterface8.java         |    1 -
 .../groovy/runtime/DefaultCachedMethodKey.java     |    2 -
 .../codehaus/groovy/runtime/DefaultMethodKey.java  |    2 -
 .../groovy/runtime/FlushingStreamWriter.java       |    2 -
 .../codehaus/groovy/runtime/GeneratedClosure.java  |   57 +-
 .../codehaus/groovy/runtime/MetaClassHelper.java   |    4 -
 .../org/codehaus/groovy/runtime/MethodKey.java     |    2 -
 .../codehaus/groovy/runtime/MethodRankHelper.java  |    2 -
 .../groovy/runtime/ReflectionMethodInvoker.java    |    2 -
 .../org/codehaus/groovy/runtime/Reflector.java     |    2 -
 .../groovy/runtime/ResourceGroovyMethods.java      |  211 ++-
 .../groovy/runtime/ReverseListIterator.java        |    2 -
 .../groovy/runtime/ScriptBytecodeAdapter.java      |    2 -
 .../codehaus/groovy/runtime/StackTraceUtils.java   |  389 +++---
 .../groovy/runtime/StringBufferWriter.java         |    2 -
 .../runtime/callsite/BooleanClosureWrapper.java    |    1 -
 .../callsite/BooleanReturningMethodInvoker.java    |    2 -
 .../callsite/ConstructorMetaMethodSite.java        |    2 -
 .../runtime/callsite/MetaClassConstructorSite.java |    2 -
 .../groovy/runtime/callsite/MetaClassSite.java     |    2 -
 .../groovy/runtime/callsite/MetaMethodSite.java    |    2 -
 .../runtime/callsite/PogoInterceptableSite.java    |    2 -
 .../groovy/runtime/callsite/PogoMetaClassSite.java |    4 -
 .../groovy/runtime/callsite/PojoMetaClassSite.java |    2 -
 .../runtime/callsite/PojoMetaMethodSite.java       |    2 -
 .../runtime/callsite/StaticMetaClassSite.java      |    2 -
 .../runtime/callsite/StaticMetaMethodSite.java     |    2 -
 .../groovy/runtime/m12n/ExtensionModule.java       |    2 -
 .../runtime/m12n/ExtensionModuleRegistry.java      |    1 -
 .../runtime/m12n/MetaInfExtensionModule.java       |    2 -
 .../runtime/m12n/PropertiesModuleFactory.java      |    2 -
 .../groovy/runtime/m12n/SimpleExtensionModule.java |    1 -
 .../groovy/runtime/metaclass/ClosureMetaClass.java | 1425 ++++++++++----------
 .../runtime/metaclass/ClosureMetaMethod.java       |    1 -
 .../runtime/metaclass/ClosureStaticMetaMethod.java |    1 -
 .../runtime/metaclass/DefaultMetaClassInfo.java    |    2 -
 .../groovy/runtime/metaclass/MethodHelper.java     |    2 -
 .../groovy/runtime/metaclass/MixedInMetaClass.java |    4 -
 .../runtime/metaclass/NewInstanceMetaMethod.java   |    2 -
 .../runtime/metaclass/NewStaticMetaMethod.java     |    2 -
 .../groovy/runtime/metaclass/OwnedMetaClass.java   |    3 -
 .../groovy/runtime/metaclass/ReflectorLoader.java  |    2 -
 .../runtime/metaclass/TemporaryMethodKey.java      |    2 -
 .../metaclass/ThreadManagedMetaBeanProperty.java   |    4 -
 .../runtime/metaclass/TransformMetaMethod.java     |    3 -
 .../runtime/powerassert/AssertionRenderer.java     |    2 -
 .../groovy/runtime/powerassert/SourceText.java     |    2 -
 .../SourceTextNotAvailableException.java           |    2 -
 .../codehaus/groovy/runtime/powerassert/Value.java |    2 -
 .../groovy/runtime/powerassert/ValueRecorder.java  |    2 -
 .../runtime/typehandling/BigDecimalMath.java       |    2 -
 .../runtime/typehandling/BigIntegerMath.java       |    2 -
 .../runtime/typehandling/FloatingPointMath.java    |    2 -
 .../groovy/runtime/typehandling/IntegerMath.java   |    2 -
 .../groovy/runtime/typehandling/LongMath.java      |    2 -
 .../groovy/runtime/wrappers/BooleanWrapper.java    |    3 -
 .../groovy/runtime/wrappers/ByteWrapper.java       |    3 -
 .../groovy/runtime/wrappers/CharWrapper.java       |    3 -
 .../groovy/runtime/wrappers/DoubleWrapper.java     |    3 -
 .../groovy/runtime/wrappers/FloatWrapper.java      |    3 -
 .../runtime/wrappers/GroovyObjectWrapper.java      |    3 -
 .../groovy/runtime/wrappers/IntWrapper.java        |    3 -
 .../groovy/runtime/wrappers/LongWrapper.java       |    3 -
 .../groovy/runtime/wrappers/PojoWrapper.java       |    3 -
 .../groovy/runtime/wrappers/ShortWrapper.java      |    4 -
 .../codehaus/groovy/runtime/wrappers/Wrapper.java  |    7 +-
 .../java/org/codehaus/groovy/syntax/ASTHelper.java |    6 -
 .../java/org/codehaus/groovy/syntax/CSTNode.java   |  634 ++++-----
 .../java/org/codehaus/groovy/syntax/Numbers.java   |  213 ++-
 .../java/org/codehaus/groovy/syntax/Reduction.java |  255 ++--
 .../groovy/syntax/RuntimeParserException.java      |    2 -
 .../java/org/codehaus/groovy/syntax/Token.java     |  447 +++---
 .../java/org/codehaus/groovy/syntax/Types.java     |    9 +-
 .../java/org/codehaus/groovy/tools/Compiler.java   |  105 +-
 .../org/codehaus/groovy/tools/ErrorReporter.java   |  248 ++--
 .../java/org/codehaus/groovy/tools/RootLoader.java |    2 -
 .../tools/javac/JavaAwareCompilationUnit.java      |    2 -
 .../codehaus/groovy/tools/javac/JavaCompiler.java  |    3 -
 .../tools/javac/JavaStubCompilationUnit.java       |    3 -
 .../java/org/codehaus/groovy/tools/shell/IO.java   |    2 -
 .../codehaus/groovy/tools/shell/util/Logger.java   |    2 -
 .../groovy/tools/shell/util/MessageSource.java     |    2 -
 .../groovy/tools/shell/util/Preferences.java       |    2 -
 .../groovy/transform/ASTTransformation.java        |   99 +-
 .../ASTTransformationCollectorCodeVisitor.java     |    4 -
 .../groovy/transform/ASTTransformationVisitor.java |    2 -
 .../AbstractInterruptibleASTTransformation.java    |    3 -
 .../transform/AnnotationCollectorTransform.java    |    2 -
 .../transform/AutoCloneASTTransformation.java      |  612 +++++----
 .../transform/BaseScriptASTTransformation.java     |  333 +++--
 .../transform/CategoryASTTransformation.java       |  590 ++++----
 .../groovy/transform/GroovyASTTransformation.java  |  103 +-
 .../transform/GroovyASTTransformationClass.java    |   91 +-
 .../InheritConstructorsASTTransformation.java      |    2 -
 .../transform/PackageScopeASTTransformation.java   |    2 -
 .../transform/SingletonASTTransformation.java      |  271 ++--
 .../transform/SourceURIASTTransformation.java      |    5 -
 .../transform/StaticTypesTransformation.java       |    4 -
 .../transform/SynchronizedASTTransformation.java   |    2 -
 .../transform/sc/ListOfExpressionsExpression.java  |    2 -
 .../sc/StaticCompilationMetadataKeys.java          |    2 -
 .../transform/sc/StaticCompilationVisitor.java     |    2 -
 .../transform/sc/StaticCompileTransformation.java  |    2 -
 .../transform/sc/TemporaryVariableExpression.java  |    1 -
 .../sc/transformers/CompareIdentityExpression.java |    2 -
 .../transformers/RangeExpressionTransformer.java   |    2 -
 .../transformers/StaticCompilationTransformer.java |    2 -
 .../VariableExpressionTransformer.java             |    1 -
 .../stc/AbstractTypeCheckingExtension.java         |    1 -
 .../stc/DefaultTypeCheckingExtension.java          |    1 -
 .../groovy/transform/stc/DelegationMetadata.java   |    2 -
 .../groovy/transform/stc/ExtensionMethodNode.java  |    2 -
 .../stc/GroovyTypeCheckingExtensionSupport.java    |    1 -
 .../transform/stc/PropertyLookupVisitor.java       |    2 -
 .../groovy/transform/stc/SecondPassExpression.java |    2 -
 .../groovy/transform/stc/SignatureCodec.java       |    2 -
 .../transform/stc/SignatureCodecVersion1.java      |    2 -
 .../transform/stc/TypeCheckingExtension.java       |    1 -
 .../transform/trait/NAryOperationRewriter.java     |    2 -
 .../transform/trait/SuperCallTraitTransformer.java |    1 -
 .../transform/trait/TraitASTTransformation.java    |    2 -
 .../groovy/transform/trait/TraitComposer.java      |    1 -
 .../codehaus/groovy/transform/trait/Traits.java    |    1 -
 .../groovy/util/IteratorBufferedIterator.java      |    1 -
 .../codehaus/groovy/util/ListBufferedIterator.java |    1 -
 .../java/org/codehaus/groovy/util/ListHashMap.java |    2 -
 .../groovy/util/ManagedConcurrentValueMap.java     |    1 -
 .../codehaus/groovy/util/ManagedLinkedList.java    |    1 -
 .../org/codehaus/groovy/util/ManagedReference.java |    6 -
 .../java/org/codehaus/groovy/util/ReleaseInfo.java |  158 ++-
 .../org/codehaus/groovy/vmplugin/v6/Java6.java     |   66 +-
 .../groovy/vmplugin/v7/IndyArrayAccess.java        |    2 +-
 .../v7/IndyGuardsFiltersAndSignatures.java         |    1 -
 .../codehaus/groovy/vmplugin/v7/IndyInterface.java |    3 -
 .../org/codehaus/groovy/vmplugin/v7/IndyMath.java  |    1 -
 .../org/codehaus/groovy/vmplugin/v7/Selector.java  |    1 -
 .../codehaus/groovy/vmplugin/v7/TypeHelper.java    |    1 -
 .../groovy/vmplugin/v7/TypeTransformers.java       |    1 -
 .../org/codehaus/groovy/tck/BatchGenerate.groovy   |   57 +-
 .../org/codehaus/groovy/tck/GenerateTestCases.java |    5 -
 .../org/codehaus/groovy/tck/TestGenerator.groovy   |    7 +-
 src/test/groovy/lang/MetaClassTest.java            |    3 -
 src/test/groovy/lang/MockWriter.java               |    2 -
 src/test/groovy/lang/ScriptIntegerDivideTest.java  |    5 -
 src/test/groovy/lang/ScriptPrintTest.java          |    3 -
 src/test/groovy/lang/ScriptTest.java               |    3 -
 src/test/groovy/lang/SequenceTest.java             |    2 -
 src/test/groovy/lang/TupleTest.java                |    3 -
 .../gcldeadlock/GroovyClassLoaderDeadlockTest.java |    2 -
 .../mock/interceptor/MockCallSequenceTest.groovy   |    5 +-
 src/test/groovy/security/SecurityTest.java         |    2 -
 src/test/groovy/security/SecurityTestSupport.java  |    3 -
 src/test/groovy/tree/NodePrinterTest.java          |    3 -
 src/test/groovy/txn/TransactionBean.java           |    3 -
 src/test/groovy/txn/TransactionBuilder.java        |    3 -
 src/test/groovy/util/EvalTest.java                 |    2 -
 .../util/GroovyScriptEngineReloadingTest.groovy    |   77 +-
 .../groovy/antlr/AnnotationSourceParsingTest.java  |   88 +-
 .../groovy/antlr/EnumSourceParsingTest.java        |  256 ++--
 .../codehaus/groovy/antlr/SourceBufferTest.java    |    3 -
 .../groovy/antlr/treewalker/LineColumnChecker.java |    2 -
 .../groovy/antlr/treewalker/LineColumnTest.java    |    2 -
 .../groovy/antlr/treewalker/SourcePrinterTest.java |    2 -
 .../antlr/treewalker/UnimplementedSyntaxTest.java  |    2 -
 src/test/org/codehaus/groovy/ast/ASTTest.java      |   88 +-
 .../org/codehaus/groovy/ast/ClassNodeTest.java     |    2 -
 .../groovy/ast/MethodCallExpressionTest.java       |  175 ++-
 .../org/codehaus/groovy/ast/ModuleNodeTest.java    |    2 -
 .../groovy/ast/VariableExpressionTest.java         |  170 ++-
 .../groovy/ast/decompiled/AsmDecompilerTest.groovy |   18 +-
 .../IncrementalRecompilationWithStubsTest.groovy   |    6 +-
 .../groovy/ast/expr/ClosureExpressionTest.groovy   |    4 -
 .../ast/expr/MethodCallExpressionTest.groovy       |    4 -
 .../groovy/ast/expr/PropertyExpressionTest.groovy  |    4 -
 .../groovy/classgen/BytecodeHelperTest.groovy      |    3 -
 .../classgen/CallClosureFieldAsMethodTest.groovy   |   25 +-
 .../codehaus/groovy/classgen/CapitalizeTest.java   |    3 -
 .../classgen/ClassCompletionVerifierTest.java      |    3 -
 .../codehaus/groovy/classgen/ConstructorTest.java  |    3 -
 .../org/codehaus/groovy/classgen/DerivedBean.java  |    2 -
 .../codehaus/groovy/classgen/DummyReflector.java   |    2 -
 .../groovy/classgen/DumpingClassLoader.java        |    2 -
 src/test/org/codehaus/groovy/classgen/ForTest.java |    4 -
 .../org/codehaus/groovy/classgen/GStringTest.java  |    3 -
 .../codehaus/groovy/classgen/GetPropertyTest.java  |    2 -
 .../groovy/classgen/GroovyClassLoaderTest.java     |    2 -
 .../org/codehaus/groovy/classgen/IfElseTest.java   |    3 -
 .../org/codehaus/groovy/classgen/MainTest.java     |    3 -
 .../org/codehaus/groovy/classgen/MethodTest.java   |    3 -
 .../org/codehaus/groovy/classgen/PropertyTest.java |    3 -
 .../org/codehaus/groovy/classgen/RunBugsTest.java  |    2 -
 .../codehaus/groovy/classgen/RunClosureTest.java   |    3 -
 .../codehaus/groovy/classgen/RunGroovyTest.java    |    2 -
 .../org/codehaus/groovy/classgen/SimpleBean.java   |    2 -
 .../org/codehaus/groovy/classgen/TestSupport.java  |    2 -
 .../codehaus/groovy/classgen/TupleListTest.java    |    3 -
 .../classgen/asm/AbstractBytecodeTestCase.groovy   |   23 +-
 .../classgen/asm/BinaryOperationsTest.groovy       |    3 -
 .../classgen/asm/DirectMethodCallTest.groovy       |    3 -
 .../groovy/classgen/asm/HotSwapTest.groovy         |    3 -
 .../asm/InstructionSequenceHelperClassTest.groovy  |    2 -
 .../groovy/classgen/asm/MethodPatternsTest.groovy  |    4 +-
 .../classgen/asm/sc/BugsStaticCompileTest.groovy   |   18 +-
 .../control/io/AbstractReaderSourceTest.java       |  186 ++-
 .../runtime/DefaultGroovyMethodsSupportTest.groovy |  341 +++--
 .../groovy/runtime/DirectoryDeleteTest.groovy      |  114 +-
 .../org/codehaus/groovy/runtime/DummyBean.java     |    3 -
 .../runtime/FileStaticGroovyMethodsTest.groovy     |    3 -
 .../runtime/InheritedInterfaceMethodTest.java      |    3 -
 .../groovy/runtime/InvokeConstructorTest.java      |    2 -
 .../groovy/runtime/InvokeGroovyMethodTest.java     |    2 -
 .../codehaus/groovy/runtime/InvokeMethodTest.java  |    2 -
 .../org/codehaus/groovy/runtime/InvokerTest.java   |    2 -
 .../codehaus/groovy/runtime/MethodFailureTest.java |    2 -
 .../org/codehaus/groovy/runtime/MethodKeyTest.java |    3 -
 .../groovy/runtime/MethodRankHelperTest.java       |  191 +--
 .../codehaus/groovy/runtime/MockGroovyObject.java  |    2 -
 .../groovy/runtime/NewStaticMetaMethodTest.java    |    3 -
 .../org/codehaus/groovy/runtime/PropertyTest.java  |    2 -
 .../groovy/runtime/StringGroovyMethodsTest.java    |    5 -
 .../org/codehaus/groovy/runtime/TupleListTest.java |    4 -
 .../CacheCleanupCollectedSoftReferencesTest.groovy |    5 +-
 .../groovy/syntax/parser/TestParserSupport.java    |    2 -
 .../org/codehaus/groovy/tools/CompilerTest.java    |    2 -
 .../groovy/tools/FileSystemCompilerTest.java       |    2 -
 .../ClassImplementingANonPublicInterface.java      |    2 -
 .../groovy/transform/NonPublicInterface.java       |    2 -
 .../transform/SingletonASTTransformationTest.java  |    2 -
 .../tailrec/RecursivenessTesterTest.groovy         |   42 +-
 .../tailrec/ReturnAdderForClosuresTest.groovy      |    5 +-
 .../ReturnStatementToIterationConverterTest.groovy |   11 +-
 .../transform/tailrec/StatementReplacerTest.groovy |   25 +-
 .../TailRecursiveCompilationFailuresTest.groovy    |    4 -
 .../transform/tailrec/TailRecursiveExamples.groovy |    4 -
 .../TailRecursiveTogetherWithOtherASTsTest.groovy  |    4 +-
 .../tailrec/TailRecursiveTransformationTest.groovy |    3 -
 .../TernaryToIfStatementConverterTest.groovy       |    5 +-
 .../tailrec/VariableExpressionReplacerTest.groovy  |   57 +-
 .../groovy-sql/src/main/java/groovy/sql/Sql.java   |   42 +-
 522 files changed, 5455 insertions(+), 7192 deletions(-)


[groovy] 05/06: Trivial refactoring: handle `Sql` with try-with-resources for simplicity (closes #861)

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

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

commit 9692fda75dc714d543a26cddf225f59b9c3e0e05
Author: Daniel Sun <su...@apache.org>
AuthorDate: Sun Jan 27 01:08:18 2019 +0800

    Trivial refactoring: handle `Sql` with try-with-resources for simplicity (closes #861)
---
 .../groovy-sql/src/main/java/groovy/sql/Sql.java   | 42 ++++------------------
 1 file changed, 7 insertions(+), 35 deletions(-)

diff --git a/subprojects/groovy-sql/src/main/java/groovy/sql/Sql.java b/subprojects/groovy-sql/src/main/java/groovy/sql/Sql.java
index 513bc0e..8378288 100644
--- a/subprojects/groovy-sql/src/main/java/groovy/sql/Sql.java
+++ b/subprojects/groovy-sql/src/main/java/groovy/sql/Sql.java
@@ -294,12 +294,8 @@ public class Sql implements AutoCloseable {
      * @throws SQLException if a database access error occurs
      */
     public static void withInstance(String url, Closure c) throws SQLException {
-        Sql sql = null;
-        try {
-            sql = newInstance(url);
+        try (Sql sql = newInstance(url)) {
             c.call(sql);
-        } finally {
-            if (sql != null) sql.close();
         }
     }
 
@@ -334,12 +330,8 @@ public class Sql implements AutoCloseable {
      * @throws SQLException if a database access error occurs
      */
     public static void withInstance(String url, Properties properties, Closure c) throws SQLException {
-        Sql sql = null;
-        try {
-            sql = newInstance(url, properties);
+        try (Sql sql = newInstance(url, properties)) {
             c.call(sql);
-        } finally {
-            if (sql != null) sql.close();
         }
     }
 
@@ -380,12 +372,8 @@ public class Sql implements AutoCloseable {
      */
     public static void withInstance(String url, Properties properties, String driverClassName, Closure c)
             throws SQLException, ClassNotFoundException {
-        Sql sql = null;
-        try {
-            sql = newInstance(url, properties, driverClassName);
+        try (Sql sql = newInstance(url, properties, driverClassName)) {
             c.call(sql);
-        } finally {
-            if (sql != null) sql.close();
         }
     }
 
@@ -420,12 +408,8 @@ public class Sql implements AutoCloseable {
      * @throws SQLException if a database access error occurs
      */
     public static void withInstance(String url, String user, String password, Closure c) throws SQLException {
-        Sql sql = null;
-        try {
-            sql = newInstance(url, user, password);
+        try (Sql sql = newInstance(url, user, password)) {
             c.call(sql);
-        } finally {
-            if (sql != null) sql.close();
         }
     }
 
@@ -466,12 +450,8 @@ public class Sql implements AutoCloseable {
      */
     public static void withInstance(String url, String user, String password, String driverClassName, Closure c)
             throws SQLException, ClassNotFoundException {
-        Sql sql = null;
-        try {
-            sql = newInstance(url, user, password, driverClassName);
+        try (Sql sql = newInstance(url, user, password, driverClassName)) {
             c.call(sql);
-        } finally {
-            if (sql != null) sql.close();
         }
     }
 
@@ -505,12 +485,8 @@ public class Sql implements AutoCloseable {
      */
     public static void withInstance(String url, String driverClassName, Closure c)
             throws SQLException, ClassNotFoundException {
-        Sql sql = null;
-        try {
-            sql = newInstance(url, driverClassName);
+        try (Sql sql = newInstance(url, driverClassName)) {
             c.call(sql);
-        } finally {
-            if (sql != null) sql.close();
         }
     }
 
@@ -622,12 +598,8 @@ public class Sql implements AutoCloseable {
      * @throws ClassNotFoundException if the driver class cannot be found or loaded
      */
     public static void withInstance(Map<String, Object> args, Closure c) throws SQLException, ClassNotFoundException {
-        Sql sql = null;
-        try {
-            sql = newInstance(args);
+        try (Sql sql = newInstance(args)) {
             c.call(sql);
-        } finally {
-            if (sql != null) sql.close();
         }
     }
 


[groovy] 04/06: whitespace/formatting plus cleanup/remove @author tags as per Apache recommended practices cont'd

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

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

commit 3b3ad67c5ce1550c9e2bc8a91ad3e73e71b33073
Author: Paul King <pa...@asert.com.au>
AuthorDate: Fri Feb 1 16:46:05 2019 +1000

    whitespace/formatting plus cleanup/remove @author tags as per Apache recommended practices cont'd
---
 gradle/pomconfigurer.gradle                        |   39 +
 .../groovy/groovy/lang/GroovyResourceLoader.java   |    2 -
 src/main/groovy/groovy/lang/MapWithDefault.java    |    1 -
 .../groovy/lang/MetaArrayLengthProperty.java       |    2 -
 src/main/groovy/groovy/lang/MetaClass.java         |    3 -
 src/main/groovy/groovy/lang/MetaClassRegistry.java |    5 -
 .../groovy/lang/MetaClassRegistryChangeEvent.java  |    2 -
 .../lang/MetaClassRegistryChangeEventListener.java |    2 -
 .../groovy/groovy/lang/MetaExpandoProperty.java    |    2 -
 src/main/groovy/groovy/lang/MetaMethod.java        |    3 -
 .../groovy/groovy/lang/MetaObjectProtocol.java     |    2 -
 src/main/groovy/groovy/lang/MetaProperty.java      |    2 -
 .../groovy/groovy/lang/MissingClassException.java  |    2 -
 .../groovy/groovy/lang/MissingFieldException.java  |    2 -
 src/main/groovy/groovy/lang/Mixin.java             |    2 -
 src/main/groovy/groovy/lang/MutableMetaClass.java  |    1 -
 src/main/groovy/groovy/lang/ParameterArray.java    |    2 -
 .../groovy/lang/PropertyAccessInterceptor.java     |    1 -
 src/main/groovy/groovy/lang/ProxyMetaClass.java    |    2 -
 .../groovy/lang/ReadOnlyPropertyException.java     |    2 -
 src/main/groovy/groovy/lang/Reference.java         |    2 -
 src/main/groovy/groovy/lang/Script.java            |    3 -
 src/main/groovy/groovy/lang/Singleton.java         |    3 -
 .../groovy/lang/StringWriterIOException.java       |    2 -
 src/main/groovy/groovy/lang/TrampolineClosure.java |    2 -
 src/main/groovy/groovy/lang/Tuple.java             |    2 -
 src/main/groovy/groovy/lang/Writable.java          |    2 -
 .../security/GroovyCodeSourcePermission.java       |    2 -
 src/main/groovy/groovy/time/BaseDuration.java      |    1 -
 .../groovy/groovy/time/DatumDependentDuration.java |    2 -
 src/main/groovy/groovy/time/Duration.java          |    2 -
 .../groovy/time/TimeDatumDependentDuration.java    |    2 -
 src/main/groovy/groovy/time/TimeDuration.java      |    2 -
 .../groovy/transform/builder/SimpleStrategy.java   |    2 -
 .../groovy/transform/stc/ClosureSignatureHint.java |    1 -
 .../groovy/groovy/transform/stc/FirstParam.java    |    4 -
 .../transform/stc/FromAbstractTypeMethods.java     |    1 -
 .../groovy/groovy/transform/stc/FromString.java    |    1 -
 .../groovy/transform/stc/PickAnyArgumentHint.java  |    1 -
 .../groovy/groovy/transform/stc/SecondParam.java   |    4 -
 .../transform/stc/SingleSignatureClosureHint.java  |    1 -
 .../groovy/groovy/transform/stc/ThirdParam.java    |    4 -
 src/main/groovy/groovy/ui/GroovySocketServer.java  |    2 -
 src/main/groovy/groovy/util/AbstractFactory.java   |    4 -
 src/main/groovy/groovy/util/BufferedIterator.java  |    1 -
 src/main/groovy/groovy/util/BuilderSupport.java    |    5 +-
 src/main/groovy/groovy/util/CharsetToolkit.java    |    2 -
 src/main/groovy/groovy/util/ClosureComparator.java |    2 -
 src/main/groovy/groovy/util/ConfigObject.java      |    2 -
 src/main/groovy/groovy/util/DelegatingScript.java  |    2 -
 src/main/groovy/groovy/util/Eval.java              |    1 -
 src/main/groovy/groovy/util/Expando.java           |    4 -
 src/main/groovy/groovy/util/Factory.java           |    4 -
 .../groovy/groovy/util/FactoryBuilderSupport.java  |    4 -
 src/main/groovy/groovy/util/GroovyCollections.java |    3 -
 .../groovy/groovy/util/GroovyScriptEngine.java     |    6 -
 src/main/groovy/groovy/util/IndentPrinter.java     |    2 -
 src/main/groovy/groovy/util/MapEntry.java          |    2 -
 src/main/groovy/groovy/util/Node.java              |    3 -
 src/main/groovy/groovy/util/NodeBuilder.java       |    2 -
 src/main/groovy/groovy/util/NodePrinter.java       |    3 -
 .../groovy/groovy/util/ObjectGraphBuilder.java     |    3 -
 src/main/groovy/groovy/util/OrderBy.java           |    2 -
 src/main/groovy/groovy/util/Proxy.java             |    3 -
 src/main/groovy/groovy/util/ProxyGenerator.java    |    4 -
 src/main/groovy/groovy/util/ResourceConnector.java |    2 -
 src/main/groovy/groovy/util/ResourceException.java |    3 -
 src/main/groovy/groovy/util/ScriptException.java   |    3 -
 .../groovy/tools/ast/TransformTestHelper.groovy    |   58 +-
 .../tailrec/ReturnAdderForClosures.groovy          |    4 +-
 .../ReturnStatementToIterationConverter.groovy     |    6 +-
 .../transform/tailrec/StatementReplacer.groovy     |   14 +-
 .../tailrec/TailRecursiveASTTransformation.groovy  |   24 +-
 .../tailrec/TernaryToIfStatementConverter.groovy   |    2 -
 .../tailrec/VariableAccessReplacer.groovy          |    2 -
 .../tailrec/VariableExpressionReplacer.groovy      |   44 +-
 .../tailrec/VariableExpressionTransformer.groovy   |    2 -
 .../ConcurrentLinkedHashMap.java                   |    1 -
 .../util/concurrentlinkedhashmap/EntryWeigher.java |    1 -
 .../concurrentlinkedhashmap/EvictionListener.java  |    1 -
 .../util/concurrentlinkedhashmap/LinkedDeque.java  |    1 -
 .../util/concurrentlinkedhashmap/Weigher.java      |    1 -
 .../util/concurrentlinkedhashmap/Weighers.java     |    1 -
 .../groovy/antlr/AntlrASTProcessSnippets.java      |    2 -
 .../codehaus/groovy/antlr/AntlrASTProcessor.java   |    2 -
 .../codehaus/groovy/antlr/AntlrParserPlugin.java   |    2 -
 .../codehaus/groovy/antlr/GroovySourceToken.java   |    2 -
 .../java/org/codehaus/groovy/antlr/LineColumn.java |    2 -
 .../org/codehaus/groovy/antlr/SourceBuffer.java    |    2 -
 .../groovy/antlr/UnicodeLexerSharedInputState.java |    1 -
 .../groovy/antlr/treewalker/CompositeVisitor.java  |    2 -
 .../antlr/treewalker/FlatNodeListTraversal.java    |    2 -
 .../groovy/antlr/treewalker/MindMapPrinter.java    |    2 -
 .../groovy/antlr/treewalker/NodeAsHTMLPrinter.java |    3 -
 .../groovy/antlr/treewalker/NodeCollector.java     |    3 -
 .../groovy/antlr/treewalker/NodePrinter.java       |    3 -
 .../groovy/antlr/treewalker/PreOrderTraversal.java |    2 -
 .../antlr/treewalker/SourceCodeTraversal.java      |    2 -
 .../groovy/antlr/treewalker/SourcePrinter.java     |    4 -
 .../groovy/antlr/treewalker/TraversalHelper.java   |    2 -
 .../codehaus/groovy/antlr/treewalker/Visitor.java  |    3 -
 .../groovy/antlr/treewalker/VisitorAdapter.java    |    3 -
 src/main/java/org/codehaus/groovy/ast/ASTNode.java |    3 -
 .../org/codehaus/groovy/ast/AnnotatedNode.java     |    2 -
 .../org/codehaus/groovy/ast/AstToTextHelper.java   |    1 -
 .../groovy/ast/ClassCodeExpressionTransformer.java |  290 ++--
 .../codehaus/groovy/ast/CodeVisitorSupport.java    |    2 -
 .../org/codehaus/groovy/ast/ConstructorNode.java   |    2 -
 .../codehaus/groovy/ast/EnumConstantClassNode.java |   76 +-
 .../java/org/codehaus/groovy/ast/GenericsType.java |    1 -
 .../codehaus/groovy/ast/GroovyClassVisitor.java    |    2 -
 .../org/codehaus/groovy/ast/GroovyCodeVisitor.java |    3 -
 .../java/org/codehaus/groovy/ast/ImportNode.java   |    4 -
 .../org/codehaus/groovy/ast/InnerClassNode.java    |    2 -
 .../groovy/ast/InterfaceHelperClassNode.java       |  100 +-
 .../groovy/ast/MethodCallTransformation.java       |    8 +-
 .../codehaus/groovy/ast/MethodInvocationTrap.java  |   13 +-
 .../java/org/codehaus/groovy/ast/MethodNode.java   |    3 -
 .../java/org/codehaus/groovy/ast/MixinNode.java    |    2 -
 .../java/org/codehaus/groovy/ast/ModuleNode.java   |    4 -
 .../java/org/codehaus/groovy/ast/PackageNode.java  |   90 +-
 .../java/org/codehaus/groovy/ast/Parameter.java    |    2 -
 .../java/org/codehaus/groovy/ast/PropertyNode.java |    2 -
 .../java/org/codehaus/groovy/ast/Variable.java     |    2 -
 .../org/codehaus/groovy/ast/VariableScope.java     |    3 -
 .../ast/builder/AstBuilderTransformation.java      |  369 +++--
 .../groovy/ast/decompiled/Annotations.java         |    3 -
 .../ast/decompiled/AsmReferenceResolver.java       |    2 -
 .../ast/decompiled/ClassSignatureParser.java       |    3 -
 .../groovy/ast/decompiled/DecompiledClassNode.java |    1 -
 .../ast/decompiled/FormalParameterParser.java      |    3 -
 .../groovy/ast/decompiled/TypeSignatureParser.java |    3 -
 .../ast/expr/AnnotationConstantExpression.java     |   98 +-
 .../groovy/ast/expr/ArgumentListExpression.java    |    2 -
 .../codehaus/groovy/ast/expr/ArrayExpression.java  |    2 -
 .../groovy/ast/expr/AttributeExpression.java       |    3 -
 .../codehaus/groovy/ast/expr/BinaryExpression.java |    2 -
 .../groovy/ast/expr/BitwiseNegationExpression.java |    3 -
 .../groovy/ast/expr/BooleanExpression.java         |    2 -
 .../codehaus/groovy/ast/expr/CastExpression.java   |    2 -
 .../codehaus/groovy/ast/expr/ClassExpression.java  |    2 -
 .../groovy/ast/expr/ClosureExpression.java         |    3 -
 .../groovy/ast/expr/ClosureListExpression.java     |    3 -
 .../groovy/ast/expr/ConstantExpression.java        |    2 -
 .../groovy/ast/expr/ConstructorCallExpression.java |    3 -
 .../groovy/ast/expr/DeclarationExpression.java     |    3 -
 .../groovy/ast/expr/ElvisOperatorExpression.java   |    1 -
 .../codehaus/groovy/ast/expr/EmptyExpression.java  |   79 +-
 .../org/codehaus/groovy/ast/expr/Expression.java   |    2 -
 .../groovy/ast/expr/ExpressionTransformer.java     |    2 -
 .../codehaus/groovy/ast/expr/FieldExpression.java  |    2 -
 .../groovy/ast/expr/GStringExpression.java         |    2 -
 .../codehaus/groovy/ast/expr/ListExpression.java   |    2 -
 .../groovy/ast/expr/MapEntryExpression.java        |    2 -
 .../codehaus/groovy/ast/expr/MapExpression.java    |    2 -
 .../org/codehaus/groovy/ast/expr/MethodCall.java   |    1 -
 .../groovy/ast/expr/MethodCallExpression.java      |    2 -
 .../ast/expr/NamedArgumentListExpression.java      |    2 -
 .../codehaus/groovy/ast/expr/NotExpression.java    |    3 -
 .../groovy/ast/expr/PostfixExpression.java         |    2 -
 .../codehaus/groovy/ast/expr/PrefixExpression.java |    2 -
 .../groovy/ast/expr/PropertyExpression.java        |    2 -
 .../codehaus/groovy/ast/expr/RangeExpression.java  |    2 -
 .../ast/expr/StaticMethodCallExpression.java       |    2 -
 .../groovy/ast/expr/TernaryExpression.java         |    2 -
 .../codehaus/groovy/ast/expr/TupleExpression.java  |    2 -
 .../groovy/ast/expr/UnaryMinusExpression.java      |    3 -
 .../groovy/ast/expr/UnaryPlusExpression.java       |    3 -
 .../groovy/ast/expr/VariableExpression.java        |    2 -
 .../codehaus/groovy/ast/stmt/AssertStatement.java  |    2 -
 .../codehaus/groovy/ast/stmt/BlockStatement.java   |    2 -
 .../codehaus/groovy/ast/stmt/BreakStatement.java   |    3 -
 .../codehaus/groovy/ast/stmt/CaseStatement.java    |    2 -
 .../codehaus/groovy/ast/stmt/CatchStatement.java   |    2 -
 .../groovy/ast/stmt/ContinueStatement.java         |    2 -
 .../codehaus/groovy/ast/stmt/DoWhileStatement.java |    2 -
 .../codehaus/groovy/ast/stmt/EmptyStatement.java   |    2 -
 .../groovy/ast/stmt/ExpressionStatement.java       |    2 -
 .../org/codehaus/groovy/ast/stmt/ForStatement.java |    2 -
 .../org/codehaus/groovy/ast/stmt/IfStatement.java  |    2 -
 .../codehaus/groovy/ast/stmt/LoopingStatement.java |    4 +-
 .../codehaus/groovy/ast/stmt/ReturnStatement.java  |    2 -
 .../org/codehaus/groovy/ast/stmt/Statement.java    |    2 -
 .../codehaus/groovy/ast/stmt/SwitchStatement.java  |    2 -
 .../groovy/ast/stmt/SynchronizedStatement.java     |    2 -
 .../codehaus/groovy/ast/stmt/ThrowStatement.java   |    2 -
 .../groovy/ast/stmt/TryCatchStatement.java         |    2 -
 .../codehaus/groovy/ast/stmt/WhileStatement.java   |    2 -
 .../groovy/ast/tools/WideningCategories.java       |    3 -
 .../groovy/classgen/BytecodeExpression.java        |    2 -
 .../groovy/classgen/BytecodeInstruction.java       |   62 +-
 .../codehaus/groovy/classgen/ClassGenerator.java   |    3 -
 .../groovy/classgen/ClassGeneratorException.java   |    2 -
 .../groovy/classgen/DummyClassGenerator.java       |    3 -
 .../codehaus/groovy/classgen/GeneratorContext.java |    2 -
 .../groovy/classgen/VerifierCodeVisitor.java       |    2 -
 .../classgen/asm/BinaryDoubleExpressionHelper.java |    3 -
 .../classgen/asm/BinaryExpressionWriter.java       |    1 -
 .../classgen/asm/BinaryFloatExpressionHelper.java  |    3 -
 .../classgen/asm/BinaryLongExpressionHelper.java   |    3 -
 .../classgen/asm/BinaryObjectExpressionHelper.java |    3 -
 .../groovy/classgen/asm/BytecodeDumper.java        |    1 -
 .../groovy/classgen/asm/BytecodeHelper.java        |    4 -
 .../groovy/classgen/asm/BytecodeVariable.java      |    3 -
 .../codehaus/groovy/classgen/asm/CompileStack.java |    1 -
 .../groovy/classgen/asm/DelegatingController.java  |    1 -
 .../classgen/asm/ExpressionAsVariableSlot.java     |    1 -
 .../codehaus/groovy/classgen/asm/MethodCaller.java |    2 -
 .../classgen/asm/StatementMetaTypeChooser.java     |    3 -
 .../codehaus/groovy/classgen/asm/TypeChooser.java  |    2 -
 .../groovy/classgen/asm/UnaryExpressionHelper.java |    2 -
 .../classgen/asm/WriterControllerFactory.java      |    1 -
 .../classgen/asm/indy/IndyCallSiteWriter.java      |    1 -
 .../classgen/asm/indy/InvokeDynamicWriter.java     |    2 -
 .../sc/IndyStaticTypesMultiTypeDispatcher.java     |    2 +-
 .../asm/sc/StaticCompilationMopWriter.java         |    1 -
 .../asm/sc/StaticPropertyAccessHelper.java         |    1 -
 ...icTypesBinaryExpressionMultiTypeDispatcher.java |    3 -
 .../classgen/asm/sc/StaticTypesCallSiteWriter.java |    2 -
 .../classgen/asm/sc/StaticTypesClosureWriter.java  |    2 -
 .../asm/sc/StaticTypesStatementWriter.java         |    1 -
 .../classgen/asm/sc/StaticTypesTypeChooser.java    |    2 -
 .../asm/sc/StaticTypesUnaryExpressionHelper.java   |    2 -
 .../asm/sc/StaticTypesWriterController.java        |    2 -
 .../sc/StaticTypesWriterControllerFactoryImpl.java |    3 -
 .../groovy/control/ASTTransformationsContext.java  |    2 -
 .../codehaus/groovy/control/ClassNodeResolver.java |    3 -
 .../groovy/control/CompilationFailedException.java |    3 -
 .../codehaus/groovy/control/CompilationUnit.java   |    4 -
 .../org/codehaus/groovy/control/CompilePhase.java  |  234 ++--
 .../org/codehaus/groovy/control/HasCleanup.java    |   10 +-
 .../java/org/codehaus/groovy/control/Janitor.java  |   35 +-
 .../org/codehaus/groovy/control/LabelVerifier.java |    2 -
 .../java/org/codehaus/groovy/control/Phases.java   |   69 +-
 .../codehaus/groovy/control/ProcessingUnit.java    |   17 +-
 .../org/codehaus/groovy/control/SourceUnit.java    |   21 +-
 .../control/customizers/CompilationCustomizer.java |    3 -
 .../control/customizers/DelegatingCustomizer.java  |    1 -
 .../control/customizers/ImportCustomizer.java      |    3 -
 .../control/customizers/SecureASTCustomizer.java   |    3 -
 .../control/customizers/SourceAwareCustomizer.java |    1 -
 .../customizers/builder/CustomizersFactory.java    |    1 -
 .../builder/ImportCustomizerFactory.java           |    1 -
 .../builder/InlinedASTCustomizerFactory.java       |    1 -
 .../customizers/builder/PostCompletionFactory.java |    1 -
 .../builder/SecureASTCustomizerFactory.java        |    1 -
 .../builder/SourceAwareCustomizerFactory.java      |    2 -
 .../groovy/control/io/AbstractReaderSource.java    |    3 -
 .../groovy/control/io/FileReaderSource.java        |    2 -
 .../groovy/control/io/InputStreamReaderSource.java |    2 -
 .../org/codehaus/groovy/control/io/NullWriter.java |    2 -
 .../codehaus/groovy/control/io/ReaderSource.java   |    2 -
 .../groovy/control/io/StringReaderSource.java      |    3 -
 .../groovy/control/io/URLReaderSource.java         |    2 -
 .../groovy/control/messages/ExceptionMessage.java  |   59 +-
 .../groovy/control/messages/LocatedMessage.java    |   51 +-
 .../codehaus/groovy/control/messages/Message.java  |   97 +-
 .../groovy/control/messages/SimpleMessage.java     |   55 +-
 .../control/messages/SyntaxErrorMessage.java       |    7 +-
 .../groovy/control/messages/WarningMessage.java    |  121 +-
 .../codehaus/groovy/reflection/CachedClass.java    |    3 -
 .../groovy/reflection/CachedConstructor.java       |    3 -
 .../codehaus/groovy/reflection/CachedMethod.java   |  685 +++++-----
 .../org/codehaus/groovy/reflection/ClassInfo.java  |    2 -
 .../reflection/stdclasses/ArrayCachedClass.java    |    3 -
 .../stdclasses/BigDecimalCachedClass.java          |    3 -
 .../stdclasses/BigIntegerCachedClass.java          |    3 -
 .../reflection/stdclasses/BooleanCachedClass.java  |    3 -
 .../reflection/stdclasses/ByteCachedClass.java     |    3 -
 .../stdclasses/CharacterCachedClass.java           |    3 -
 .../reflection/stdclasses/DoubleCachedClass.java   |    3 -
 .../reflection/stdclasses/FloatCachedClass.java    |    3 -
 .../reflection/stdclasses/IntegerCachedClass.java  |    3 -
 .../reflection/stdclasses/LongCachedClass.java     |    3 -
 .../reflection/stdclasses/NumberCachedClass.java   |    3 -
 .../reflection/stdclasses/ObjectCachedClass.java   |    3 -
 .../reflection/stdclasses/ShortCachedClass.java    |    3 -
 .../reflection/stdclasses/StringCachedClass.java   |    3 -
 .../groovy/runtime/AbstractComparator.java         |    3 -
 .../groovy/runtime/BytecodeInterface8.java         |    1 -
 .../groovy/runtime/DefaultCachedMethodKey.java     |    2 -
 .../codehaus/groovy/runtime/DefaultMethodKey.java  |    2 -
 .../groovy/runtime/FlushingStreamWriter.java       |    2 -
 .../codehaus/groovy/runtime/GeneratedClosure.java  |   57 +-
 .../codehaus/groovy/runtime/MetaClassHelper.java   |    4 -
 .../org/codehaus/groovy/runtime/MethodKey.java     |    2 -
 .../codehaus/groovy/runtime/MethodRankHelper.java  |    2 -
 .../groovy/runtime/ReflectionMethodInvoker.java    |    2 -
 .../org/codehaus/groovy/runtime/Reflector.java     |    2 -
 .../groovy/runtime/ResourceGroovyMethods.java      |  211 ++-
 .../groovy/runtime/ReverseListIterator.java        |    2 -
 .../groovy/runtime/ScriptBytecodeAdapter.java      |    2 -
 .../codehaus/groovy/runtime/StackTraceUtils.java   |  389 +++---
 .../groovy/runtime/StringBufferWriter.java         |    2 -
 .../runtime/callsite/BooleanClosureWrapper.java    |    1 -
 .../callsite/BooleanReturningMethodInvoker.java    |    2 -
 .../callsite/ConstructorMetaMethodSite.java        |    2 -
 .../runtime/callsite/MetaClassConstructorSite.java |    2 -
 .../groovy/runtime/callsite/MetaClassSite.java     |    2 -
 .../groovy/runtime/callsite/MetaMethodSite.java    |    2 -
 .../runtime/callsite/PogoInterceptableSite.java    |    2 -
 .../groovy/runtime/callsite/PogoMetaClassSite.java |    4 -
 .../groovy/runtime/callsite/PojoMetaClassSite.java |    2 -
 .../runtime/callsite/PojoMetaMethodSite.java       |    2 -
 .../runtime/callsite/StaticMetaClassSite.java      |    2 -
 .../runtime/callsite/StaticMetaMethodSite.java     |    2 -
 .../groovy/runtime/m12n/ExtensionModule.java       |    2 -
 .../runtime/m12n/ExtensionModuleRegistry.java      |    1 -
 .../runtime/m12n/MetaInfExtensionModule.java       |    2 -
 .../runtime/m12n/PropertiesModuleFactory.java      |    2 -
 .../groovy/runtime/m12n/SimpleExtensionModule.java |    1 -
 .../groovy/runtime/metaclass/ClosureMetaClass.java | 1425 ++++++++++----------
 .../runtime/metaclass/ClosureMetaMethod.java       |    1 -
 .../runtime/metaclass/ClosureStaticMetaMethod.java |    1 -
 .../runtime/metaclass/DefaultMetaClassInfo.java    |    2 -
 .../groovy/runtime/metaclass/MethodHelper.java     |    2 -
 .../groovy/runtime/metaclass/MixedInMetaClass.java |    4 -
 .../runtime/metaclass/NewInstanceMetaMethod.java   |    2 -
 .../runtime/metaclass/NewStaticMetaMethod.java     |    2 -
 .../groovy/runtime/metaclass/OwnedMetaClass.java   |    3 -
 .../groovy/runtime/metaclass/ReflectorLoader.java  |    2 -
 .../runtime/metaclass/TemporaryMethodKey.java      |    2 -
 .../metaclass/ThreadManagedMetaBeanProperty.java   |    4 -
 .../runtime/metaclass/TransformMetaMethod.java     |    3 -
 .../runtime/powerassert/AssertionRenderer.java     |    2 -
 .../groovy/runtime/powerassert/SourceText.java     |    2 -
 .../SourceTextNotAvailableException.java           |    2 -
 .../codehaus/groovy/runtime/powerassert/Value.java |    2 -
 .../groovy/runtime/powerassert/ValueRecorder.java  |    2 -
 .../runtime/typehandling/BigDecimalMath.java       |    2 -
 .../runtime/typehandling/BigIntegerMath.java       |    2 -
 .../runtime/typehandling/FloatingPointMath.java    |    2 -
 .../groovy/runtime/typehandling/IntegerMath.java   |    2 -
 .../groovy/runtime/typehandling/LongMath.java      |    2 -
 .../groovy/runtime/wrappers/BooleanWrapper.java    |    3 -
 .../groovy/runtime/wrappers/ByteWrapper.java       |    3 -
 .../groovy/runtime/wrappers/CharWrapper.java       |    3 -
 .../groovy/runtime/wrappers/DoubleWrapper.java     |    3 -
 .../groovy/runtime/wrappers/FloatWrapper.java      |    3 -
 .../runtime/wrappers/GroovyObjectWrapper.java      |    3 -
 .../groovy/runtime/wrappers/IntWrapper.java        |    3 -
 .../groovy/runtime/wrappers/LongWrapper.java       |    3 -
 .../groovy/runtime/wrappers/PojoWrapper.java       |    3 -
 .../groovy/runtime/wrappers/ShortWrapper.java      |    4 -
 .../codehaus/groovy/runtime/wrappers/Wrapper.java  |    7 +-
 .../java/org/codehaus/groovy/syntax/ASTHelper.java |    6 -
 .../java/org/codehaus/groovy/syntax/CSTNode.java   |  634 ++++-----
 .../java/org/codehaus/groovy/syntax/Numbers.java   |  213 ++-
 .../java/org/codehaus/groovy/syntax/Reduction.java |  255 ++--
 .../groovy/syntax/RuntimeParserException.java      |    2 -
 .../java/org/codehaus/groovy/syntax/Token.java     |  447 +++---
 .../java/org/codehaus/groovy/syntax/Types.java     |    9 +-
 .../java/org/codehaus/groovy/tools/Compiler.java   |  105 +-
 .../org/codehaus/groovy/tools/ErrorReporter.java   |  248 ++--
 .../java/org/codehaus/groovy/tools/RootLoader.java |    2 -
 .../tools/javac/JavaAwareCompilationUnit.java      |    2 -
 .../codehaus/groovy/tools/javac/JavaCompiler.java  |    3 -
 .../tools/javac/JavaStubCompilationUnit.java       |    3 -
 .../java/org/codehaus/groovy/tools/shell/IO.java   |    2 -
 .../codehaus/groovy/tools/shell/util/Logger.java   |    2 -
 .../groovy/tools/shell/util/MessageSource.java     |    2 -
 .../groovy/tools/shell/util/Preferences.java       |    2 -
 .../groovy/transform/ASTTransformation.java        |   99 +-
 .../ASTTransformationCollectorCodeVisitor.java     |    4 -
 .../groovy/transform/ASTTransformationVisitor.java |    2 -
 .../AbstractInterruptibleASTTransformation.java    |    3 -
 .../transform/AnnotationCollectorTransform.java    |    2 -
 .../transform/AutoCloneASTTransformation.java      |  612 +++++----
 .../transform/BaseScriptASTTransformation.java     |  333 +++--
 .../transform/CategoryASTTransformation.java       |  590 ++++----
 .../groovy/transform/GroovyASTTransformation.java  |  103 +-
 .../transform/GroovyASTTransformationClass.java    |   91 +-
 .../InheritConstructorsASTTransformation.java      |    2 -
 .../transform/PackageScopeASTTransformation.java   |    2 -
 .../transform/SingletonASTTransformation.java      |  271 ++--
 .../transform/SourceURIASTTransformation.java      |    5 -
 .../transform/StaticTypesTransformation.java       |    4 -
 .../transform/SynchronizedASTTransformation.java   |    2 -
 .../transform/sc/ListOfExpressionsExpression.java  |    2 -
 .../sc/StaticCompilationMetadataKeys.java          |    2 -
 .../transform/sc/StaticCompilationVisitor.java     |    2 -
 .../transform/sc/StaticCompileTransformation.java  |    2 -
 .../transform/sc/TemporaryVariableExpression.java  |    1 -
 .../sc/transformers/CompareIdentityExpression.java |    2 -
 .../transformers/RangeExpressionTransformer.java   |    2 -
 .../transformers/StaticCompilationTransformer.java |    2 -
 .../VariableExpressionTransformer.java             |    1 -
 .../stc/AbstractTypeCheckingExtension.java         |    1 -
 .../stc/DefaultTypeCheckingExtension.java          |    1 -
 .../groovy/transform/stc/DelegationMetadata.java   |    2 -
 .../groovy/transform/stc/ExtensionMethodNode.java  |    2 -
 .../stc/GroovyTypeCheckingExtensionSupport.java    |    1 -
 .../transform/stc/PropertyLookupVisitor.java       |    2 -
 .../groovy/transform/stc/SecondPassExpression.java |    2 -
 .../groovy/transform/stc/SignatureCodec.java       |    2 -
 .../transform/stc/SignatureCodecVersion1.java      |    2 -
 .../transform/stc/TypeCheckingExtension.java       |    1 -
 .../transform/trait/NAryOperationRewriter.java     |    2 -
 .../transform/trait/SuperCallTraitTransformer.java |    1 -
 .../transform/trait/TraitASTTransformation.java    |    2 -
 .../groovy/transform/trait/TraitComposer.java      |    1 -
 .../codehaus/groovy/transform/trait/Traits.java    |    1 -
 .../groovy/util/IteratorBufferedIterator.java      |    1 -
 .../codehaus/groovy/util/ListBufferedIterator.java |    1 -
 .../java/org/codehaus/groovy/util/ListHashMap.java |    2 -
 .../groovy/util/ManagedConcurrentValueMap.java     |    1 -
 .../codehaus/groovy/util/ManagedLinkedList.java    |    1 -
 .../org/codehaus/groovy/util/ManagedReference.java |    6 -
 .../java/org/codehaus/groovy/util/ReleaseInfo.java |  158 ++-
 .../org/codehaus/groovy/vmplugin/v6/Java6.java     |   66 +-
 .../groovy/vmplugin/v7/IndyArrayAccess.java        |    2 +-
 .../v7/IndyGuardsFiltersAndSignatures.java         |    1 -
 .../codehaus/groovy/vmplugin/v7/IndyInterface.java |    3 -
 .../org/codehaus/groovy/vmplugin/v7/IndyMath.java  |    1 -
 .../org/codehaus/groovy/vmplugin/v7/Selector.java  |    1 -
 .../codehaus/groovy/vmplugin/v7/TypeHelper.java    |    1 -
 .../groovy/vmplugin/v7/TypeTransformers.java       |    1 -
 .../org/codehaus/groovy/tck/BatchGenerate.groovy   |   57 +-
 .../org/codehaus/groovy/tck/GenerateTestCases.java |    5 -
 .../org/codehaus/groovy/tck/TestGenerator.groovy   |    7 +-
 src/test/groovy/lang/MetaClassTest.java            |    3 -
 src/test/groovy/lang/MockWriter.java               |    2 -
 src/test/groovy/lang/ScriptIntegerDivideTest.java  |    5 -
 src/test/groovy/lang/ScriptPrintTest.java          |    3 -
 src/test/groovy/lang/ScriptTest.java               |    3 -
 src/test/groovy/lang/SequenceTest.java             |    2 -
 src/test/groovy/lang/TupleTest.java                |    3 -
 .../gcldeadlock/GroovyClassLoaderDeadlockTest.java |    2 -
 .../mock/interceptor/MockCallSequenceTest.groovy   |    5 +-
 src/test/groovy/security/SecurityTest.java         |    2 -
 src/test/groovy/security/SecurityTestSupport.java  |    3 -
 src/test/groovy/tree/NodePrinterTest.java          |    3 -
 src/test/groovy/txn/TransactionBean.java           |    3 -
 src/test/groovy/txn/TransactionBuilder.java        |    3 -
 src/test/groovy/util/EvalTest.java                 |    2 -
 .../util/GroovyScriptEngineReloadingTest.groovy    |   77 +-
 .../groovy/antlr/AnnotationSourceParsingTest.java  |   88 +-
 .../groovy/antlr/EnumSourceParsingTest.java        |  256 ++--
 .../codehaus/groovy/antlr/SourceBufferTest.java    |    3 -
 .../groovy/antlr/treewalker/LineColumnChecker.java |    2 -
 .../groovy/antlr/treewalker/LineColumnTest.java    |    2 -
 .../groovy/antlr/treewalker/SourcePrinterTest.java |    2 -
 .../antlr/treewalker/UnimplementedSyntaxTest.java  |    2 -
 src/test/org/codehaus/groovy/ast/ASTTest.java      |   88 +-
 .../org/codehaus/groovy/ast/ClassNodeTest.java     |    2 -
 .../groovy/ast/MethodCallExpressionTest.java       |  175 ++-
 .../org/codehaus/groovy/ast/ModuleNodeTest.java    |    2 -
 .../groovy/ast/VariableExpressionTest.java         |  170 ++-
 .../groovy/ast/decompiled/AsmDecompilerTest.groovy |   18 +-
 .../IncrementalRecompilationWithStubsTest.groovy   |    6 +-
 .../groovy/ast/expr/ClosureExpressionTest.groovy   |    4 -
 .../ast/expr/MethodCallExpressionTest.groovy       |    4 -
 .../groovy/ast/expr/PropertyExpressionTest.groovy  |    4 -
 .../groovy/classgen/BytecodeHelperTest.groovy      |    3 -
 .../classgen/CallClosureFieldAsMethodTest.groovy   |   25 +-
 .../codehaus/groovy/classgen/CapitalizeTest.java   |    3 -
 .../classgen/ClassCompletionVerifierTest.java      |    3 -
 .../codehaus/groovy/classgen/ConstructorTest.java  |    3 -
 .../org/codehaus/groovy/classgen/DerivedBean.java  |    2 -
 .../codehaus/groovy/classgen/DummyReflector.java   |    2 -
 .../groovy/classgen/DumpingClassLoader.java        |    2 -
 src/test/org/codehaus/groovy/classgen/ForTest.java |    4 -
 .../org/codehaus/groovy/classgen/GStringTest.java  |    3 -
 .../codehaus/groovy/classgen/GetPropertyTest.java  |    2 -
 .../groovy/classgen/GroovyClassLoaderTest.java     |    2 -
 .../org/codehaus/groovy/classgen/IfElseTest.java   |    3 -
 .../org/codehaus/groovy/classgen/MainTest.java     |    3 -
 .../org/codehaus/groovy/classgen/MethodTest.java   |    3 -
 .../org/codehaus/groovy/classgen/PropertyTest.java |    3 -
 .../org/codehaus/groovy/classgen/RunBugsTest.java  |    2 -
 .../codehaus/groovy/classgen/RunClosureTest.java   |    3 -
 .../codehaus/groovy/classgen/RunGroovyTest.java    |    2 -
 .../org/codehaus/groovy/classgen/SimpleBean.java   |    2 -
 .../org/codehaus/groovy/classgen/TestSupport.java  |    2 -
 .../codehaus/groovy/classgen/TupleListTest.java    |    3 -
 .../classgen/asm/AbstractBytecodeTestCase.groovy   |   23 +-
 .../classgen/asm/BinaryOperationsTest.groovy       |    3 -
 .../classgen/asm/DirectMethodCallTest.groovy       |    3 -
 .../groovy/classgen/asm/HotSwapTest.groovy         |    3 -
 .../asm/InstructionSequenceHelperClassTest.groovy  |    2 -
 .../groovy/classgen/asm/MethodPatternsTest.groovy  |    4 +-
 .../control/io/AbstractReaderSourceTest.java       |  186 ++-
 .../runtime/DefaultGroovyMethodsSupportTest.groovy |  341 +++--
 .../groovy/runtime/DirectoryDeleteTest.groovy      |  114 +-
 .../org/codehaus/groovy/runtime/DummyBean.java     |    3 -
 .../runtime/FileStaticGroovyMethodsTest.groovy     |    3 -
 .../runtime/InheritedInterfaceMethodTest.java      |    3 -
 .../groovy/runtime/InvokeConstructorTest.java      |    2 -
 .../groovy/runtime/InvokeGroovyMethodTest.java     |    2 -
 .../codehaus/groovy/runtime/InvokeMethodTest.java  |    2 -
 .../org/codehaus/groovy/runtime/InvokerTest.java   |    2 -
 .../codehaus/groovy/runtime/MethodFailureTest.java |    2 -
 .../org/codehaus/groovy/runtime/MethodKeyTest.java |    3 -
 .../groovy/runtime/MethodRankHelperTest.java       |  191 +--
 .../codehaus/groovy/runtime/MockGroovyObject.java  |    2 -
 .../groovy/runtime/NewStaticMetaMethodTest.java    |    3 -
 .../org/codehaus/groovy/runtime/PropertyTest.java  |    2 -
 .../groovy/runtime/StringGroovyMethodsTest.java    |    5 -
 .../org/codehaus/groovy/runtime/TupleListTest.java |    4 -
 .../CacheCleanupCollectedSoftReferencesTest.groovy |    5 +-
 .../groovy/syntax/parser/TestParserSupport.java    |    2 -
 .../org/codehaus/groovy/tools/CompilerTest.java    |    2 -
 .../groovy/tools/FileSystemCompilerTest.java       |    2 -
 .../ClassImplementingANonPublicInterface.java      |    2 -
 .../groovy/transform/NonPublicInterface.java       |    2 -
 .../transform/SingletonASTTransformationTest.java  |    2 -
 .../tailrec/RecursivenessTesterTest.groovy         |   42 +-
 .../tailrec/ReturnAdderForClosuresTest.groovy      |    5 +-
 .../ReturnStatementToIterationConverterTest.groovy |   11 +-
 .../transform/tailrec/StatementReplacerTest.groovy |   25 +-
 .../TailRecursiveCompilationFailuresTest.groovy    |    4 -
 .../transform/tailrec/TailRecursiveExamples.groovy |    4 -
 .../TailRecursiveTogetherWithOtherASTsTest.groovy  |    4 +-
 .../tailrec/TailRecursiveTransformationTest.groovy |    3 -
 .../TernaryToIfStatementConverterTest.groovy       |    5 +-
 .../tailrec/VariableExpressionReplacerTest.groovy  |   57 +-
 516 files changed, 5218 insertions(+), 6938 deletions(-)

diff --git a/gradle/pomconfigurer.gradle b/gradle/pomconfigurer.gradle
index bd1560a..2531b14 100644
--- a/gradle/pomconfigurer.gradle
+++ b/gradle/pomconfigurer.gradle
@@ -654,6 +654,45 @@ project.ext.pomConfigureClosureWithoutTweaks = {
                 name 'Nick Grealy'
             }
             contributor {
+                name 'Vaclav Pech'
+            }
+            contributor {
+                name 'Chuck Tassoni'
+            }
+            contributor {
+                name 'Steven Devijver'
+            }
+            contributor {
+                name 'Ben Manes'
+            }
+            contributor {
+                name 'Troy Heninger'
+            }
+            contributor {
+                name 'Andrew Eisenberg'
+            }
+            contributor {
+                name 'Eric Milles'
+            }
+            contributor {
+                name 'Kohsuke Kawaguchi'
+            }
+            contributor {
+                name 'Scott Vlaminck'
+            }
+            contributor {
+                name 'Hjalmar Ekengren'
+            }
+            contributor {
+                name 'Rafael Luque'
+            }
+            contributor {
+                name 'Joachim Heldmann'
+            }
+            contributor {
+                name 'dgouyette'
+            }
+            contributor {
                 name 'Marcin Grzejszczak'
             }
             contributor {
diff --git a/src/main/groovy/groovy/lang/GroovyResourceLoader.java b/src/main/groovy/groovy/lang/GroovyResourceLoader.java
index 7abe202..4ac9c8d 100644
--- a/src/main/groovy/groovy/lang/GroovyResourceLoader.java
+++ b/src/main/groovy/groovy/lang/GroovyResourceLoader.java
@@ -23,8 +23,6 @@ import java.net.URL;
 
 /**
  * Allows frameworks that integrate with Groovy to determine how Groovy files are resolved.
- * 
- * @author Steven Devijver
  */
 public interface GroovyResourceLoader {
 
diff --git a/src/main/groovy/groovy/lang/MapWithDefault.java b/src/main/groovy/groovy/lang/MapWithDefault.java
index 166e06b..8aa1b3e 100644
--- a/src/main/groovy/groovy/lang/MapWithDefault.java
+++ b/src/main/groovy/groovy/lang/MapWithDefault.java
@@ -25,7 +25,6 @@ import java.util.Set;
 /**
  * A wrapper for Map which allows a default value to be specified.
  *
- * @author Paul King
  * @since 1.7.1
  */
 public final class MapWithDefault<K, V> implements Map<K, V> {
diff --git a/src/main/groovy/groovy/lang/MetaArrayLengthProperty.java b/src/main/groovy/groovy/lang/MetaArrayLengthProperty.java
index 8310386..e7de412 100644
--- a/src/main/groovy/groovy/lang/MetaArrayLengthProperty.java
+++ b/src/main/groovy/groovy/lang/MetaArrayLengthProperty.java
@@ -21,8 +21,6 @@ package groovy.lang;
 
 /**
  * Represents the length property of an array
- *
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public class MetaArrayLengthProperty extends MetaProperty {
 
diff --git a/src/main/groovy/groovy/lang/MetaClass.java b/src/main/groovy/groovy/lang/MetaClass.java
index 42c6a83..09bb3cd 100644
--- a/src/main/groovy/groovy/lang/MetaClass.java
+++ b/src/main/groovy/groovy/lang/MetaClass.java
@@ -32,9 +32,6 @@ import java.util.List;
  *
  * @see MetaClassImpl
  * @see groovy.lang.MetaObjectProtocol
- * 
- * @author John Wilson
- * @author Graeme Rocher
  */
 public interface MetaClass extends MetaObjectProtocol {
 
diff --git a/src/main/groovy/groovy/lang/MetaClassRegistry.java b/src/main/groovy/groovy/lang/MetaClassRegistry.java
index f13c1c1..65a132d 100644
--- a/src/main/groovy/groovy/lang/MetaClassRegistry.java
+++ b/src/main/groovy/groovy/lang/MetaClassRegistry.java
@@ -31,10 +31,6 @@ import java.util.Iterator;
  *
  * @see groovy.lang.MetaClass
  *
- * @author John Wilson
- * @author Graeme Rocher
- * @author <a href="mailto:blackdrag@gmx.org">Jochen Theodorou</a>
- *
  */
 public interface MetaClassRegistry {
     
@@ -127,7 +123,6 @@ public interface MetaClassRegistry {
      * you can have any control over the creation of what MetaClass is used
      * for a class that you want to have. 
      * WARNING: experimental code, likely to change soon
-     * @author Jochen Theodorou
      */
     class MetaClassCreationHandle {
         private boolean disableCustomMetaClassLookup;
diff --git a/src/main/groovy/groovy/lang/MetaClassRegistryChangeEvent.java b/src/main/groovy/groovy/lang/MetaClassRegistryChangeEvent.java
index 484efa3..0487cc1 100644
--- a/src/main/groovy/groovy/lang/MetaClassRegistryChangeEvent.java
+++ b/src/main/groovy/groovy/lang/MetaClassRegistryChangeEvent.java
@@ -22,8 +22,6 @@ import java.util.EventObject;
 
 /**
  * An event used to propagate meta class updates
- *
- * @author <a href="mailto:blackdrag@gmx.org">Jochen Theodorou</a>
  */
 public class MetaClassRegistryChangeEvent extends EventObject {
     private static final long serialVersionUID = 1647849176793457976L;
diff --git a/src/main/groovy/groovy/lang/MetaClassRegistryChangeEventListener.java b/src/main/groovy/groovy/lang/MetaClassRegistryChangeEventListener.java
index e7fd40c..9ab8954 100644
--- a/src/main/groovy/groovy/lang/MetaClassRegistryChangeEventListener.java
+++ b/src/main/groovy/groovy/lang/MetaClassRegistryChangeEventListener.java
@@ -26,8 +26,6 @@ import java.util.EventListener;
  * @see groovy.lang.MetaClassRegistry
  * @see groovy.lang.MetaClassRegistryChangeEvent
  *
- * @author <a href="mailto:blackdrag@gmx.org">Jochen Theodorou</a>
-  *
  */
 public interface MetaClassRegistryChangeEventListener extends EventListener{
 
diff --git a/src/main/groovy/groovy/lang/MetaExpandoProperty.java b/src/main/groovy/groovy/lang/MetaExpandoProperty.java
index 6eb2cf7..9903f17 100644
--- a/src/main/groovy/groovy/lang/MetaExpandoProperty.java
+++ b/src/main/groovy/groovy/lang/MetaExpandoProperty.java
@@ -22,8 +22,6 @@ import java.util.Map.Entry;
 
 /**
  * Represents a property in an Expando object
- *
- * @author John Stump
  */
 public class MetaExpandoProperty extends MetaProperty {
 
diff --git a/src/main/groovy/groovy/lang/MetaMethod.java b/src/main/groovy/groovy/lang/MetaMethod.java
index fcc001d..ee185fb 100644
--- a/src/main/groovy/groovy/lang/MetaMethod.java
+++ b/src/main/groovy/groovy/lang/MetaMethod.java
@@ -29,9 +29,6 @@ import java.lang.reflect.Modifier;
 /**
  * Represents a Method on a Java object a little like {@link java.lang.reflect.Method}
  * except without using reflection to invoke the method
- *
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @author Alex Tkachman
  */
 public abstract class MetaMethod extends ParameterTypes implements Cloneable {
     public static final MetaMethod[] EMPTY_ARRAY = new MetaMethod[0];
diff --git a/src/main/groovy/groovy/lang/MetaObjectProtocol.java b/src/main/groovy/groovy/lang/MetaObjectProtocol.java
index 4218831..c215a57 100644
--- a/src/main/groovy/groovy/lang/MetaObjectProtocol.java
+++ b/src/main/groovy/groovy/lang/MetaObjectProtocol.java
@@ -25,8 +25,6 @@ import java.util.List;
  * implemented by the reference implementation of the {@link groovy.lang.MetaClass} interface.
  *
  * @see MetaClassImpl
- * @author John Wilson
- * @author Graeme Rocher
  */
 public interface MetaObjectProtocol {
 
diff --git a/src/main/groovy/groovy/lang/MetaProperty.java b/src/main/groovy/groovy/lang/MetaProperty.java
index d3c9633..bf94908 100644
--- a/src/main/groovy/groovy/lang/MetaProperty.java
+++ b/src/main/groovy/groovy/lang/MetaProperty.java
@@ -24,8 +24,6 @@ import java.lang.reflect.Modifier;
 
 /**
  * Represents a property on a bean which may have a getter and/or a setter
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public abstract class MetaProperty {
 
diff --git a/src/main/groovy/groovy/lang/MissingClassException.java b/src/main/groovy/groovy/lang/MissingClassException.java
index b3579a6..d54dcdc 100644
--- a/src/main/groovy/groovy/lang/MissingClassException.java
+++ b/src/main/groovy/groovy/lang/MissingClassException.java
@@ -26,8 +26,6 @@ import org.codehaus.groovy.ast.ClassNode;
  * 
  * Note that the Missing*Exception classes were named for consistency and
  * to avoid conflicts with JDK exceptions of the same name.
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public class MissingClassException extends GroovyRuntimeException {
 
diff --git a/src/main/groovy/groovy/lang/MissingFieldException.java b/src/main/groovy/groovy/lang/MissingFieldException.java
index 4a222f5..3181936 100644
--- a/src/main/groovy/groovy/lang/MissingFieldException.java
+++ b/src/main/groovy/groovy/lang/MissingFieldException.java
@@ -24,8 +24,6 @@ package groovy.lang;
  * 
  * Note that the Missing*Exception classes were named for consistency and
  * to avoid conflicts with JDK exceptions of the same name.
- * 
- * @author <a href="mailto:jstrachan@protique.com">James Strachan</a>
  */
 public class MissingFieldException extends GroovyRuntimeException {
 
diff --git a/src/main/groovy/groovy/lang/Mixin.java b/src/main/groovy/groovy/lang/Mixin.java
index 22ef4b9..10b546e 100644
--- a/src/main/groovy/groovy/lang/Mixin.java
+++ b/src/main/groovy/groovy/lang/Mixin.java
@@ -29,8 +29,6 @@ import java.lang.annotation.Target;
  * Provides a mechanism for mixing in methods into a class.
  *
  * @deprecated static mixins have been deprecated in favour of traits (trait keyword).
- *
- * @author Alex Tkachman
  */
 @java.lang.annotation.Documented
 @Retention(RetentionPolicy.RUNTIME)
diff --git a/src/main/groovy/groovy/lang/MutableMetaClass.java b/src/main/groovy/groovy/lang/MutableMetaClass.java
index 903c895..b361599 100644
--- a/src/main/groovy/groovy/lang/MutableMetaClass.java
+++ b/src/main/groovy/groovy/lang/MutableMetaClass.java
@@ -32,7 +32,6 @@ import java.lang.reflect.Method;
  *
  * @see MetaClassImpl
  * @see MetaClass
- * @author Graeme Rocher
  * @since 1.5
  */
 public interface MutableMetaClass extends MetaClass {
diff --git a/src/main/groovy/groovy/lang/ParameterArray.java b/src/main/groovy/groovy/lang/ParameterArray.java
index d3a4163..ba86c8b 100644
--- a/src/main/groovy/groovy/lang/ParameterArray.java
+++ b/src/main/groovy/groovy/lang/ParameterArray.java
@@ -20,8 +20,6 @@ package groovy.lang;
 
 /**
  * Distinguish a parameter array from Object[].
- *
- * @author Pilho Kim
  */
 public class ParameterArray {
 
diff --git a/src/main/groovy/groovy/lang/PropertyAccessInterceptor.java b/src/main/groovy/groovy/lang/PropertyAccessInterceptor.java
index 6d2906e..69d2c48 100644
--- a/src/main/groovy/groovy/lang/PropertyAccessInterceptor.java
+++ b/src/main/groovy/groovy/lang/PropertyAccessInterceptor.java
@@ -22,7 +22,6 @@ package groovy.lang;
  * <p>An interface that adds the ability to intercept
  * property getters/setters
  *
- * @author Graeme Rocher
  * @since Oct 24, 2005
  */
 public interface PropertyAccessInterceptor extends Interceptor {
diff --git a/src/main/groovy/groovy/lang/ProxyMetaClass.java b/src/main/groovy/groovy/lang/ProxyMetaClass.java
index 8c41f7d..06c8d96 100644
--- a/src/main/groovy/groovy/lang/ProxyMetaClass.java
+++ b/src/main/groovy/groovy/lang/ProxyMetaClass.java
@@ -29,8 +29,6 @@ package groovy.lang;
  * as a per-instance MetaClass running in a single thread. Do not place this MetaClass in the MetaClassRegistry
  * as it will result in unpredictable behaviour
  *
- * @author Dierk Koenig
- * @author Graeme Rocher
  * @see groovy.lang.MetaClassRegistry
  */
 public class ProxyMetaClass extends MetaClassImpl implements AdaptingMetaClass {
diff --git a/src/main/groovy/groovy/lang/ReadOnlyPropertyException.java b/src/main/groovy/groovy/lang/ReadOnlyPropertyException.java
index 77231d2..cc229f9 100644
--- a/src/main/groovy/groovy/lang/ReadOnlyPropertyException.java
+++ b/src/main/groovy/groovy/lang/ReadOnlyPropertyException.java
@@ -21,8 +21,6 @@ package groovy.lang;
 
 /**
  * This exception is thrown if an attempt is made to set a read only property
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public class ReadOnlyPropertyException extends MissingPropertyException {
 
diff --git a/src/main/groovy/groovy/lang/Reference.java b/src/main/groovy/groovy/lang/Reference.java
index c4bf21d..e187d2b 100644
--- a/src/main/groovy/groovy/lang/Reference.java
+++ b/src/main/groovy/groovy/lang/Reference.java
@@ -24,8 +24,6 @@ import java.io.Serializable;
 
 /**
  * Represents a reference to a value
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public class Reference<T> extends GroovyObjectSupport implements Serializable {
 
diff --git a/src/main/groovy/groovy/lang/Script.java b/src/main/groovy/groovy/lang/Script.java
index ea70461..b9bda4b 100644
--- a/src/main/groovy/groovy/lang/Script.java
+++ b/src/main/groovy/groovy/lang/Script.java
@@ -28,9 +28,6 @@ import java.io.IOException;
 
 /**
  * This object represents a Groovy script
- *
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @author Guillaume Laforge
  */
 public abstract class Script extends GroovyObjectSupport {
     private Binding binding;
diff --git a/src/main/groovy/groovy/lang/Singleton.java b/src/main/groovy/groovy/lang/Singleton.java
index 9b86c8b..9859bec 100644
--- a/src/main/groovy/groovy/lang/Singleton.java
+++ b/src/main/groovy/groovy/lang/Singleton.java
@@ -40,9 +40,6 @@ import java.lang.annotation.Target;
  * <li>provide one or more constructors with arguments for a quasi-singleton - these constructors will be used
  * to create instances that are independent of the singleton instance returned by the singleton property</li>
  * </ul>
- *
- * @author Alex Tkachman
- * @author Paul King
  */
 @java.lang.annotation.Documented
 @Retention(RetentionPolicy.SOURCE)
diff --git a/src/main/groovy/groovy/lang/StringWriterIOException.java b/src/main/groovy/groovy/lang/StringWriterIOException.java
index 9fef866..f178b48 100644
--- a/src/main/groovy/groovy/lang/StringWriterIOException.java
+++ b/src/main/groovy/groovy/lang/StringWriterIOException.java
@@ -22,8 +22,6 @@ import java.io.IOException;
 
 /**
  * An IO exception occurred trying to append to a StringWriter which should never happen.
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public class StringWriterIOException extends RuntimeException {
 
diff --git a/src/main/groovy/groovy/lang/TrampolineClosure.java b/src/main/groovy/groovy/lang/TrampolineClosure.java
index 71f31c8..e94e430 100644
--- a/src/main/groovy/groovy/lang/TrampolineClosure.java
+++ b/src/main/groovy/groovy/lang/TrampolineClosure.java
@@ -25,8 +25,6 @@ package groovy.lang;
  * method, the TrampolineClosure will again be invoked. This repetitive invocation of returned TrampolineClosure instances will continue
  * until a value other than TrampolineClosure is returned.
  * That value will become the final result of the trampoline.
- *
- * @author Vaclav Pech
  */
 final class TrampolineClosure<V> extends Closure<V> {
 
diff --git a/src/main/groovy/groovy/lang/Tuple.java b/src/main/groovy/groovy/lang/Tuple.java
index 8a1a6e7..eab9101 100644
--- a/src/main/groovy/groovy/lang/Tuple.java
+++ b/src/main/groovy/groovy/lang/Tuple.java
@@ -27,8 +27,6 @@ import java.util.Objects;
 
 /**
  * Represents a list of Objects.
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public class Tuple<E> extends AbstractList<E> implements Serializable {
     private static final long serialVersionUID = -6707770506387821031L;
diff --git a/src/main/groovy/groovy/lang/Writable.java b/src/main/groovy/groovy/lang/Writable.java
index ec135cd..209783b 100644
--- a/src/main/groovy/groovy/lang/Writable.java
+++ b/src/main/groovy/groovy/lang/Writable.java
@@ -30,8 +30,6 @@ import java.io.Writer;
  * It is worth noting that writable implementations often override their
  * toString() implementation as well to allow rendering the same result 
  * directly to a String; however this is not required.
- *
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public interface Writable {
 
diff --git a/src/main/groovy/groovy/security/GroovyCodeSourcePermission.java b/src/main/groovy/groovy/security/GroovyCodeSourcePermission.java
index 49032cd..2524c25 100644
--- a/src/main/groovy/groovy/security/GroovyCodeSourcePermission.java
+++ b/src/main/groovy/groovy/security/GroovyCodeSourcePermission.java
@@ -25,8 +25,6 @@ import java.security.BasicPermission;
  * codebase cannot be determined.  Typically this permission is only
  * required by clients that want to associate a code source with a script which
  * is a String or an InputStream.
- *
- * @author Steve Goetze
  */
 public final class GroovyCodeSourcePermission extends BasicPermission {
 
diff --git a/src/main/groovy/groovy/time/BaseDuration.java b/src/main/groovy/groovy/time/BaseDuration.java
index e2cc023..dd21ab4 100644
--- a/src/main/groovy/groovy/time/BaseDuration.java
+++ b/src/main/groovy/groovy/time/BaseDuration.java
@@ -29,7 +29,6 @@ import java.util.List;
 /**
  * Base class for date and time durations.
  *
- * @author John Wilson tug@wilson.co.uk
  * @see Duration
  */
 public abstract class BaseDuration implements Comparable<BaseDuration> {
diff --git a/src/main/groovy/groovy/time/DatumDependentDuration.java b/src/main/groovy/groovy/time/DatumDependentDuration.java
index c73d9aa..a87cb6c 100644
--- a/src/main/groovy/groovy/time/DatumDependentDuration.java
+++ b/src/main/groovy/groovy/time/DatumDependentDuration.java
@@ -29,8 +29,6 @@ import java.util.Date;
  * <p>
  * I don't know how many days in a month unless I know the name of the month 
  * (and if it's a leap year if the month is February)
- *
- * @author John Wilson tug@wilson.co.uk
  */
 public class DatumDependentDuration extends BaseDuration {
     public DatumDependentDuration(final int years, final int months, final int days, final int hours, final int minutes, final int seconds, final int millis) {
diff --git a/src/main/groovy/groovy/time/Duration.java b/src/main/groovy/groovy/time/Duration.java
index e187957..7e652e7 100644
--- a/src/main/groovy/groovy/time/Duration.java
+++ b/src/main/groovy/groovy/time/Duration.java
@@ -31,8 +31,6 @@ import java.util.Date;
  * <p>
  * If you ask Duration to convert itself to milliseconds then it will work on the basis of 24 hours
  * in a day. If you add or subtract it from a date it will take daylight saving into account.
- *
- * @author John Wilson tug@wilson.co.uk
  */
 public class Duration extends BaseDuration {
     public Duration(final int days, final int hours, final int minutes, final int seconds, final int millis) {
diff --git a/src/main/groovy/groovy/time/TimeDatumDependentDuration.java b/src/main/groovy/groovy/time/TimeDatumDependentDuration.java
index eead45a..00e9797 100644
--- a/src/main/groovy/groovy/time/TimeDatumDependentDuration.java
+++ b/src/main/groovy/groovy/time/TimeDatumDependentDuration.java
@@ -24,8 +24,6 @@ import java.util.Date;
 /**
  * TimeDatumDuration represents a time period which results from an
  * arithmetic operation between a TimeDuration object and a DatumDuration object
- * 
- * @author John Wilson tug@wilson.co.uk
  */
 public class TimeDatumDependentDuration extends DatumDependentDuration {
     public TimeDatumDependentDuration(int years, int months, int days, int hours, int minutes, int seconds, int millis) {
diff --git a/src/main/groovy/groovy/time/TimeDuration.java b/src/main/groovy/groovy/time/TimeDuration.java
index 767b8e6..46e15b7 100644
--- a/src/main/groovy/groovy/time/TimeDuration.java
+++ b/src/main/groovy/groovy/time/TimeDuration.java
@@ -33,8 +33,6 @@ import java.util.Date;
  * <p>
  * If you ask Duration to convert itself to milliseconds then it will work on the basis of 60 seconds in a minute.
  * If you add or subtract it from a date it will take leap seconds into account.
- *
- * @author John Wilson tug@wilson.co.uk
  */
 
 public class TimeDuration extends Duration {
diff --git a/src/main/groovy/groovy/transform/builder/SimpleStrategy.java b/src/main/groovy/groovy/transform/builder/SimpleStrategy.java
index fd96b7f..b01493e 100644
--- a/src/main/groovy/groovy/transform/builder/SimpleStrategy.java
+++ b/src/main/groovy/groovy/transform/builder/SimpleStrategy.java
@@ -77,8 +77,6 @@ import static org.codehaus.groovy.transform.BuilderASTTransformation.NO_EXCEPTIO
  *
  * The 'useSetters' annotation attribute can be used for writable properties as per the {@code Builder} transform documentation.
  * The other annotation attributes for the {@code @Builder} transform for configuring the building process aren't applicable for this strategy.
- *
- * @author Paul King
  */
 public class SimpleStrategy extends BuilderASTTransformation.AbstractBuilderStrategy {
     public void build(BuilderASTTransformation transform, AnnotatedNode annotatedNode, AnnotationNode anno) {
diff --git a/src/main/groovy/groovy/transform/stc/ClosureSignatureHint.java b/src/main/groovy/groovy/transform/stc/ClosureSignatureHint.java
index 9a77d20..0525a98 100644
--- a/src/main/groovy/groovy/transform/stc/ClosureSignatureHint.java
+++ b/src/main/groovy/groovy/transform/stc/ClosureSignatureHint.java
@@ -47,7 +47,6 @@ import java.util.List;
  *
  * <p>Several predefined hints can be found, which should cover most of the use cases.</p>
  *
- * @author Cédric Champeau
  * @since 2.3.0
  *
  */
diff --git a/src/main/groovy/groovy/transform/stc/FirstParam.java b/src/main/groovy/groovy/transform/stc/FirstParam.java
index 81eb0e7..706e048 100644
--- a/src/main/groovy/groovy/transform/stc/FirstParam.java
+++ b/src/main/groovy/groovy/transform/stc/FirstParam.java
@@ -30,7 +30,6 @@ import org.codehaus.groovy.control.SourceUnit;
  *
  * <p>This class has several inner classes that also helps picking generic argument types instead of the parameter type.</p>
  *
- * @author Cédric Champeau
  * @since 2.3.0
  */
 public class FirstParam extends PickAnyArgumentHint {
@@ -42,7 +41,6 @@ public class FirstParam extends PickAnyArgumentHint {
      * <p>A hint used to instruct the type checker to pick the first generic type of the first parameter type. For example:</p>
      * <code>void &lt;T&gt; doWithElements(List&lt;T&gt; src, @ClosureParams(FirstParam.FirstGenericType.class) Closure c) { src.each { c.call(it) } }</code>
      *
-     * @author Cédric Champeau
      * @since 2.3.0
      */
     public static class FirstGenericType extends PickAnyArgumentHint {
@@ -55,7 +53,6 @@ public class FirstParam extends PickAnyArgumentHint {
      * <p>A hint used to instruct the type checker to pick the second generic type of the first parameter type. For example:</p>
      * <code>void &lt;T,U&gt; doWithElements(Tuple&lt;T,U&gt; src, @ClosureParams(FirstParam.SecondGenericType.class) Closure c) { src.each { c.call(it) } }</code>
      *
-     * @author Cédric Champeau
      * @since 2.3.0
      */
     public static class SecondGenericType extends PickAnyArgumentHint {
@@ -68,7 +65,6 @@ public class FirstParam extends PickAnyArgumentHint {
      * <p>A hint used to instruct the type checker to pick the third generic type of the first parameter type. For example:</p>
      * <code>void &lt;T,U,V&gt; doWithElements(Triple&lt;T,U,V&gt; src, @ClosureParams(FirstParam.ThirdGenericType.class) Closure c) { src.each { c.call(it) } }</code>
      *
-     * @author Cédric Champeau
      * @since 2.3.0
      */
     public static class ThirdGenericType extends PickAnyArgumentHint {
diff --git a/src/main/groovy/groovy/transform/stc/FromAbstractTypeMethods.java b/src/main/groovy/groovy/transform/stc/FromAbstractTypeMethods.java
index e5125f1..b00544b 100644
--- a/src/main/groovy/groovy/transform/stc/FromAbstractTypeMethods.java
+++ b/src/main/groovy/groovy/transform/stc/FromAbstractTypeMethods.java
@@ -34,7 +34,6 @@ import java.util.List;
  * to infer the expected parameter types. This is especially useful for closure parameter type
  * inference when implicit closure coercion is in action.
  *
- * @author Cédric Champeau
  * @since 2.3.0
  */
 public class FromAbstractTypeMethods extends ClosureSignatureHint {
diff --git a/src/main/groovy/groovy/transform/stc/FromString.java b/src/main/groovy/groovy/transform/stc/FromString.java
index 12f9371..1a812ee 100644
--- a/src/main/groovy/groovy/transform/stc/FromString.java
+++ b/src/main/groovy/groovy/transform/stc/FromString.java
@@ -46,7 +46,6 @@ import java.util.List;
  * ... hints because it is actually much slower. Using this hint should therefore be limited
  * to cases where it's not possible to express the signature using the existing hints.</p>
  *
- * @author Cédric Champeau
  * @since 2.3.0
  */
 public class FromString extends ClosureSignatureHint {
diff --git a/src/main/groovy/groovy/transform/stc/PickAnyArgumentHint.java b/src/main/groovy/groovy/transform/stc/PickAnyArgumentHint.java
index 6a5463f..0f4d92f 100644
--- a/src/main/groovy/groovy/transform/stc/PickAnyArgumentHint.java
+++ b/src/main/groovy/groovy/transform/stc/PickAnyArgumentHint.java
@@ -39,7 +39,6 @@ import org.codehaus.groovy.control.SourceUnit;
  * <p></p>
  * <p>This class is extended by several hint providers that make it easier to use as annotation values.</p>
  *
- * @author Cédric Champeau
  * @since 2.3.0
  */
 public class PickAnyArgumentHint extends SingleSignatureClosureHint {
diff --git a/src/main/groovy/groovy/transform/stc/SecondParam.java b/src/main/groovy/groovy/transform/stc/SecondParam.java
index c077750..ee9c4a1 100644
--- a/src/main/groovy/groovy/transform/stc/SecondParam.java
+++ b/src/main/groovy/groovy/transform/stc/SecondParam.java
@@ -30,7 +30,6 @@ import org.codehaus.groovy.control.SourceUnit;
  *
  * <p>This class has several inner classes that also helps picking generic argument types instead of the parameter type.</p>
  *
- * @author Cédric Champeau
  * @since 2.3.0
  */
 public class SecondParam extends PickAnyArgumentHint {
@@ -42,7 +41,6 @@ public class SecondParam extends PickAnyArgumentHint {
      * <p>A hint used to instruct the type checker to pick the first generic type of the second parameter type. For example:</p>
      * <code>void &lt;T&gt; doWithElements(String base, List&lt;T&gt; src, @ClosureParams(SecondParam.FirstGenericType.class) Closure c) { ... } }</code>
      *
-     * @author Cédric Champeau
      * @since 2.3.0
      */
     public static class FirstGenericType extends PickAnyArgumentHint {
@@ -55,7 +53,6 @@ public class SecondParam extends PickAnyArgumentHint {
      * <p>A hint used to instruct the type checker to pick the second generic type of the second parameter type. For example:</p>
      * <code>void &lt;T,U&gt; doWithElements(String base, Tuple&lt;T,U&gt; src, @ClosureParams(SecondParam.SecondGenericType.class) Closure c) { ... }</code>
      *
-     * @author Cédric Champeau
      * @since 2.3.0
      */
     public static class SecondGenericType extends PickAnyArgumentHint {
@@ -68,7 +65,6 @@ public class SecondParam extends PickAnyArgumentHint {
      * <p>A hint used to instruct the type checker to pick the second generic type of the second parameter type. For example:</p>
      * <code>void &lt;T,U,V&gt; doWithElements(String base, Triple&lt;T,U,V&gt; src, @ClosureParams(SecondParam.ThirdGenericType.class) Closure c) { ... }</code>
      *
-     * @author Cédric Champeau
      * @since 2.3.0
      */
     public static class ThirdGenericType extends PickAnyArgumentHint {
diff --git a/src/main/groovy/groovy/transform/stc/SingleSignatureClosureHint.java b/src/main/groovy/groovy/transform/stc/SingleSignatureClosureHint.java
index 3db66ff..d1085dd 100644
--- a/src/main/groovy/groovy/transform/stc/SingleSignatureClosureHint.java
+++ b/src/main/groovy/groovy/transform/stc/SingleSignatureClosureHint.java
@@ -31,7 +31,6 @@ import java.util.List;
  * A simplified version of a {@link groovy.transform.stc.ClosureSignatureHint} which is suitable
  * for monomorphic closures, that is to say closures which only respond to a single signature.
  *
- * @author Cédric Champeau
  * @since 2.3.0
  */
 public abstract class SingleSignatureClosureHint extends ClosureSignatureHint {
diff --git a/src/main/groovy/groovy/transform/stc/ThirdParam.java b/src/main/groovy/groovy/transform/stc/ThirdParam.java
index c493e36..5b7a803 100644
--- a/src/main/groovy/groovy/transform/stc/ThirdParam.java
+++ b/src/main/groovy/groovy/transform/stc/ThirdParam.java
@@ -30,7 +30,6 @@ import org.codehaus.groovy.control.SourceUnit;
  *
  * <p>This class has several inner classes that also helps picking generic argument types instead of the parameter type.</p>
  *
- * @author Cédric Champeau
  * @since 2.3.0
  */
 public class ThirdParam extends PickAnyArgumentHint {
@@ -42,7 +41,6 @@ public class ThirdParam extends PickAnyArgumentHint {
      * <p>A hint used to instruct the type checker to pick the first generic type of the third parameter type. For example:</p>
      * <code>void &lt;T&gt; doWithElements(String first, Integer second, List&lt;T&gt; third, @ClosureParams(SecondParam.FirstGenericType.class) Closure c) { ... } }</code>
      *
-     * @author Cédric Champeau
      * @since 2.3.0
      */
     public static class FirstGenericType extends PickAnyArgumentHint {
@@ -56,7 +54,6 @@ public class ThirdParam extends PickAnyArgumentHint {
      * <p>A hint used to instruct the type checker to pick the second generic type of the third parameter type. For example:</p>
      * <code>void &lt;T,U&gt; doWithElements(String first, Integer second, Tuple&lt;T,U&gt; third, @ClosureParams(SecondParam.SecondGenericType.class) Closure c) { ... }</code>
      *
-     * @author Cédric Champeau
      * @since 2.3.0
      */
     public static class SecondGenericType extends PickAnyArgumentHint {
@@ -69,7 +66,6 @@ public class ThirdParam extends PickAnyArgumentHint {
      * <p>A hint used to instruct the type checker to pick the second generic type of the third parameter type. For example:</p>
      * <code>void &lt;T,U,V&gt; doWithElements(String first, Integer second, Triple&lt;T,U,V&gt; src, @ClosureParams(SecondParam.ThirdGenericType.class) Closure c) { ... }</code>
      *
-     * @author Cédric Champeau
      * @since 2.3.0
      */
     public static class ThirdGenericType extends PickAnyArgumentHint {
diff --git a/src/main/groovy/groovy/ui/GroovySocketServer.java b/src/main/groovy/groovy/ui/GroovySocketServer.java
index b0d27c5..a06e13a 100644
--- a/src/main/groovy/groovy/ui/GroovySocketServer.java
+++ b/src/main/groovy/groovy/ui/GroovySocketServer.java
@@ -60,8 +60,6 @@ import java.util.regex.Pattern;
  * <li>out - The output PrintWriter, should you need it for some reason.</li> 
  * <li>socket - The socket, should you need it for some reason.</li> 
  * </ul>
- * 
- * @author Jeremy Rayner
  */
 public class GroovySocketServer implements Runnable {
     private URL url;
diff --git a/src/main/groovy/groovy/util/AbstractFactory.java b/src/main/groovy/groovy/util/AbstractFactory.java
index 54e68e1..eb8d509 100644
--- a/src/main/groovy/groovy/util/AbstractFactory.java
+++ b/src/main/groovy/groovy/util/AbstractFactory.java
@@ -22,10 +22,6 @@ import groovy.lang.Closure;
 
 import java.util.Map;
 
-/**
- * @author <a href="mailto:aalmiray@users.sourceforge.com">Andres Almiray</a>
- * @author Danno Ferrin
- */
 public abstract class AbstractFactory implements Factory {
     public boolean isLeaf() {
         return false;
diff --git a/src/main/groovy/groovy/util/BufferedIterator.java b/src/main/groovy/groovy/util/BufferedIterator.java
index 6fa50a9..74acfeb 100644
--- a/src/main/groovy/groovy/util/BufferedIterator.java
+++ b/src/main/groovy/groovy/util/BufferedIterator.java
@@ -23,7 +23,6 @@ import java.util.Iterator;
 /**
  * An iterator that allows examining the next element without consuming it.
  *
- * @author Andrew Taylor
  * @since 2.5.0
  */
 public interface BufferedIterator<T> extends Iterator<T> {
diff --git a/src/main/groovy/groovy/util/BuilderSupport.java b/src/main/groovy/groovy/util/BuilderSupport.java
index f634f1f..ceccd87 100644
--- a/src/main/groovy/groovy/util/BuilderSupport.java
+++ b/src/main/groovy/groovy/util/BuilderSupport.java
@@ -28,10 +28,7 @@ import java.util.List;
 import java.util.Map;
 
 /**
- * An abstract base class for creating arbitrary nested trees of objects
- * or events
- *
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
+ * An abstract base class for creating arbitrary nested trees of objects or events
  */
 public abstract class BuilderSupport extends GroovyObjectSupport {
 
diff --git a/src/main/groovy/groovy/util/CharsetToolkit.java b/src/main/groovy/groovy/util/CharsetToolkit.java
index d547cc7..7b2d0d8 100644
--- a/src/main/groovy/groovy/util/CharsetToolkit.java
+++ b/src/main/groovy/groovy/util/CharsetToolkit.java
@@ -55,8 +55,6 @@ import java.util.Collection;
  *     System.out.println(line);
  * }
  * </pre>
- *
- * @author Guillaume Laforge
  */
 public class CharsetToolkit {
     private static final Charset[] EMPTY_CHARSET_ARRAY = new Charset[0];
diff --git a/src/main/groovy/groovy/util/ClosureComparator.java b/src/main/groovy/groovy/util/ClosureComparator.java
index dc70ea6..a791521 100644
--- a/src/main/groovy/groovy/util/ClosureComparator.java
+++ b/src/main/groovy/groovy/util/ClosureComparator.java
@@ -26,8 +26,6 @@ import java.util.Comparator;
 
 /**
  * A Comparator which uses a closure to compare 2 values being equal
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public class ClosureComparator<T> implements Comparator<T>, Serializable {
 
diff --git a/src/main/groovy/groovy/util/ConfigObject.java b/src/main/groovy/groovy/util/ConfigObject.java
index d584204..27ed12f 100644
--- a/src/main/groovy/groovy/util/ConfigObject.java
+++ b/src/main/groovy/groovy/util/ConfigObject.java
@@ -43,8 +43,6 @@ import java.util.Set;
  * This means that navigating to foo.bar.stuff will not return null but nested ConfigObjects which are of course empty maps
  * The Groovy truth can be used to check for the existence of "real" entries.
  *
- * @author Graeme Rocher
- * @author Guillaume Laforge (rewrite in Java related to security constraints on Google App Engine)
  * @since 1.5
  */
 public class ConfigObject extends GroovyObjectSupport implements Writable, Map, Cloneable {
diff --git a/src/main/groovy/groovy/util/DelegatingScript.java b/src/main/groovy/groovy/util/DelegatingScript.java
index 959c8e8..540b098 100644
--- a/src/main/groovy/groovy/util/DelegatingScript.java
+++ b/src/main/groovy/groovy/util/DelegatingScript.java
@@ -82,8 +82,6 @@ import org.codehaus.groovy.runtime.InvokerHelper;
  * binding.setProperty("a",1);
  * ((Closure)binding.getProperty("b")).call(2);
  * </pre>
- *
- * @author Kohsuke Kawaguchi
  */
 public abstract class DelegatingScript extends Script {
     private Object delegate;
diff --git a/src/main/groovy/groovy/util/Eval.java b/src/main/groovy/groovy/util/Eval.java
index 87f9295..dba875d 100644
--- a/src/main/groovy/groovy/util/Eval.java
+++ b/src/main/groovy/groovy/util/Eval.java
@@ -34,7 +34,6 @@ import org.codehaus.groovy.control.CompilationFailedException;
  * </pre>
  * 
  * @see GroovyShell
- * @author Dierk Koenig
  */
 
 public class Eval {
diff --git a/src/main/groovy/groovy/util/Expando.java b/src/main/groovy/groovy/util/Expando.java
index 7b2279a..21a2931 100644
--- a/src/main/groovy/groovy/util/Expando.java
+++ b/src/main/groovy/groovy/util/Expando.java
@@ -33,10 +33,6 @@ import java.util.Map.Entry;
 
 /**
  * Represents a dynamically expandable bean.
- *
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @author Hein Meling
- * @author Pilho Kim
  */
 public class Expando extends GroovyObjectSupport {
 
diff --git a/src/main/groovy/groovy/util/Factory.java b/src/main/groovy/groovy/util/Factory.java
index c8e8fc7..42d831f 100644
--- a/src/main/groovy/groovy/util/Factory.java
+++ b/src/main/groovy/groovy/util/Factory.java
@@ -22,10 +22,6 @@ import groovy.lang.Closure;
 
 import java.util.Map;
 
-/**
- * @author <a href="mailto:aalmiray@users.sourceforge.com">Andres Almiray</a>
- * @author Danno Ferrin
- */
 public interface Factory {
     /**
      *
diff --git a/src/main/groovy/groovy/util/FactoryBuilderSupport.java b/src/main/groovy/groovy/util/FactoryBuilderSupport.java
index 1074e53..2f9347c 100644
--- a/src/main/groovy/groovy/util/FactoryBuilderSupport.java
+++ b/src/main/groovy/groovy/util/FactoryBuilderSupport.java
@@ -55,10 +55,6 @@ import java.util.logging.Logger;
  * across threads in a multi-threaded environment.  A locking mechanism
  * should be implemented by the subclass if use is expected across
  * multiple threads.
- *
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @author <a href="mailto:aalmiray@users.sourceforge.com">Andres Almiray</a>
- * @author Danno Ferrin
  */
 public abstract class FactoryBuilderSupport extends Binding {
     public static final String CURRENT_FACTORY = "_CURRENT_FACTORY_";
diff --git a/src/main/groovy/groovy/util/GroovyCollections.java b/src/main/groovy/groovy/util/GroovyCollections.java
index 19bef50..e70230c 100644
--- a/src/main/groovy/groovy/util/GroovyCollections.java
+++ b/src/main/groovy/groovy/util/GroovyCollections.java
@@ -31,9 +31,6 @@ import java.util.Set;
 
 /**
  * A Collections utility class
- *
- * @author Paul King
- * @author Jim White
  */
 public class GroovyCollections {
     /**
diff --git a/src/main/groovy/groovy/util/GroovyScriptEngine.java b/src/main/groovy/groovy/util/GroovyScriptEngine.java
index c9e0c5b..38ce3fd 100644
--- a/src/main/groovy/groovy/util/GroovyScriptEngine.java
+++ b/src/main/groovy/groovy/util/GroovyScriptEngine.java
@@ -59,12 +59,6 @@ import java.util.concurrent.ConcurrentHashMap;
 /**
  * Specific script engine able to reload modified scripts as well as dealing properly
  * with dependent scripts.
- *
- * @author sam
- * @author Marc Palmer
- * @author Guillaume Laforge
- * @author Jochen Theodorou
- * @author Mattias Reichel
  */
 public class GroovyScriptEngine implements ResourceConnector {
     private static final ClassLoader CL_STUB = AccessController.doPrivileged(new PrivilegedAction<ClassLoader>() {
diff --git a/src/main/groovy/groovy/util/IndentPrinter.java b/src/main/groovy/groovy/util/IndentPrinter.java
index df3d8c2..ccbec0f 100644
--- a/src/main/groovy/groovy/util/IndentPrinter.java
+++ b/src/main/groovy/groovy/util/IndentPrinter.java
@@ -57,8 +57,6 @@ import java.io.Writer;
  *   child 2
  * parent2
  * </pre>
- *
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public class IndentPrinter {
 
diff --git a/src/main/groovy/groovy/util/MapEntry.java b/src/main/groovy/groovy/util/MapEntry.java
index 9190fcd..55e023b 100644
--- a/src/main/groovy/groovy/util/MapEntry.java
+++ b/src/main/groovy/groovy/util/MapEntry.java
@@ -24,8 +24,6 @@ import java.util.Map;
 
 /**
  * A Map.Entry implementation.
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public class MapEntry implements Map.Entry {
 
diff --git a/src/main/groovy/groovy/util/Node.java b/src/main/groovy/groovy/util/Node.java
index 7063fba..91faad9 100644
--- a/src/main/groovy/groovy/util/Node.java
+++ b/src/main/groovy/groovy/util/Node.java
@@ -49,9 +49,6 @@ import java.util.Stack;
  * QName as the name which includes a namespace URI and a local name. Or a JMX ObjectName etc.
  * So this class can represent metadata like <code>{foo a=1 b="abc"}</code> or nested
  * metadata like <code>{foo a=1 b="123" { bar x=12 text="hello" }}</code>
- *
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @author Paul King
  */
 public class Node implements Serializable, Cloneable {
 
diff --git a/src/main/groovy/groovy/util/NodeBuilder.java b/src/main/groovy/groovy/util/NodeBuilder.java
index babe5c3..79a3864 100644
--- a/src/main/groovy/groovy/util/NodeBuilder.java
+++ b/src/main/groovy/groovy/util/NodeBuilder.java
@@ -23,8 +23,6 @@ import java.util.Map;
 /**
  * A helper class for creating nested trees of Node objects for 
  * handling arbitrary data
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public class NodeBuilder extends BuilderSupport {
 
diff --git a/src/main/groovy/groovy/util/NodePrinter.java b/src/main/groovy/groovy/util/NodePrinter.java
index ca93bc7..27dd774 100644
--- a/src/main/groovy/groovy/util/NodePrinter.java
+++ b/src/main/groovy/groovy/util/NodePrinter.java
@@ -27,9 +27,6 @@ import java.util.Map;
 
 /**
  * A helper class for creating nested trees of data
- *
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @author Christian Stein
  */
 public class NodePrinter {
 
diff --git a/src/main/groovy/groovy/util/ObjectGraphBuilder.java b/src/main/groovy/groovy/util/ObjectGraphBuilder.java
index 6dc1660..b26a966 100644
--- a/src/main/groovy/groovy/util/ObjectGraphBuilder.java
+++ b/src/main/groovy/groovy/util/ObjectGraphBuilder.java
@@ -37,9 +37,6 @@ import java.util.regex.Pattern;
  * A builder for creating object graphs.<br>
  * Each node defines the class to be created and the property on its parent (if
  * any) at the same time.
- *
- * @author Scott Vlaminck (http://refactr.com)
- * @author <a href="mailto:aalmiray@users.sourceforge.com">Andres Almiray</a>
  */
 public class ObjectGraphBuilder extends FactoryBuilderSupport {
     public static final String NODE_CLASS = "_NODE_CLASS_";
diff --git a/src/main/groovy/groovy/util/OrderBy.java b/src/main/groovy/groovy/util/OrderBy.java
index 703c9bc..a20d364 100644
--- a/src/main/groovy/groovy/util/OrderBy.java
+++ b/src/main/groovy/groovy/util/OrderBy.java
@@ -30,8 +30,6 @@ import java.util.List;
 /**
  * A helper class for sorting objects via a closure to return the field
  * or operation on which to sort.
- *
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public class OrderBy<T> implements Comparator<T>, Serializable {
 
diff --git a/src/main/groovy/groovy/util/Proxy.java b/src/main/groovy/groovy/util/Proxy.java
index ac080b3..a8ef890 100644
--- a/src/main/groovy/groovy/util/Proxy.java
+++ b/src/main/groovy/groovy/util/Proxy.java
@@ -28,9 +28,6 @@ import java.util.Iterator;
  * Dynamic groovy proxy for another object.  All method
  * invocations get forwarded to actual object, unless the proxy overrides it.
  * See groovy/util/ProxyTest.groovy for usage details.
- *
- * @author Troy Heninger
- * @author Dierk Koenig
  */
 public class Proxy extends GroovyObjectSupport {
 
diff --git a/src/main/groovy/groovy/util/ProxyGenerator.java b/src/main/groovy/groovy/util/ProxyGenerator.java
index 6ef591c..22fa9b3 100644
--- a/src/main/groovy/groovy/util/ProxyGenerator.java
+++ b/src/main/groovy/groovy/util/ProxyGenerator.java
@@ -44,10 +44,6 @@ import java.util.Set;
 /**
  * Classes to generate 'Proxy' objects which implement interfaces,
  * maps of closures and/or extend classes/delegates.
- *
- * @author Paul King
- * @author Guillaume Laforge
- * @author Cedric Champeau
  */
 public class ProxyGenerator {
     private static final Class[] EMPTY_CLASS_ARRAY = new Class[0];
diff --git a/src/main/groovy/groovy/util/ResourceConnector.java b/src/main/groovy/groovy/util/ResourceConnector.java
index 81e329a..a845d6f 100644
--- a/src/main/groovy/groovy/util/ResourceConnector.java
+++ b/src/main/groovy/groovy/util/ResourceConnector.java
@@ -22,8 +22,6 @@ import java.net.URLConnection;
 
 /**
  * Base interface for customizing where resources can be found for the <code>GroovyScriptEngine</code>.
- *
- * @author sam
  */
 public interface ResourceConnector {
 
diff --git a/src/main/groovy/groovy/util/ResourceException.java b/src/main/groovy/groovy/util/ResourceException.java
index 0f57b53..a017a6f 100644
--- a/src/main/groovy/groovy/util/ResourceException.java
+++ b/src/main/groovy/groovy/util/ResourceException.java
@@ -18,9 +18,6 @@
  */
 package groovy.util;
 
-/**
- * @author sam
- */
 public class ResourceException extends Exception {
 
     private static final long serialVersionUID = -4640685456255837192L;
diff --git a/src/main/groovy/groovy/util/ScriptException.java b/src/main/groovy/groovy/util/ScriptException.java
index 491b94a..f8dcf78 100644
--- a/src/main/groovy/groovy/util/ScriptException.java
+++ b/src/main/groovy/groovy/util/ScriptException.java
@@ -18,9 +18,6 @@
  */
 package groovy.util;
 
-/**
- * @author sam
- */
 public class ScriptException extends Exception {
 
     private static final long serialVersionUID = 3447547760007143671L;
diff --git a/src/main/groovy/org/codehaus/groovy/tools/ast/TransformTestHelper.groovy b/src/main/groovy/org/codehaus/groovy/tools/ast/TransformTestHelper.groovy
index bf59003..266ed76 100644
--- a/src/main/groovy/org/codehaus/groovy/tools/ast/TransformTestHelper.groovy
+++ b/src/main/groovy/org/codehaus/groovy/tools/ast/TransformTestHelper.groovy
@@ -29,21 +29,19 @@ import org.codehaus.groovy.transform.ASTTransformation
 
 import java.security.CodeSource
 
-/*
-* This TestHarness exists so that a global transform can be run without
-* using the Jar services mechanism, which requires building a jar.
-* 
-* To use this simply create an instance of TransformTestHelper with
-* an ASTTransformation and CompilePhase, then invoke parse(File) or
-* parse(String). 
-* 
-* This test harness is not exactly the same as executing a global transformation
-* but can greatly aide in debugging and testing a transform. You should still
-* test your global transformation when packaged as a jar service before
-* releasing it. 
-* 
-* @author Hamlet D'Arcy
-*/
+/**
+ * This TestHarness exists so that a global transform can be run without
+ * using the Jar services mechanism, which requires building a jar.
+ *
+ * To use this simply create an instance of TransformTestHelper with
+ * an ASTTransformation and CompilePhase, then invoke parse(File) or
+ * parse(String).
+ *
+ * This test harness is not exactly the same as executing a global transformation
+ * but can greatly aide in debugging and testing a transform. You should still
+ * test your global transformation when packaged as a jar service before
+ * releasing it.
+ */
 class TransformTestHelper {
 
     private final ASTTransformation transform
@@ -56,36 +54,35 @@ class TransformTestHelper {
      * @param phase
      *      the phase to run the transform in 
      */
-    def TransformTestHelper(ASTTransformation transform, CompilePhase phase) {
+    TransformTestHelper(ASTTransformation transform, CompilePhase phase) {
         this.transform = transform
         this.phase = phase
     }
 
     /**
      * Compiles the File into a Class applying the transform specified in the constructor.
-     * @input input
-     *      must be a groovy source file
+     * @input input*      must be a groovy source file
      */
-    public Class parse(File input) {
+    Class parse(File input) {
         TestHarnessClassLoader loader = new TestHarnessClassLoader(transform, phase)
         return loader.parseClass(input)
     }
 
     /**
      * Compiles the String into a Class applying the transform specified in the constructor.
-     * @input input
-     *      must be a valid groovy source string
+     * @input input*      must be a valid groovy source string
      */
-    public Class parse(String input) {
+    Class parse(String input) {
         TestHarnessClassLoader loader = new TestHarnessClassLoader(transform, phase)
         return loader.parseClass(input)
     }
 }
 
 /**
-* ClassLoader exists so that TestHarnessOperation can be wired into the compile. 
-*/
-@groovy.transform.PackageScope class TestHarnessClassLoader extends GroovyClassLoader {
+ * ClassLoader exists so that TestHarnessOperation can be wired into the compile.
+ */
+@groovy.transform.PackageScope
+class TestHarnessClassLoader extends GroovyClassLoader {
 
     private final ASTTransformation transform
     private final CompilePhase phase
@@ -103,17 +100,18 @@ class TransformTestHelper {
 }
 
 /**
-* Operation exists so that an AstTransformation can be run against the SourceUnit.
-*/
-@groovy.transform.PackageScope class TestHarnessOperation extends PrimaryClassNodeOperation {
+ * Operation exists so that an AstTransformation can be run against the SourceUnit.
+ */
+@groovy.transform.PackageScope
+class TestHarnessOperation extends PrimaryClassNodeOperation {
 
     private final ASTTransformation transform
 
-    def TestHarnessOperation(transform) {
+    TestHarnessOperation(transform) {
         this.transform = transform;
     }
 
-    public void call(SourceUnit source, GeneratorContext context, ClassNode classNode) {
+    void call(SourceUnit source, GeneratorContext context, ClassNode classNode) {
         transform.visit(null, source)
     }
 }
diff --git a/src/main/groovy/org/codehaus/groovy/transform/tailrec/ReturnAdderForClosures.groovy b/src/main/groovy/org/codehaus/groovy/transform/tailrec/ReturnAdderForClosures.groovy
index 64ebce7..a590660 100644
--- a/src/main/groovy/org/codehaus/groovy/transform/tailrec/ReturnAdderForClosures.groovy
+++ b/src/main/groovy/org/codehaus/groovy/transform/tailrec/ReturnAdderForClosures.groovy
@@ -29,8 +29,6 @@ import org.codehaus.groovy.classgen.ReturnAdder
 /**
  * Adds explicit return statements to implicit return points in a closure. This is necessary since
  * tail-recursion is detected by having the recursive call within the return statement.
- *
- * @author Johannes Link
  */
 class ReturnAdderForClosures extends CodeVisitorSupport {
 
@@ -38,7 +36,7 @@ class ReturnAdderForClosures extends CodeVisitorSupport {
         method.code.visit(this)
     }
 
-    public void visitClosureExpression(ClosureExpression expression) {
+    void visitClosureExpression(ClosureExpression expression) {
         //Create a dummy method with the closure's code as the method's code. Then user ReturnAdder, which only works for methods.
         MethodNode node = new MethodNode("dummy", 0, ClassHelper.OBJECT_TYPE, Parameter.EMPTY_ARRAY, ClassNode.EMPTY_ARRAY, expression.code);
         new ReturnAdder().visitMethod(node);
diff --git a/src/main/groovy/org/codehaus/groovy/transform/tailrec/ReturnStatementToIterationConverter.groovy b/src/main/groovy/org/codehaus/groovy/transform/tailrec/ReturnStatementToIterationConverter.groovy
index d489ff0..2eeeb59 100644
--- a/src/main/groovy/org/codehaus/groovy/transform/tailrec/ReturnStatementToIterationConverter.groovy
+++ b/src/main/groovy/org/codehaus/groovy/transform/tailrec/ReturnStatementToIterationConverter.groovy
@@ -45,8 +45,6 @@ import static org.codehaus.groovy.ast.tools.GeneralUtils.varX
  *
  * There's probably place for optimizing the amount of variable copying being done, e.g.
  * parameters that are only handed through must not be copied at all.
- *
- * @author Johannes Link
  */
 @CompileStatic
 class ReturnStatementToIterationConverter {
@@ -98,7 +96,7 @@ class ReturnStatementToIterationConverter {
         argAssignment
     }
 
-    private ExpressionStatement createTempDeclaration(int index,  Map<Integer, Map> positionMapping, Map<String, Map> tempMapping, Map tempDeclarations) {
+    private ExpressionStatement createTempDeclaration(int index, Map<Integer, Map> positionMapping, Map<String, Map> tempMapping, Map tempDeclarations) {
         String argName = positionMapping[index]['name']
         String tempName = "_${argName}_"
         ClassNode argAndTempType = positionMapping[index]['type'] as ClassNode
@@ -120,7 +118,7 @@ class ReturnStatementToIterationConverter {
     }
 
     private Set<String> replaceAllArgUsages(List<ExpressionStatement> iterationVariablesAssignmentNodes, Map<String, Map> tempMapping) {
-        Set<String> unusedTempNames = tempMapping.values().collect {Map nameAndType -> (String) nameAndType['name']} as Set<String>
+        Set<String> unusedTempNames = tempMapping.values().collect { Map nameAndType -> (String) nameAndType['name'] } as Set<String>
         VariableReplacedListener tracker = new UsedVariableTracker()
         for (ExpressionStatement statement : iterationVariablesAssignmentNodes) {
             replaceArgUsageByTempUsage((BinaryExpression) statement.expression, tempMapping, tracker)
diff --git a/src/main/groovy/org/codehaus/groovy/transform/tailrec/StatementReplacer.groovy b/src/main/groovy/org/codehaus/groovy/transform/tailrec/StatementReplacer.groovy
index 3a9dab3..3d16c9c 100644
--- a/src/main/groovy/org/codehaus/groovy/transform/tailrec/StatementReplacer.groovy
+++ b/src/main/groovy/org/codehaus/groovy/transform/tailrec/StatementReplacer.groovy
@@ -33,8 +33,6 @@ import org.codehaus.groovy.ast.stmt.WhileStatement
  * Tool for replacing Statement objects in an AST by other Statement instances.
  *
  * Within @TailRecursive it is used to swap ReturnStatements with looping back to RECUR label
- *
- * @author Johannes Link
  */
 @CompileStatic
 class StatementReplacer extends CodeVisitorSupport {
@@ -47,7 +45,7 @@ class StatementReplacer extends CodeVisitorSupport {
         root.visit(this)
     }
 
-    public void visitClosureExpression(ClosureExpression expression) {
+    void visitClosureExpression(ClosureExpression expression) {
         closureLevel++
         try {
             super.visitClosureExpression(expression)
@@ -56,7 +54,7 @@ class StatementReplacer extends CodeVisitorSupport {
         }
     }
 
-    public void visitBlockStatement(BlockStatement block) {
+    void visitBlockStatement(BlockStatement block) {
         List<Statement> copyOfStatements = new ArrayList<Statement>(block.statements)
         copyOfStatements.eachWithIndex { Statement statement, int index ->
             replaceIfNecessary(statement) { Statement node -> block.statements[index] = node }
@@ -64,23 +62,23 @@ class StatementReplacer extends CodeVisitorSupport {
         super.visitBlockStatement(block);
     }
 
-    public void visitIfElse(IfStatement ifElse) {
+    void visitIfElse(IfStatement ifElse) {
         replaceIfNecessary(ifElse.ifBlock) { Statement s -> ifElse.ifBlock = s }
         replaceIfNecessary(ifElse.elseBlock) { Statement s -> ifElse.elseBlock = s }
         super.visitIfElse(ifElse);
     }
 
-    public void visitForLoop(ForStatement forLoop) {
+    void visitForLoop(ForStatement forLoop) {
         replaceIfNecessary(forLoop.loopBlock) { Statement s -> forLoop.loopBlock = s }
         super.visitForLoop(forLoop);
     }
 
-    public void visitWhileLoop(WhileStatement loop) {
+    void visitWhileLoop(WhileStatement loop) {
         replaceIfNecessary(loop.loopBlock) { Statement s -> loop.loopBlock = s }
         super.visitWhileLoop(loop);
     }
 
-    public void visitDoWhileLoop(DoWhileStatement loop) {
+    void visitDoWhileLoop(DoWhileStatement loop) {
         replaceIfNecessary(loop.loopBlock) { Statement s -> loop.loopBlock = s }
         super.visitDoWhileLoop(loop);
     }
diff --git a/src/main/groovy/org/codehaus/groovy/transform/tailrec/TailRecursiveASTTransformation.groovy b/src/main/groovy/org/codehaus/groovy/transform/tailrec/TailRecursiveASTTransformation.groovy
index 0605f18..ee62a92 100644
--- a/src/main/groovy/org/codehaus/groovy/transform/tailrec/TailRecursiveASTTransformation.groovy
+++ b/src/main/groovy/org/codehaus/groovy/transform/tailrec/TailRecursiveASTTransformation.groovy
@@ -46,29 +46,27 @@ import org.codehaus.groovy.transform.GroovyASTTransformation
  * Handles generation of code for the @TailRecursive annotation.
  *
  * It's doing its work in the earliest possible compile phase
- *
- * @author Johannes Link
  */
 @CompileStatic
 @GroovyASTTransformation(phase = CompilePhase.SEMANTIC_ANALYSIS)
 class TailRecursiveASTTransformation extends AbstractASTTransformation {
 
-    private static final Class MY_CLASS = TailRecursive.class;
-    private static final ClassNode MY_TYPE = new ClassNode(MY_CLASS);
+    private static final Class MY_CLASS = TailRecursive.class
+    private static final ClassNode MY_TYPE = new ClassNode(MY_CLASS)
     static final String MY_TYPE_NAME = "@" + MY_TYPE.getNameWithoutPackage()
     private HasRecursiveCalls hasRecursiveCalls = new HasRecursiveCalls()
     private TernaryToIfStatementConverter ternaryToIfStatement = new TernaryToIfStatementConverter()
 
 
     @Override
-    public void visit(ASTNode[] nodes, SourceUnit source) {
-        init(nodes, source);
+    void visit(ASTNode[] nodes, SourceUnit source) {
+        init(nodes, source)
 
         MethodNode method = nodes[1] as MethodNode
 
         if (method.isAbstract()) {
-            addError("Annotation " + MY_TYPE_NAME + " cannot be used for abstract methods.", method);
-            return;
+            addError("Annotation " + MY_TYPE_NAME + " cannot be used for abstract methods.", method)
+            return
         }
 
         if (hasAnnotation(method, ClassHelper.make(Memoized))) {
@@ -86,7 +84,7 @@ class TailRecursiveASTTransformation extends AbstractASTTransformation {
         if (!hasRecursiveMethodCalls(method)) {
             AnnotationNode annotationNode = method.getAnnotations(ClassHelper.make(TailRecursive))[0]
             addError("No recursive calls detected. You must remove annotation " + MY_TYPE_NAME + ".", annotationNode)
-            return;
+            return
         }
 
         transformToIteration(method, source)
@@ -94,8 +92,8 @@ class TailRecursiveASTTransformation extends AbstractASTTransformation {
     }
 
     private boolean hasAnnotation(MethodNode methodNode, ClassNode annotation) {
-        List annots = methodNode.getAnnotations(annotation);
-        return (annots != null && annots.size() > 0);
+        List annots = methodNode.getAnnotations(annotation)
+        return (annots != null && annots.size() > 0)
     }
 
 
@@ -219,7 +217,7 @@ class TailRecursiveASTTransformation extends AbstractASTTransformation {
             if (!(statement instanceof ReturnStatement)) {
                 return false
             }
-            Expression inner = ((ReturnStatement )statement).expression
+            Expression inner = ((ReturnStatement) statement).expression
             if (!(inner instanceof MethodCallExpression) && !(inner instanceof StaticMethodCallExpression)) {
                 return false
             }
@@ -243,7 +241,7 @@ class TailRecursiveASTTransformation extends AbstractASTTransformation {
 
     private void ensureAllRecursiveCallsHaveBeenTransformed(MethodNode method) {
         List<Expression> remainingRecursiveCalls = new CollectRecursiveCalls().collect(method)
-        for(Expression expression : remainingRecursiveCalls) {
+        for (Expression expression : remainingRecursiveCalls) {
             addError("Recursive call could not be transformed by @TailRecursive. Maybe it's not a tail call.", expression)
         }
     }
diff --git a/src/main/groovy/org/codehaus/groovy/transform/tailrec/TernaryToIfStatementConverter.groovy b/src/main/groovy/org/codehaus/groovy/transform/tailrec/TernaryToIfStatementConverter.groovy
index c47e1d2..cbfc22a 100644
--- a/src/main/groovy/org/codehaus/groovy/transform/tailrec/TernaryToIfStatementConverter.groovy
+++ b/src/main/groovy/org/codehaus/groovy/transform/tailrec/TernaryToIfStatementConverter.groovy
@@ -27,8 +27,6 @@ import org.codehaus.groovy.ast.stmt.Statement
 /**
  * Since a ternary statement has more than one exit point tail-recursiveness testing cannot be easily done.
  * Therefore this class translates a ternary statement (or Elvis operator) into the equivalent if-else statement.
- *
- * @author Johannes Link
  */
 @CompileStatic
 class TernaryToIfStatementConverter {
diff --git a/src/main/groovy/org/codehaus/groovy/transform/tailrec/VariableAccessReplacer.groovy b/src/main/groovy/org/codehaus/groovy/transform/tailrec/VariableAccessReplacer.groovy
index d62dc46..cd9123e 100644
--- a/src/main/groovy/org/codehaus/groovy/transform/tailrec/VariableAccessReplacer.groovy
+++ b/src/main/groovy/org/codehaus/groovy/transform/tailrec/VariableAccessReplacer.groovy
@@ -28,8 +28,6 @@ import org.codehaus.groovy.ast.expr.VariableExpression
  * in nameAndTypeMapping before calling replaceIn().
  *
  * The VariableReplacedListener can be set if clients want to react to variable replacement.
- *
- * @author Johannes Link
  */
 @CompileStatic
 class VariableAccessReplacer {
diff --git a/src/main/groovy/org/codehaus/groovy/transform/tailrec/VariableExpressionReplacer.groovy b/src/main/groovy/org/codehaus/groovy/transform/tailrec/VariableExpressionReplacer.groovy
index 1f14490..8c7bb1c 100644
--- a/src/main/groovy/org/codehaus/groovy/transform/tailrec/VariableExpressionReplacer.groovy
+++ b/src/main/groovy/org/codehaus/groovy/transform/tailrec/VariableExpressionReplacer.groovy
@@ -48,8 +48,6 @@ import java.lang.reflect.Method
  * Within @TailRecursive it is used
  * - to swap the access of method args with the access to iteration variables
  * - to swap the access of iteration variables with the access of temp vars
- *
- * @author Johannes Link
  */
 @CompileStatic
 class VariableExpressionReplacer extends CodeVisitorSupport {
@@ -64,69 +62,69 @@ class VariableExpressionReplacer extends CodeVisitorSupport {
         root.visit(this)
     }
 
-    public void visitReturnStatement(ReturnStatement statement) {
+    void visitReturnStatement(ReturnStatement statement) {
         replaceExpressionPropertyWhenNecessary(statement)
-        super.visitReturnStatement(statement);
+        super.visitReturnStatement(statement)
     }
 
-    public void visitIfElse(IfStatement ifElse) {
+    void visitIfElse(IfStatement ifElse) {
         replaceExpressionPropertyWhenNecessary(ifElse, 'booleanExpression', BooleanExpression)
-        super.visitIfElse(ifElse);
+        super.visitIfElse(ifElse)
     }
 
-    public void visitForLoop(ForStatement forLoop) {
+    void visitForLoop(ForStatement forLoop) {
         replaceExpressionPropertyWhenNecessary(forLoop, 'collectionExpression')
-        super.visitForLoop(forLoop);
+        super.visitForLoop(forLoop)
     }
 
     /**
      * It's the only Expression type in which replacing is considered.
      * That's an abuse of the class, but I couldn't think of a better way.
      */
-    public void visitBinaryExpression(BinaryExpression expression) {
+    void visitBinaryExpression(BinaryExpression expression) {
         //A hack: Only replace right expression b/c ReturnStatementToIterationConverter needs it that way :-/
         replaceExpressionPropertyWhenNecessary(expression, 'rightExpression')
-        expression.getRightExpression().visit(this);
+        expression.getRightExpression().visit(this)
         super.visitBinaryExpression(expression)
     }
 
-    public void visitWhileLoop(WhileStatement loop) {
+    void visitWhileLoop(WhileStatement loop) {
         replaceExpressionPropertyWhenNecessary(loop, 'booleanExpression', BooleanExpression)
-        super.visitWhileLoop(loop);
+        super.visitWhileLoop(loop)
     }
 
-    public void visitDoWhileLoop(DoWhileStatement loop) {
+    void visitDoWhileLoop(DoWhileStatement loop) {
         replaceExpressionPropertyWhenNecessary(loop, 'booleanExpression', BooleanExpression)
-        super.visitDoWhileLoop(loop);
+        super.visitDoWhileLoop(loop)
     }
 
-    public void visitSwitch(SwitchStatement statement) {
+    void visitSwitch(SwitchStatement statement) {
         replaceExpressionPropertyWhenNecessary(statement)
         super.visitSwitch(statement)
     }
 
-    public void visitCaseStatement(CaseStatement statement) {
+    void visitCaseStatement(CaseStatement statement) {
         replaceExpressionPropertyWhenNecessary(statement)
         super.visitCaseStatement(statement)
     }
 
-    public void visitExpressionStatement(ExpressionStatement statement) {
+    void visitExpressionStatement(ExpressionStatement statement) {
         replaceExpressionPropertyWhenNecessary(statement)
-        super.visitExpressionStatement(statement);
+        super.visitExpressionStatement(statement)
     }
 
-    public void visitThrowStatement(ThrowStatement statement) {
+    void visitThrowStatement(ThrowStatement statement) {
         replaceExpressionPropertyWhenNecessary(statement)
         super.visitThrowStatement(statement)
     }
 
-    public void visitAssertStatement(AssertStatement statement) {
+    void visitAssertStatement(AssertStatement statement) {
         replaceExpressionPropertyWhenNecessary(statement, 'booleanExpression', BooleanExpression)
         replaceExpressionPropertyWhenNecessary(statement, 'messageExpression')
         super.visitAssertStatement(statement)
     }
 
-    public void visitSynchronizedStatement(SynchronizedStatement statement) {
+    void visitSynchronizedStatement(SynchronizedStatement statement) {
         replaceExpressionPropertyWhenNecessary(statement)
         super.visitSynchronizedStatement(statement)
     }
@@ -149,8 +147,8 @@ class VariableExpressionReplacer extends CodeVisitorSupport {
         //Use reflection to enable CompileStatic
         String setterName = 'set' + capitalizeFirst(propName)
         Method setExpressionMethod = node.class.getMethod(setterName, [propClass].toArray(new Class[1]))
-        newExpr.setSourcePosition(oldExpr);
-        newExpr.copyNodeMetaData(oldExpr);
+        newExpr.setSourcePosition(oldExpr)
+        newExpr.copyNodeMetaData(oldExpr)
         setExpressionMethod.invoke(node, [newExpr].toArray())
     }
 
diff --git a/src/main/groovy/org/codehaus/groovy/transform/tailrec/VariableExpressionTransformer.groovy b/src/main/groovy/org/codehaus/groovy/transform/tailrec/VariableExpressionTransformer.groovy
index 106a2f1..fea8d9d 100644
--- a/src/main/groovy/org/codehaus/groovy/transform/tailrec/VariableExpressionTransformer.groovy
+++ b/src/main/groovy/org/codehaus/groovy/transform/tailrec/VariableExpressionTransformer.groovy
@@ -25,8 +25,6 @@ import org.codehaus.groovy.ast.expr.VariableExpression
 
 /**
  * An expression transformer used in the process of replacing the access to variables
- *
- * @author Johannes Link
  */
 @CompileStatic
 class VariableExpressionTransformer implements ExpressionTransformer {
diff --git a/src/main/java/org/apache/groovy/util/concurrentlinkedhashmap/ConcurrentLinkedHashMap.java b/src/main/java/org/apache/groovy/util/concurrentlinkedhashmap/ConcurrentLinkedHashMap.java
index 938ef63..4ded89a 100644
--- a/src/main/java/org/apache/groovy/util/concurrentlinkedhashmap/ConcurrentLinkedHashMap.java
+++ b/src/main/java/org/apache/groovy/util/concurrentlinkedhashmap/ConcurrentLinkedHashMap.java
@@ -93,7 +93,6 @@ import static org.apache.groovy.util.concurrentlinkedhashmap.ConcurrentLinkedHas
  * predictable iteration order. A snapshot of the keys and entries may be
  * obtained in ascending and descending order of retention.
  *
- * @author ben.manes@gmail.com (Ben Manes)
  * @param <K> the type of keys maintained by this map
  * @param <V> the type of mapped values
  * @see <a href="http://code.google.com/p/concurrentlinkedhashmap/">
diff --git a/src/main/java/org/apache/groovy/util/concurrentlinkedhashmap/EntryWeigher.java b/src/main/java/org/apache/groovy/util/concurrentlinkedhashmap/EntryWeigher.java
index 1075c10..c4c34d6 100644
--- a/src/main/java/org/apache/groovy/util/concurrentlinkedhashmap/EntryWeigher.java
+++ b/src/main/java/org/apache/groovy/util/concurrentlinkedhashmap/EntryWeigher.java
@@ -21,7 +21,6 @@ import javax.annotation.concurrent.ThreadSafe;
  * A class that can determine the weight of an entry. The total weight threshold
  * is used to determine when an eviction is required.
  *
- * @author ben.manes@gmail.com (Ben Manes)
  * @see <a href="http://code.google.com/p/concurrentlinkedhashmap/">
  *      http://code.google.com/p/concurrentlinkedhashmap/</a>
  */
diff --git a/src/main/java/org/apache/groovy/util/concurrentlinkedhashmap/EvictionListener.java b/src/main/java/org/apache/groovy/util/concurrentlinkedhashmap/EvictionListener.java
index 4b608a0..74646c4 100644
--- a/src/main/java/org/apache/groovy/util/concurrentlinkedhashmap/EvictionListener.java
+++ b/src/main/java/org/apache/groovy/util/concurrentlinkedhashmap/EvictionListener.java
@@ -31,7 +31,6 @@ import javax.annotation.concurrent.ThreadSafe;
  * performing the operation asynchronously, such as by submitting a task to an
  * {@link java.util.concurrent.ExecutorService}.
  *
- * @author ben.manes@gmail.com (Ben Manes)
  * @see <a href="http://code.google.com/p/concurrentlinkedhashmap/">
  *      http://code.google.com/p/concurrentlinkedhashmap/</a>
  */
diff --git a/src/main/java/org/apache/groovy/util/concurrentlinkedhashmap/LinkedDeque.java b/src/main/java/org/apache/groovy/util/concurrentlinkedhashmap/LinkedDeque.java
index 447b769..27d8613 100644
--- a/src/main/java/org/apache/groovy/util/concurrentlinkedhashmap/LinkedDeque.java
+++ b/src/main/java/org/apache/groovy/util/concurrentlinkedhashmap/LinkedDeque.java
@@ -39,7 +39,6 @@ import java.util.NoSuchElementException;
  * the iterator risks arbitrary, non-deterministic behavior at an undetermined
  * time in the future.
  *
- * @author ben.manes@gmail.com (Ben Manes)
  * @param <E> the type of elements held in this collection
  * @see <a href="http://code.google.com/p/concurrentlinkedhashmap/">
  *      http://code.google.com/p/concurrentlinkedhashmap/</a>
diff --git a/src/main/java/org/apache/groovy/util/concurrentlinkedhashmap/Weigher.java b/src/main/java/org/apache/groovy/util/concurrentlinkedhashmap/Weigher.java
index c7eac09..ef3910d 100644
--- a/src/main/java/org/apache/groovy/util/concurrentlinkedhashmap/Weigher.java
+++ b/src/main/java/org/apache/groovy/util/concurrentlinkedhashmap/Weigher.java
@@ -21,7 +21,6 @@ import javax.annotation.concurrent.ThreadSafe;
  * A class that can determine the weight of a value. The total weight threshold
  * is used to determine when an eviction is required.
  *
- * @author ben.manes@gmail.com (Ben Manes)
  * @see <a href="http://code.google.com/p/concurrentlinkedhashmap/">
  *      http://code.google.com/p/concurrentlinkedhashmap/</a>
  */
diff --git a/src/main/java/org/apache/groovy/util/concurrentlinkedhashmap/Weighers.java b/src/main/java/org/apache/groovy/util/concurrentlinkedhashmap/Weighers.java
index 6fd9b25..6713c4a 100644
--- a/src/main/java/org/apache/groovy/util/concurrentlinkedhashmap/Weighers.java
+++ b/src/main/java/org/apache/groovy/util/concurrentlinkedhashmap/Weighers.java
@@ -27,7 +27,6 @@ import static org.apache.groovy.util.concurrentlinkedhashmap.ConcurrentLinkedHas
 /**
  * A common set of {@link Weigher} and {@link EntryWeigher} implementations.
  *
- * @author ben.manes@gmail.com (Ben Manes)
  * @see <a href="http://code.google.com/p/concurrentlinkedhashmap/">
  *      http://code.google.com/p/concurrentlinkedhashmap/</a>
  */
diff --git a/src/main/java/org/codehaus/groovy/antlr/AntlrASTProcessSnippets.java b/src/main/java/org/codehaus/groovy/antlr/AntlrASTProcessSnippets.java
index 94e8bf1..1373649 100644
--- a/src/main/java/org/codehaus/groovy/antlr/AntlrASTProcessSnippets.java
+++ b/src/main/java/org/codehaus/groovy/antlr/AntlrASTProcessSnippets.java
@@ -21,8 +21,6 @@ package org.codehaus.groovy.antlr;
 /**
  * Process to decorate antlr AST with ending line/col info, and if
  * possible the snippet of source from the start/end line/col for each node.
- *
- * @author <a href="mailto:groovy@ross-rayner.com">Jeremy Rayner</a>
  */
 
 import antlr.collections.AST;
diff --git a/src/main/java/org/codehaus/groovy/antlr/AntlrASTProcessor.java b/src/main/java/org/codehaus/groovy/antlr/AntlrASTProcessor.java
index 924f91f..4eea485 100644
--- a/src/main/java/org/codehaus/groovy/antlr/AntlrASTProcessor.java
+++ b/src/main/java/org/codehaus/groovy/antlr/AntlrASTProcessor.java
@@ -22,8 +22,6 @@ import antlr.collections.AST;
 
 /**
  * An interface for processing antlr AST objects
- *
- * @author <a href="mailto:groovy@ross-rayner.com">Jeremy Rayner</a>
  */
 public interface AntlrASTProcessor {
     /**
diff --git a/src/main/java/org/codehaus/groovy/antlr/AntlrParserPlugin.java b/src/main/java/org/codehaus/groovy/antlr/AntlrParserPlugin.java
index 02e3e49..40362d0 100644
--- a/src/main/java/org/codehaus/groovy/antlr/AntlrParserPlugin.java
+++ b/src/main/java/org/codehaus/groovy/antlr/AntlrParserPlugin.java
@@ -133,8 +133,6 @@ import java.util.Set;
 
 /**
  * A parser plugin which adapts the JSR Antlr Parser to the Groovy runtime
- *
- * @author <a href="mailto:jstrachan@protique.com">James Strachan</a>
  */
 public class AntlrParserPlugin extends ASTHelper implements ParserPlugin, GroovyTokenTypes {
 
diff --git a/src/main/java/org/codehaus/groovy/antlr/GroovySourceToken.java b/src/main/java/org/codehaus/groovy/antlr/GroovySourceToken.java
index 38ffba0..b4b6ab8 100644
--- a/src/main/java/org/codehaus/groovy/antlr/GroovySourceToken.java
+++ b/src/main/java/org/codehaus/groovy/antlr/GroovySourceToken.java
@@ -22,8 +22,6 @@ import antlr.Token;
 
 /**
  * This is a Token sub class to track line information 
- * 
- * @author Jochen Theodorou
  */
 public class GroovySourceToken extends Token implements SourceInfo{
     protected int line;
diff --git a/src/main/java/org/codehaus/groovy/antlr/LineColumn.java b/src/main/java/org/codehaus/groovy/antlr/LineColumn.java
index c7e11b6..ab0e3a7 100644
--- a/src/main/java/org/codehaus/groovy/antlr/LineColumn.java
+++ b/src/main/java/org/codehaus/groovy/antlr/LineColumn.java
@@ -20,8 +20,6 @@ package org.codehaus.groovy.antlr;
 
 /**
  * An object representing a line and column position
- *
- * @author <a href="mailto:groovy@ross-rayner.com">Jeremy Rayner</a>
  */
 public class LineColumn {
     private int line;
diff --git a/src/main/java/org/codehaus/groovy/antlr/SourceBuffer.java b/src/main/java/org/codehaus/groovy/antlr/SourceBuffer.java
index 558370f..6498499 100644
--- a/src/main/java/org/codehaus/groovy/antlr/SourceBuffer.java
+++ b/src/main/java/org/codehaus/groovy/antlr/SourceBuffer.java
@@ -24,8 +24,6 @@ import java.util.List;
 /**
  * A simple buffer that provides line/col access to chunks of source code
  * held within itself.
- *
- * @author <a href="mailto:groovy@ross-rayner.com">Jeremy Rayner</a>
  */
 public class SourceBuffer {
     private final List<StringBuilder> lines;
diff --git a/src/main/java/org/codehaus/groovy/antlr/UnicodeLexerSharedInputState.java b/src/main/java/org/codehaus/groovy/antlr/UnicodeLexerSharedInputState.java
index 2e90b2e..0716588 100644
--- a/src/main/java/org/codehaus/groovy/antlr/UnicodeLexerSharedInputState.java
+++ b/src/main/java/org/codehaus/groovy/antlr/UnicodeLexerSharedInputState.java
@@ -22,7 +22,6 @@ import antlr.LexerSharedInputState;
 
 /**
  * GRECLIPSE-805 Support for unicode escape sequences
- * @author Andrew Eisenberg
  */
 public class UnicodeLexerSharedInputState extends LexerSharedInputState {
     private final UnicodeEscapingReader escapingReader;
diff --git a/src/main/java/org/codehaus/groovy/antlr/treewalker/CompositeVisitor.java b/src/main/java/org/codehaus/groovy/antlr/treewalker/CompositeVisitor.java
index 305e397..c89b69d 100644
--- a/src/main/java/org/codehaus/groovy/antlr/treewalker/CompositeVisitor.java
+++ b/src/main/java/org/codehaus/groovy/antlr/treewalker/CompositeVisitor.java
@@ -34,8 +34,6 @@ import java.util.List;
  * composite.visitDefault() would...
  * call on the opening visit - a.visitDefault() then b.visitDefault() then c.visitDefault()
  * call on the closing visit - c.visitDefault() then b.visitDefault() then a.visitDefault()
- *
- * @author <a href="mailto:groovy@ross-rayner.com">Jeremy Rayner</a>
  */
 
 public class CompositeVisitor implements Visitor{
diff --git a/src/main/java/org/codehaus/groovy/antlr/treewalker/FlatNodeListTraversal.java b/src/main/java/org/codehaus/groovy/antlr/treewalker/FlatNodeListTraversal.java
index 6f17dfe..d64fa20 100644
--- a/src/main/java/org/codehaus/groovy/antlr/treewalker/FlatNodeListTraversal.java
+++ b/src/main/java/org/codehaus/groovy/antlr/treewalker/FlatNodeListTraversal.java
@@ -27,8 +27,6 @@ import java.util.List;
 
 /**
  * A simple iterator over an ordered (flat) List of the nodes of the AST.
- *
- * @author <a href="mailto:groovy@ross-rayner.com">Jeremy Rayner</a>
  */
 public class FlatNodeListTraversal extends TraversalHelper {
     
diff --git a/src/main/java/org/codehaus/groovy/antlr/treewalker/MindMapPrinter.java b/src/main/java/org/codehaus/groovy/antlr/treewalker/MindMapPrinter.java
index 7271466..d4d9935 100644
--- a/src/main/java/org/codehaus/groovy/antlr/treewalker/MindMapPrinter.java
+++ b/src/main/java/org/codehaus/groovy/antlr/treewalker/MindMapPrinter.java
@@ -27,8 +27,6 @@ import java.io.PrintStream;
 
 /**
  * An antlr AST visitor that prints a format suitable for viewing in http://freemind.sourceforge.net
- *
- * @author <a href="mailto:groovy@ross-rayner.com">Jeremy Rayner</a>
  */
 
 public class MindMapPrinter extends VisitorAdapter {
diff --git a/src/main/java/org/codehaus/groovy/antlr/treewalker/NodeAsHTMLPrinter.java b/src/main/java/org/codehaus/groovy/antlr/treewalker/NodeAsHTMLPrinter.java
index d9e985f..4b49abd 100644
--- a/src/main/java/org/codehaus/groovy/antlr/treewalker/NodeAsHTMLPrinter.java
+++ b/src/main/java/org/codehaus/groovy/antlr/treewalker/NodeAsHTMLPrinter.java
@@ -26,10 +26,7 @@ import java.util.Stack;
 
 /**
  * A visitor that prints a html tags of each node to the supplied PrintStream
- *
- * @author <a href="mailto:groovy@ross-rayner.com">Jeremy Rayner</a>
  */
-
 public class NodeAsHTMLPrinter extends VisitorAdapter {
     private final String[] tokenNames;
     private final PrintStream out;
diff --git a/src/main/java/org/codehaus/groovy/antlr/treewalker/NodeCollector.java b/src/main/java/org/codehaus/groovy/antlr/treewalker/NodeCollector.java
index 5c9659b..dfeacac 100644
--- a/src/main/java/org/codehaus/groovy/antlr/treewalker/NodeCollector.java
+++ b/src/main/java/org/codehaus/groovy/antlr/treewalker/NodeCollector.java
@@ -25,10 +25,7 @@ import java.util.List;
 
 /**
  * A simple antlr AST visitor that collects all nodes into a List.
- *
- * @author <a href="mailto:groovy@ross-rayner.com">Jeremy Rayner</a>
  */
-
 public class NodeCollector extends VisitorAdapter {
     private final List nodes;
     public NodeCollector() {
diff --git a/src/main/java/org/codehaus/groovy/antlr/treewalker/NodePrinter.java b/src/main/java/org/codehaus/groovy/antlr/treewalker/NodePrinter.java
index 2710f4d..eef7726 100644
--- a/src/main/java/org/codehaus/groovy/antlr/treewalker/NodePrinter.java
+++ b/src/main/java/org/codehaus/groovy/antlr/treewalker/NodePrinter.java
@@ -24,10 +24,7 @@ import java.io.PrintStream;
 
 /**
  * A simple antlr AST visitor that outputs the tokenName of each node in a pseudo xml style.
- *
- * @author <a href="mailto:groovy@ross-rayner.com">Jeremy Rayner</a>
  */
-
 public class NodePrinter extends VisitorAdapter {
     private final String[] tokenNames;
     private final PrintStream out;
diff --git a/src/main/java/org/codehaus/groovy/antlr/treewalker/PreOrderTraversal.java b/src/main/java/org/codehaus/groovy/antlr/treewalker/PreOrderTraversal.java
index 7cbd032..a4a57b4 100644
--- a/src/main/java/org/codehaus/groovy/antlr/treewalker/PreOrderTraversal.java
+++ b/src/main/java/org/codehaus/groovy/antlr/treewalker/PreOrderTraversal.java
@@ -22,8 +22,6 @@ import org.codehaus.groovy.antlr.GroovySourceAST;
 
 /**
  * A simple preorder traversal over the supplied antlr AST.
- *
- * @author <a href="mailto:groovy@ross-rayner.com">Jeremy Rayner</a>
  */
 public class PreOrderTraversal extends TraversalHelper {
     
diff --git a/src/main/java/org/codehaus/groovy/antlr/treewalker/SourceCodeTraversal.java b/src/main/java/org/codehaus/groovy/antlr/treewalker/SourceCodeTraversal.java
index ce2a236..aa16d9c 100644
--- a/src/main/java/org/codehaus/groovy/antlr/treewalker/SourceCodeTraversal.java
+++ b/src/main/java/org/codehaus/groovy/antlr/treewalker/SourceCodeTraversal.java
@@ -27,8 +27,6 @@ import java.util.Collections;
 /**
  * A treewalker for the antlr generated AST that attempts to visit the
  * AST nodes in the order needed to generate valid groovy source code.
- *
- * @author <a href="mailto:groovy@ross-rayner.com">Jeremy Rayner</a>
  */
 public class SourceCodeTraversal extends TraversalHelper {
     /**
diff --git a/src/main/java/org/codehaus/groovy/antlr/treewalker/SourcePrinter.java b/src/main/java/org/codehaus/groovy/antlr/treewalker/SourcePrinter.java
index 3db3565..9e67405 100644
--- a/src/main/java/org/codehaus/groovy/antlr/treewalker/SourcePrinter.java
+++ b/src/main/java/org/codehaus/groovy/antlr/treewalker/SourcePrinter.java
@@ -28,10 +28,7 @@ import java.util.Stack;
 /**
  * An antlr AST visitor that prints groovy source code for each visited node
  * to the supplied PrintStream.
- *
- * @author <a href="mailto:groovy@ross-rayner.com">Jeremy Rayner</a>
  */
-
 public class SourcePrinter extends VisitorAdapter {
     private final String[] tokenNames;
     private int tabLevel;
@@ -65,7 +62,6 @@ public class SourcePrinter extends VisitorAdapter {
         this.newLines = newLines;
         this.stack = new Stack();
     }
-    
 
     public void visitAbstract(GroovySourceAST t, int visit) {
         print(t,visit,"abstract ",null,null);
diff --git a/src/main/java/org/codehaus/groovy/antlr/treewalker/TraversalHelper.java b/src/main/java/org/codehaus/groovy/antlr/treewalker/TraversalHelper.java
index dcae1a8..138c977 100644
--- a/src/main/java/org/codehaus/groovy/antlr/treewalker/TraversalHelper.java
+++ b/src/main/java/org/codehaus/groovy/antlr/treewalker/TraversalHelper.java
@@ -28,8 +28,6 @@ import java.util.List;
 
 /**
  * Helper Class for Antlr AST traversal and visitation.
- *
- * @author <a href="mailto:groovy@ross-rayner.com">Jeremy Rayner</a>
  */
 public abstract class TraversalHelper implements AntlrASTProcessor {
     protected List<GroovySourceAST> unvisitedNodes;
diff --git a/src/main/java/org/codehaus/groovy/antlr/treewalker/Visitor.java b/src/main/java/org/codehaus/groovy/antlr/treewalker/Visitor.java
index 841e4ca..5cf0e91 100644
--- a/src/main/java/org/codehaus/groovy/antlr/treewalker/Visitor.java
+++ b/src/main/java/org/codehaus/groovy/antlr/treewalker/Visitor.java
@@ -22,10 +22,7 @@ import org.codehaus.groovy.antlr.GroovySourceAST;
 
 /**
  * An interface for visiting a GroovySourceAST node.
- *
- * @author <a href="mailto:groovy@ross-rayner.com">Jeremy Rayner</a>
  */
-
 public interface Visitor {
     int OPENING_VISIT = 1;
     int SECOND_VISIT = 2; // only used on rare occasions, e.g. the '(' in this snippet...   @Foo  (  a=1, b=2, c=3)
diff --git a/src/main/java/org/codehaus/groovy/antlr/treewalker/VisitorAdapter.java b/src/main/java/org/codehaus/groovy/antlr/treewalker/VisitorAdapter.java
index a6e8063..36145e8 100644
--- a/src/main/java/org/codehaus/groovy/antlr/treewalker/VisitorAdapter.java
+++ b/src/main/java/org/codehaus/groovy/antlr/treewalker/VisitorAdapter.java
@@ -25,10 +25,7 @@ import org.codehaus.groovy.antlr.GroovySourceAST;
  * A default implementation of all visitor methods.
  * If you extend this class, any un-overridden visit methods will
  * call visitDefault.
- *
- * @author <a href="mailto:groovy@ross-rayner.com">Jeremy Rayner</a>
  */
-
 public class VisitorAdapter implements Visitor {
     public void setUp() {}
     public void visitAbstract(GroovySourceAST t,int visit) {visitDefault(t,visit);}
diff --git a/src/main/java/org/codehaus/groovy/ast/ASTNode.java b/src/main/java/org/codehaus/groovy/ast/ASTNode.java
index d8ef876..3b68f1e 100644
--- a/src/main/java/org/codehaus/groovy/ast/ASTNode.java
+++ b/src/main/java/org/codehaus/groovy/ast/ASTNode.java
@@ -43,9 +43,6 @@ import java.util.Objects;
  * method will not be called for this purpose anymore and might be removed in
  * future versions of Groovy</li>
  * </ul>
- *
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @author <a href="mailto:blackdrag@gmx.org">Jochen "blackdrag" Theodorou</a>
  */
 public class ASTNode {
 
diff --git a/src/main/java/org/codehaus/groovy/ast/AnnotatedNode.java b/src/main/java/org/codehaus/groovy/ast/AnnotatedNode.java
index ab5f2eb..8f51f39 100644
--- a/src/main/java/org/codehaus/groovy/ast/AnnotatedNode.java
+++ b/src/main/java/org/codehaus/groovy/ast/AnnotatedNode.java
@@ -24,8 +24,6 @@ import java.util.List;
 
 /**
  * Base class for any AST node which is capable of being annotated
- *
- * @author <a href="mailto:jstrachan@protique.com">James Strachan</a>
  */
 public class AnnotatedNode extends ASTNode {
     private List<AnnotationNode> annotations = Collections.emptyList();
diff --git a/src/main/java/org/codehaus/groovy/ast/AstToTextHelper.java b/src/main/java/org/codehaus/groovy/ast/AstToTextHelper.java
index 3599fbf..80dde3f 100644
--- a/src/main/java/org/codehaus/groovy/ast/AstToTextHelper.java
+++ b/src/main/java/org/codehaus/groovy/ast/AstToTextHelper.java
@@ -22,7 +22,6 @@ import java.lang.reflect.Modifier;
 
 /**
  * Helper class for converting AST into text.
- * @author Hamlet D'Arcy
  */
 public class AstToTextHelper {
 
diff --git a/src/main/java/org/codehaus/groovy/ast/ClassCodeExpressionTransformer.java b/src/main/java/org/codehaus/groovy/ast/ClassCodeExpressionTransformer.java
index 06ef44d..65bbddd 100644
--- a/src/main/java/org/codehaus/groovy/ast/ClassCodeExpressionTransformer.java
+++ b/src/main/java/org/codehaus/groovy/ast/ClassCodeExpressionTransformer.java
@@ -1,146 +1,144 @@
-/*
- *  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.ast;
-
-import org.codehaus.groovy.ast.expr.BooleanExpression;
-import org.codehaus.groovy.ast.expr.Expression;
-import org.codehaus.groovy.ast.expr.ExpressionTransformer;
-import org.codehaus.groovy.ast.stmt.AssertStatement;
-import org.codehaus.groovy.ast.stmt.CaseStatement;
-import org.codehaus.groovy.ast.stmt.DoWhileStatement;
-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.WhileStatement;
-
-import java.util.List;
-import java.util.Map;
-
-/**
- * Visitor to transform expressions in a whole class.
- * Transformed Expressions are usually not visited.
- *
- * @author Jochen Theodorou
- */
-public abstract class ClassCodeExpressionTransformer extends ClassCodeVisitorSupport implements ExpressionTransformer {
-
-    protected void visitConstructorOrMethod(MethodNode node, boolean isConstructor) {
-        for (Parameter p : node.getParameters()) {
-            if (p.hasInitialExpression()) {
-                Expression init = p.getInitialExpression();
-                p.setInitialExpression(transform(init));
-            }
-        }
-        super.visitConstructorOrMethod(node, isConstructor);
-    }
-
-    public void visitSwitch(SwitchStatement statement) {
-        Expression exp = statement.getExpression();
-        statement.setExpression(transform(exp));
-        for (CaseStatement caseStatement : statement.getCaseStatements()) {
-            caseStatement.visit(this);
-        }
-        statement.getDefaultStatement().visit(this);
-    }
-
-    public void visitField(FieldNode node) {
-        visitAnnotations(node);
-        Expression init = node.getInitialExpression();
-        node.setInitialValueExpression(transform(init));
-    }
-
-    public void visitProperty(PropertyNode node) {
-        visitAnnotations(node);
-        Statement statement = node.getGetterBlock();
-        visitClassCodeContainer(statement);
-
-        statement = node.getSetterBlock();
-        visitClassCodeContainer(statement);
-    }
-
-    public void visitIfElse(IfStatement ifElse) {
-        ifElse.setBooleanExpression((BooleanExpression) (transform(ifElse.getBooleanExpression())));
-        ifElse.getIfBlock().visit(this);
-        ifElse.getElseBlock().visit(this);
-    }
-
-    public Expression transform(Expression exp) {
-        if (exp == null) return null;
-        return exp.transformExpression(this);
-    }
-
-    public void visitAnnotations(AnnotatedNode node) {
-        List<AnnotationNode> annotations = node.getAnnotations();
-        if (annotations.isEmpty()) return;
-        for (AnnotationNode an : annotations) {
-            // skip built-in properties
-            if (an.isBuiltIn()) continue;
-            for (Map.Entry<String, Expression> member : an.getMembers().entrySet()) {
-                member.setValue(transform(member.getValue()));
-            }
-        }
-    }
-
-    public void visitReturnStatement(ReturnStatement statement) {
-        statement.setExpression(transform(statement.getExpression()));
-    }
-
-    public void visitAssertStatement(AssertStatement as) {
-        as.setBooleanExpression((BooleanExpression) (transform(as.getBooleanExpression())));
-        as.setMessageExpression(transform(as.getMessageExpression()));
-    }
-
-    public void visitCaseStatement(CaseStatement statement) {
-        statement.setExpression(transform(statement.getExpression()));
-        statement.getCode().visit(this);
-    }
-
-    public void visitDoWhileLoop(DoWhileStatement loop) {
-        loop.setBooleanExpression((BooleanExpression) (transform(loop.getBooleanExpression())));
-        super.visitDoWhileLoop(loop);
-    }
-
-    public void visitForLoop(ForStatement forLoop) {
-        forLoop.setCollectionExpression(transform(forLoop.getCollectionExpression()));
-        super.visitForLoop(forLoop);
-    }
-
-    public void visitSynchronizedStatement(SynchronizedStatement sync) {
-        sync.setExpression(transform(sync.getExpression()));
-        super.visitSynchronizedStatement(sync);
-    }
-
-    public void visitThrowStatement(ThrowStatement ts) {
-        ts.setExpression(transform(ts.getExpression()));
-    }
-
-    public void visitWhileLoop(WhileStatement loop) {
-        loop.setBooleanExpression((BooleanExpression) transform(loop.getBooleanExpression()));
-        super.visitWhileLoop(loop);
-    }
-
-    public void visitExpressionStatement(ExpressionStatement es) {
-        es.setExpression(transform(es.getExpression()));
-    }
-}
+/*
+ *  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.ast;
+
+import org.codehaus.groovy.ast.expr.BooleanExpression;
+import org.codehaus.groovy.ast.expr.Expression;
+import org.codehaus.groovy.ast.expr.ExpressionTransformer;
+import org.codehaus.groovy.ast.stmt.AssertStatement;
+import org.codehaus.groovy.ast.stmt.CaseStatement;
+import org.codehaus.groovy.ast.stmt.DoWhileStatement;
+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.WhileStatement;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Visitor to transform expressions in a whole class.
+ * Transformed Expressions are usually not visited.
+ */
+public abstract class ClassCodeExpressionTransformer extends ClassCodeVisitorSupport implements ExpressionTransformer {
+
+    protected void visitConstructorOrMethod(MethodNode node, boolean isConstructor) {
+        for (Parameter p : node.getParameters()) {
+            if (p.hasInitialExpression()) {
+                Expression init = p.getInitialExpression();
+                p.setInitialExpression(transform(init));
+            }
+        }
+        super.visitConstructorOrMethod(node, isConstructor);
+    }
+
+    public void visitSwitch(SwitchStatement statement) {
+        Expression exp = statement.getExpression();
+        statement.setExpression(transform(exp));
+        for (CaseStatement caseStatement : statement.getCaseStatements()) {
+            caseStatement.visit(this);
+        }
+        statement.getDefaultStatement().visit(this);
+    }
+
+    public void visitField(FieldNode node) {
+        visitAnnotations(node);
+        Expression init = node.getInitialExpression();
+        node.setInitialValueExpression(transform(init));
+    }
+
+    public void visitProperty(PropertyNode node) {
+        visitAnnotations(node);
+        Statement statement = node.getGetterBlock();
+        visitClassCodeContainer(statement);
+
+        statement = node.getSetterBlock();
+        visitClassCodeContainer(statement);
+    }
+
+    public void visitIfElse(IfStatement ifElse) {
+        ifElse.setBooleanExpression((BooleanExpression) (transform(ifElse.getBooleanExpression())));
+        ifElse.getIfBlock().visit(this);
+        ifElse.getElseBlock().visit(this);
+    }
+
+    public Expression transform(Expression exp) {
+        if (exp == null) return null;
+        return exp.transformExpression(this);
+    }
+
+    public void visitAnnotations(AnnotatedNode node) {
+        List<AnnotationNode> annotations = node.getAnnotations();
+        if (annotations.isEmpty()) return;
+        for (AnnotationNode an : annotations) {
+            // skip built-in properties
+            if (an.isBuiltIn()) continue;
+            for (Map.Entry<String, Expression> member : an.getMembers().entrySet()) {
+                member.setValue(transform(member.getValue()));
+            }
+        }
+    }
+
+    public void visitReturnStatement(ReturnStatement statement) {
+        statement.setExpression(transform(statement.getExpression()));
+    }
+
+    public void visitAssertStatement(AssertStatement as) {
+        as.setBooleanExpression((BooleanExpression) (transform(as.getBooleanExpression())));
+        as.setMessageExpression(transform(as.getMessageExpression()));
+    }
+
+    public void visitCaseStatement(CaseStatement statement) {
+        statement.setExpression(transform(statement.getExpression()));
+        statement.getCode().visit(this);
+    }
+
+    public void visitDoWhileLoop(DoWhileStatement loop) {
+        loop.setBooleanExpression((BooleanExpression) (transform(loop.getBooleanExpression())));
+        super.visitDoWhileLoop(loop);
+    }
+
+    public void visitForLoop(ForStatement forLoop) {
+        forLoop.setCollectionExpression(transform(forLoop.getCollectionExpression()));
+        super.visitForLoop(forLoop);
+    }
+
+    public void visitSynchronizedStatement(SynchronizedStatement sync) {
+        sync.setExpression(transform(sync.getExpression()));
+        super.visitSynchronizedStatement(sync);
+    }
+
+    public void visitThrowStatement(ThrowStatement ts) {
+        ts.setExpression(transform(ts.getExpression()));
+    }
+
+    public void visitWhileLoop(WhileStatement loop) {
+        loop.setBooleanExpression((BooleanExpression) transform(loop.getBooleanExpression()));
+        super.visitWhileLoop(loop);
+    }
+
+    public void visitExpressionStatement(ExpressionStatement es) {
+        es.setExpression(transform(es.getExpression()));
+    }
+}
diff --git a/src/main/java/org/codehaus/groovy/ast/CodeVisitorSupport.java b/src/main/java/org/codehaus/groovy/ast/CodeVisitorSupport.java
index 523475e..3c9d111 100644
--- a/src/main/java/org/codehaus/groovy/ast/CodeVisitorSupport.java
+++ b/src/main/java/org/codehaus/groovy/ast/CodeVisitorSupport.java
@@ -78,8 +78,6 @@ import java.util.List;
 /**
  * Abstract base class for any GroovyCodeVisitor which by default
  * just walks the code and expression tree
- *
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public abstract class CodeVisitorSupport implements GroovyCodeVisitor {
 
diff --git a/src/main/java/org/codehaus/groovy/ast/ConstructorNode.java b/src/main/java/org/codehaus/groovy/ast/ConstructorNode.java
index 2dcdc54..66fbed4 100644
--- a/src/main/java/org/codehaus/groovy/ast/ConstructorNode.java
+++ b/src/main/java/org/codehaus/groovy/ast/ConstructorNode.java
@@ -26,8 +26,6 @@ import org.codehaus.groovy.ast.stmt.Statement;
 
 /**
  * Represents a constructor declaration
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public class ConstructorNode extends MethodNode {
     
diff --git a/src/main/java/org/codehaus/groovy/ast/EnumConstantClassNode.java b/src/main/java/org/codehaus/groovy/ast/EnumConstantClassNode.java
index 4dae4d0..3660c1e 100644
--- a/src/main/java/org/codehaus/groovy/ast/EnumConstantClassNode.java
+++ b/src/main/java/org/codehaus/groovy/ast/EnumConstantClassNode.java
@@ -1,39 +1,37 @@
-/*
- *  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.ast;
-
-/**
- * Represents the anonymous inner class for an enum constant
- * This subtype is needed so that EnumVisitor can differentiate between the scenarios when a InnerClassNode
- * represents anonymous inner class for an enu constant and when it represents an enum class defined inside
- * another class
- * 
- * @author Roshan Dawrani
- */
-public class EnumConstantClassNode extends InnerClassNode {
-
-    /**
-     * @param name is the full name of the class
-     * @param modifiers the modifiers, @see org.objectweb.asm.Opcodes
-     * @param superClass the base class name - use "java.lang.Object" if no direct base class
-     */
-    public EnumConstantClassNode(ClassNode outerClass, String name, int modifiers, ClassNode superClass) {
-        super(outerClass, name, modifiers, superClass);
-    }
-}
+/*
+ *  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.ast;
+
+/**
+ * Represents the anonymous inner class for an enum constant
+ * This subtype is needed so that EnumVisitor can differentiate between the scenarios when a InnerClassNode
+ * represents anonymous inner class for an enu constant and when it represents an enum class defined inside
+ * another class
+ */
+public class EnumConstantClassNode extends InnerClassNode {
+
+    /**
+     * @param name is the full name of the class
+     * @param modifiers the modifiers, @see org.objectweb.asm.Opcodes
+     * @param superClass the base class name - use "java.lang.Object" if no direct base class
+     */
+    public EnumConstantClassNode(ClassNode outerClass, String name, int modifiers, ClassNode superClass) {
+        super(outerClass, name, modifiers, superClass);
+    }
+}
diff --git a/src/main/java/org/codehaus/groovy/ast/GenericsType.java b/src/main/java/org/codehaus/groovy/ast/GenericsType.java
index 28216e1..60cc6a7 100644
--- a/src/main/java/org/codehaus/groovy/ast/GenericsType.java
+++ b/src/main/java/org/codehaus/groovy/ast/GenericsType.java
@@ -32,7 +32,6 @@ import static org.codehaus.groovy.ast.ClassHelper.GROOVY_OBJECT_TYPE;
 /**
  * This class is used to describe generic type signatures for ClassNodes.
  *
- * @author Jochen Theodorou
  * @see ClassNode
  */
 public class GenericsType extends ASTNode {
diff --git a/src/main/java/org/codehaus/groovy/ast/GroovyClassVisitor.java b/src/main/java/org/codehaus/groovy/ast/GroovyClassVisitor.java
index e5dff83..1085979 100644
--- a/src/main/java/org/codehaus/groovy/ast/GroovyClassVisitor.java
+++ b/src/main/java/org/codehaus/groovy/ast/GroovyClassVisitor.java
@@ -24,8 +24,6 @@ package org.codehaus.groovy.ast;
  * 
  * @see org.codehaus.groovy.ast.ClassNode
  * @see org.codehaus.groovy.ast.ClassCodeVisitorSupport
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public interface GroovyClassVisitor {
 
diff --git a/src/main/java/org/codehaus/groovy/ast/GroovyCodeVisitor.java b/src/main/java/org/codehaus/groovy/ast/GroovyCodeVisitor.java
index 12787c0..3b50b50 100644
--- a/src/main/java/org/codehaus/groovy/ast/GroovyCodeVisitor.java
+++ b/src/main/java/org/codehaus/groovy/ast/GroovyCodeVisitor.java
@@ -72,10 +72,7 @@ import org.codehaus.groovy.classgen.BytecodeExpression;
 
 /**
  * An implementation of the visitor pattern for working with ASTNodes
- *
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
-
 public interface GroovyCodeVisitor {
 
     // statements
diff --git a/src/main/java/org/codehaus/groovy/ast/ImportNode.java b/src/main/java/org/codehaus/groovy/ast/ImportNode.java
index 5f01494..b011104 100644
--- a/src/main/java/org/codehaus/groovy/ast/ImportNode.java
+++ b/src/main/java/org/codehaus/groovy/ast/ImportNode.java
@@ -22,10 +22,6 @@ import org.objectweb.asm.Opcodes;
 
 /**
  * Represents an import statement of a single class
- *
- * @author Jochen Theodorou
- * @author Paul King
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public class ImportNode extends AnnotatedNode implements Opcodes {
 
diff --git a/src/main/java/org/codehaus/groovy/ast/InnerClassNode.java b/src/main/java/org/codehaus/groovy/ast/InnerClassNode.java
index f20c457..1da52be 100644
--- a/src/main/java/org/codehaus/groovy/ast/InnerClassNode.java
+++ b/src/main/java/org/codehaus/groovy/ast/InnerClassNode.java
@@ -24,8 +24,6 @@ import java.util.LinkedList;
 
 /**
  * Represents an inner class declaration
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public class InnerClassNode extends ClassNode {
 
diff --git a/src/main/java/org/codehaus/groovy/ast/InterfaceHelperClassNode.java b/src/main/java/org/codehaus/groovy/ast/InterfaceHelperClassNode.java
index d2e952f..715e9a6 100644
--- a/src/main/java/org/codehaus/groovy/ast/InterfaceHelperClassNode.java
+++ b/src/main/java/org/codehaus/groovy/ast/InterfaceHelperClassNode.java
@@ -1,51 +1,49 @@
-/*
- *  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.ast;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Represents an inner class defined as helper for an interface
- * 
- * @author Roshan Dawrani
- */
-public class InterfaceHelperClassNode extends InnerClassNode {
-
-    private List callSites = new ArrayList();
-    
-    /**
-     * @param name is the full name of the class
-     * @param modifiers the modifiers, @see org.objectweb.asm.Opcodes
-     * @param superClass the base class name - use "java.lang.Object" if no direct base class
-     * @param callSites list of callsites used in the interface
-     */
-    public InterfaceHelperClassNode(ClassNode outerClass, String name, int modifiers, ClassNode superClass, List<String> callSites) {
-        super(outerClass, name, modifiers, superClass, ClassHelper.EMPTY_TYPE_ARRAY, MixinNode.EMPTY_ARRAY);
-        setCallSites(callSites);
-    }
-    
-    public void setCallSites(List<String> cs) {
-        callSites = (cs != null) ? cs : new ArrayList<String>();
-    }
-    
-    public List<String> getCallSites() {
-        return callSites;
-    }
-}
+/*
+ *  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.ast;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Represents an inner class defined as helper for an interface
+ */
+public class InterfaceHelperClassNode extends InnerClassNode {
+
+    private List callSites = new ArrayList();
+    
+    /**
+     * @param name is the full name of the class
+     * @param modifiers the modifiers, @see org.objectweb.asm.Opcodes
+     * @param superClass the base class name - use "java.lang.Object" if no direct base class
+     * @param callSites list of callsites used in the interface
+     */
+    public InterfaceHelperClassNode(ClassNode outerClass, String name, int modifiers, ClassNode superClass, List<String> callSites) {
+        super(outerClass, name, modifiers, superClass, ClassHelper.EMPTY_TYPE_ARRAY, MixinNode.EMPTY_ARRAY);
+        setCallSites(callSites);
+    }
+    
+    public void setCallSites(List<String> cs) {
+        callSites = (cs != null) ? cs : new ArrayList<String>();
+    }
+    
+    public List<String> getCallSites() {
+        return callSites;
+    }
+}
diff --git a/src/main/java/org/codehaus/groovy/ast/MethodCallTransformation.java b/src/main/java/org/codehaus/groovy/ast/MethodCallTransformation.java
index 69ab6c0..f07358f 100644
--- a/src/main/java/org/codehaus/groovy/ast/MethodCallTransformation.java
+++ b/src/main/java/org/codehaus/groovy/ast/MethodCallTransformation.java
@@ -23,12 +23,6 @@ import org.codehaus.groovy.ast.stmt.Statement;
 import org.codehaus.groovy.control.SourceUnit;
 import org.codehaus.groovy.transform.ASTTransformation;
 
-/**
- *
- * @author Hamlet D'Arcy
- * @author Sergei Egorov <bs...@gmail.com>
- */
-
 public abstract class MethodCallTransformation implements ASTTransformation {
 
     public void visit(ASTNode[] nodes, SourceUnit sourceUnit) {
@@ -111,6 +105,6 @@ public abstract class MethodCallTransformation implements ASTTransformation {
             }
         }
     }
-    
+
     protected abstract GroovyCodeVisitor getTransformer(ASTNode[] nodes, SourceUnit sourceUnit);
 }
diff --git a/src/main/java/org/codehaus/groovy/ast/MethodInvocationTrap.java b/src/main/java/org/codehaus/groovy/ast/MethodInvocationTrap.java
index 9801c60..7909569 100644
--- a/src/main/java/org/codehaus/groovy/ast/MethodInvocationTrap.java
+++ b/src/main/java/org/codehaus/groovy/ast/MethodInvocationTrap.java
@@ -26,11 +26,6 @@ import org.codehaus.groovy.control.io.ReaderSource;
 import org.codehaus.groovy.control.messages.SyntaxErrorMessage;
 import org.codehaus.groovy.syntax.SyntaxException;
 
-/**
- *
- * @author Hamlet D'Arcy
- * @author Sergei Egorov <bs...@gmail.com>
- */
 public abstract class MethodInvocationTrap extends CodeVisitorSupport {
 
     protected final ReaderSource source;
@@ -51,12 +46,12 @@ public abstract class MethodInvocationTrap extends CodeVisitorSupport {
      */
     public void visitMethodCallExpression(MethodCallExpression call) {
         boolean shouldContinueWalking = true;
-        
+
         if (isBuildInvocation(call)) {
             shouldContinueWalking = handleTargetMethodCallExpression(call);
         }
-        
-        if(shouldContinueWalking) {
+
+        if (shouldContinueWalking) {
             // continue normal tree walking
             call.getObjectExpression().visit(this);
             call.getMethod().visit(this);
@@ -85,7 +80,7 @@ public abstract class MethodInvocationTrap extends CodeVisitorSupport {
     protected String convertClosureToSource(ClosureExpression expression) {
         try {
             return ClosureUtils.convertClosureToSource(source, expression);
-        } catch(Exception e) {
+        } catch (Exception e) {
             addError(e.getMessage(), expression);
         }
         return null;
diff --git a/src/main/java/org/codehaus/groovy/ast/MethodNode.java b/src/main/java/org/codehaus/groovy/ast/MethodNode.java
index 5952780..7a42f87 100644
--- a/src/main/java/org/codehaus/groovy/ast/MethodNode.java
+++ b/src/main/java/org/codehaus/groovy/ast/MethodNode.java
@@ -27,9 +27,6 @@ import java.util.List;
 
 /**
  * Represents a method declaration
- *
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @author Hamlet D'Arcy
  */
 public class MethodNode extends AnnotatedNode implements Opcodes {
 
diff --git a/src/main/java/org/codehaus/groovy/ast/MixinNode.java b/src/main/java/org/codehaus/groovy/ast/MixinNode.java
index 08dee7c..322e5e7 100644
--- a/src/main/java/org/codehaus/groovy/ast/MixinNode.java
+++ b/src/main/java/org/codehaus/groovy/ast/MixinNode.java
@@ -20,8 +20,6 @@ package org.codehaus.groovy.ast;
 
 /**
  * Represents a mixin which can be applied to any ClassNode to implement mixins
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public class MixinNode extends ClassNode {
 
diff --git a/src/main/java/org/codehaus/groovy/ast/ModuleNode.java b/src/main/java/org/codehaus/groovy/ast/ModuleNode.java
index a0f4b52..54f7e16 100644
--- a/src/main/java/org/codehaus/groovy/ast/ModuleNode.java
+++ b/src/main/java/org/codehaus/groovy/ast/ModuleNode.java
@@ -48,10 +48,6 @@ import java.util.Map;
  * Represents a module, which consists typically of a class declaration
  * but could include some imports, some statements and multiple classes
  * intermixed with statements like scripts in Python or Ruby
- *
- * @author Jochen Theodorou
- * @author Paul King
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public class ModuleNode extends ASTNode implements Opcodes {
 
diff --git a/src/main/java/org/codehaus/groovy/ast/PackageNode.java b/src/main/java/org/codehaus/groovy/ast/PackageNode.java
index 946f9bd..097c7f9 100644
--- a/src/main/java/org/codehaus/groovy/ast/PackageNode.java
+++ b/src/main/java/org/codehaus/groovy/ast/PackageNode.java
@@ -1,46 +1,44 @@
-/*
- *  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.ast;
-
-/**
- * Represents a package in the AST.
- *
- * @author Paul King
- */
-public class PackageNode extends AnnotatedNode {
-    private final String name;
-
-    public PackageNode(String name) {
-        this.name = name;
-    }
-
-    public String getName() {
-        return name;
-    }
-
-    /**
-     * @return the text display of this package definition
-     */
-    public String getText() {
-        return "package " + name;
-    }
-
-    public void visit(GroovyCodeVisitor visitor) {
-    }
-}
+/*
+ *  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.ast;
+
+/**
+ * Represents a package in the AST.
+ */
+public class PackageNode extends AnnotatedNode {
+    private final String name;
+
+    public PackageNode(String name) {
+        this.name = name;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    /**
+     * @return the text display of this package definition
+     */
+    public String getText() {
+        return "package " + name;
+    }
+
+    public void visit(GroovyCodeVisitor visitor) {
+    }
+}
diff --git a/src/main/java/org/codehaus/groovy/ast/Parameter.java b/src/main/java/org/codehaus/groovy/ast/Parameter.java
index e3bb2bc..102ec47 100644
--- a/src/main/java/org/codehaus/groovy/ast/Parameter.java
+++ b/src/main/java/org/codehaus/groovy/ast/Parameter.java
@@ -24,8 +24,6 @@ import org.codehaus.groovy.ast.expr.Expression;
 /**
  * Represents a parameter on a constructor or method call. The type name is
  * optional - it defaults to java.lang.Object if unknown.
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public class Parameter extends AnnotatedNode implements Variable {
 
diff --git a/src/main/java/org/codehaus/groovy/ast/PropertyNode.java b/src/main/java/org/codehaus/groovy/ast/PropertyNode.java
index 49b941f..81b2a7e 100644
--- a/src/main/java/org/codehaus/groovy/ast/PropertyNode.java
+++ b/src/main/java/org/codehaus/groovy/ast/PropertyNode.java
@@ -24,8 +24,6 @@ import org.objectweb.asm.Opcodes;
 
 /**
  * Represents a property (member variable, a getter and setter)
- *
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public class PropertyNode extends AnnotatedNode implements Opcodes, Variable {
 
diff --git a/src/main/java/org/codehaus/groovy/ast/Variable.java b/src/main/java/org/codehaus/groovy/ast/Variable.java
index 2e94739..eda2fd2 100644
--- a/src/main/java/org/codehaus/groovy/ast/Variable.java
+++ b/src/main/java/org/codehaus/groovy/ast/Variable.java
@@ -23,8 +23,6 @@ import org.codehaus.groovy.ast.expr.Expression;
 /**
  * interface to mark a AstNode as Variable. Typically these are 
  * VariableExpression, FieldNode, PropertyNode and Parameter
- * 
- * @author Jochen Theodorou
  */
 public interface Variable {
     
diff --git a/src/main/java/org/codehaus/groovy/ast/VariableScope.java b/src/main/java/org/codehaus/groovy/ast/VariableScope.java
index 521b301..c0dba87 100644
--- a/src/main/java/org/codehaus/groovy/ast/VariableScope.java
+++ b/src/main/java/org/codehaus/groovy/ast/VariableScope.java
@@ -26,9 +26,6 @@ import java.util.Map;
 /**
  * Represents a variable scope. This is primarily used to determine variable sharing
  * across method and closure boundaries.
- *
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @author Jochen Theodorou
  */
 public class VariableScope  {
     private Map<String, Variable> declaredVariables = Collections.emptyMap();
diff --git a/src/main/java/org/codehaus/groovy/ast/builder/AstBuilderTransformation.java b/src/main/java/org/codehaus/groovy/ast/builder/AstBuilderTransformation.java
index 6882498..8ee6bac 100644
--- a/src/main/java/org/codehaus/groovy/ast/builder/AstBuilderTransformation.java
+++ b/src/main/java/org/codehaus/groovy/ast/builder/AstBuilderTransformation.java
@@ -1,186 +1,183 @@
-/*
- *  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.ast.builder;
-
-import org.codehaus.groovy.ast.ASTNode;
-import org.codehaus.groovy.ast.GroovyCodeVisitor;
-import org.codehaus.groovy.ast.ImportNode;
-import org.codehaus.groovy.ast.MethodCallTransformation;
-import org.codehaus.groovy.ast.MethodInvocationTrap;
-import org.codehaus.groovy.ast.expr.ArgumentListExpression;
-import org.codehaus.groovy.ast.expr.ClosureExpression;
-import org.codehaus.groovy.ast.expr.ConstantExpression;
-import org.codehaus.groovy.ast.expr.Expression;
-import org.codehaus.groovy.ast.expr.MethodCallExpression;
-import org.codehaus.groovy.ast.expr.TupleExpression;
-import org.codehaus.groovy.control.CompilePhase;
-import org.codehaus.groovy.control.SourceUnit;
-import org.codehaus.groovy.control.io.ReaderSource;
-import org.codehaus.groovy.transform.GroovyASTTransformation;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * Transformation to capture ASTBuilder from code statements.
- * <p>
- * The AstBuilder "from code" approach is used with a single Closure
- * parameter. This transformation converts the ClosureExpression back
- * into source code and rewrites the AST so that the "from string"
- * builder is invoked on the source. In order for this to work, the
- * closure source must be given a goto label. It is the "from string"
- * approach's responsibility to remove the BlockStatement created
- * by the label.
- *
- * @author Hamlet D'Arcy
- */
-
-@GroovyASTTransformation(phase = CompilePhase.SEMANTIC_ANALYSIS)
-public class AstBuilderTransformation extends MethodCallTransformation {
-
-    @Override
-    protected GroovyCodeVisitor getTransformer(ASTNode[] nodes, SourceUnit sourceUnit) {
-        // todo : are there other import types that can be specified?
-        return new AstBuilderInvocationTrap(
-            sourceUnit.getAST().getImports(),
-            sourceUnit.getAST().getStarImports(),
-            sourceUnit.getSource(),
-            sourceUnit
-        );
-    }
-
-    /**
-     * This class traps invocations of AstBuilder.build(CompilePhase, boolean, Closure) and converts
-     * the contents of the closure into expressions by reading the source of the Closure and sending
-     * that as a String to AstBuilder.build(String, CompilePhase, boolean) at runtime.
-     */
-    private static class AstBuilderInvocationTrap extends MethodInvocationTrap {
-
-        private final List<String> factoryTargets = new ArrayList<String>();
-
-        /**
-         * Creates the trap and captures all the ways in which a class may be referenced via imports.
-         *
-         * @param imports        all the imports from the source
-         * @param importPackages all the imported packages from the source
-         * @param source         the reader source that contains source for the SourceUnit
-         * @param sourceUnit     the source unit being compiled. Used for error messages.
-         */
-        AstBuilderInvocationTrap(List<ImportNode> imports, List<ImportNode> importPackages, ReaderSource source, SourceUnit sourceUnit) {
-            super(source, sourceUnit);
-
-            // factory type may be references as fully qualified, an import, or an alias
-            factoryTargets.add("org.codehaus.groovy.ast.builder.AstBuilder");//default package
-
-            if (imports != null) {
-                for (ImportNode importStatement : imports) {
-                    if ("org.codehaus.groovy.ast.builder.AstBuilder".equals(importStatement.getType().getName())) {
-                        factoryTargets.add(importStatement.getAlias());
-                    }
-                }
-            }
-
-            if (importPackages != null) {
-                for (ImportNode importPackage : importPackages) {
-                    if ("org.codehaus.groovy.ast.builder.".equals(importPackage.getPackageName())) {
-                        factoryTargets.add("AstBuilder");
-                        break;
-                    }
-                }
-            }
-        }
-        
-        @Override
-        protected boolean handleTargetMethodCallExpression(MethodCallExpression call) {
-            ClosureExpression closureExpression = getClosureArgument(call);
-            List<Expression> otherArgs = getNonClosureArguments(call);
-            String source = convertClosureToSource(closureExpression);
-
-            // parameter order is build(CompilePhase, boolean, String)
-            otherArgs.add(new ConstantExpression(source));
-            call.setArguments(new ArgumentListExpression(otherArgs));
-            call.setMethod(new ConstantExpression("buildFromBlock"));
-            call.setSpreadSafe(false);
-            call.setSafe(false);
-            call.setImplicitThis(false);
-            
-            return false;
-        }
-
-        private static List<Expression> getNonClosureArguments(MethodCallExpression call) {
-            List<Expression> result = new ArrayList<Expression>();
-            if (call.getArguments() instanceof TupleExpression) {
-                for (ASTNode node : ((TupleExpression) call.getArguments()).getExpressions()) {
-                    if (!(node instanceof ClosureExpression)) {
-                        result.add((Expression) node);
-                    }
-                }
-            }
-            return result;
-        }
-
-        private static ClosureExpression getClosureArgument(MethodCallExpression call) {
-
-            if (call.getArguments() instanceof TupleExpression) {
-                for (ASTNode node : ((TupleExpression) call.getArguments()).getExpressions()) {
-                    if (node instanceof ClosureExpression) {
-                        return (ClosureExpression) node;
-                    }
-                }
-            }
-            return null;
-        }
-
-        /**
-         * Looks for method calls on the AstBuilder class called build that take
-         * a Closure as parameter. This is all needed b/c build is overloaded.
-         *
-         * @param call the method call expression, may not be null
-         */
-        @Override
-        protected boolean isBuildInvocation(MethodCallExpression call) {
-            if (call == null) throw new IllegalArgumentException("Null: call");
-
-            // is method name correct?
-            if (call.getMethod() instanceof ConstantExpression && "buildFromCode".equals(((ConstantExpression) call.getMethod()).getValue())) {
-
-                // is method object correct type?
-                if (call.getObjectExpression() != null && call.getObjectExpression().getType() != null) {
-                    String name = call.getObjectExpression().getType().getName();
-                    if (name != null && !"".equals(name) && factoryTargets.contains(name)) {
-
-                        // is one of the arguments a closure?
-                        if (call.getArguments() != null && call.getArguments() instanceof TupleExpression) {
-                            if (((TupleExpression) call.getArguments()).getExpressions() != null) {
-                                for (ASTNode node : ((TupleExpression) call.getArguments()).getExpressions()) {
-                                    if (node instanceof ClosureExpression) {
-                                        return true;
-                                    }
-                                }
-                            }
-                        }
-                    }
-                }
-            }
-            return false;
-        }
-    }
-}
-
-
+/*
+ *  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.ast.builder;
+
+import org.codehaus.groovy.ast.ASTNode;
+import org.codehaus.groovy.ast.GroovyCodeVisitor;
+import org.codehaus.groovy.ast.ImportNode;
+import org.codehaus.groovy.ast.MethodCallTransformation;
+import org.codehaus.groovy.ast.MethodInvocationTrap;
+import org.codehaus.groovy.ast.expr.ArgumentListExpression;
+import org.codehaus.groovy.ast.expr.ClosureExpression;
+import org.codehaus.groovy.ast.expr.ConstantExpression;
+import org.codehaus.groovy.ast.expr.Expression;
+import org.codehaus.groovy.ast.expr.MethodCallExpression;
+import org.codehaus.groovy.ast.expr.TupleExpression;
+import org.codehaus.groovy.control.CompilePhase;
+import org.codehaus.groovy.control.SourceUnit;
+import org.codehaus.groovy.control.io.ReaderSource;
+import org.codehaus.groovy.transform.GroovyASTTransformation;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Transformation to capture ASTBuilder from code statements.
+ * <p>
+ * The AstBuilder "from code" approach is used with a single Closure
+ * parameter. This transformation converts the ClosureExpression back
+ * into source code and rewrites the AST so that the "from string"
+ * builder is invoked on the source. In order for this to work, the
+ * closure source must be given a goto label. It is the "from string"
+ * approach's responsibility to remove the BlockStatement created
+ * by the label.
+ */
+@GroovyASTTransformation(phase = CompilePhase.SEMANTIC_ANALYSIS)
+public class AstBuilderTransformation extends MethodCallTransformation {
+
+    @Override
+    protected GroovyCodeVisitor getTransformer(ASTNode[] nodes, SourceUnit sourceUnit) {
+        // todo : are there other import types that can be specified?
+        return new AstBuilderInvocationTrap(
+            sourceUnit.getAST().getImports(),
+            sourceUnit.getAST().getStarImports(),
+            sourceUnit.getSource(),
+            sourceUnit
+        );
+    }
+
+    /**
+     * This class traps invocations of AstBuilder.build(CompilePhase, boolean, Closure) and converts
+     * the contents of the closure into expressions by reading the source of the Closure and sending
+     * that as a String to AstBuilder.build(String, CompilePhase, boolean) at runtime.
+     */
+    private static class AstBuilderInvocationTrap extends MethodInvocationTrap {
+
+        private final List<String> factoryTargets = new ArrayList<String>();
+
+        /**
+         * Creates the trap and captures all the ways in which a class may be referenced via imports.
+         *
+         * @param imports        all the imports from the source
+         * @param importPackages all the imported packages from the source
+         * @param source         the reader source that contains source for the SourceUnit
+         * @param sourceUnit     the source unit being compiled. Used for error messages.
+         */
+        AstBuilderInvocationTrap(List<ImportNode> imports, List<ImportNode> importPackages, ReaderSource source, SourceUnit sourceUnit) {
+            super(source, sourceUnit);
+
+            // factory type may be references as fully qualified, an import, or an alias
+            factoryTargets.add("org.codehaus.groovy.ast.builder.AstBuilder");//default package
+
+            if (imports != null) {
+                for (ImportNode importStatement : imports) {
+                    if ("org.codehaus.groovy.ast.builder.AstBuilder".equals(importStatement.getType().getName())) {
+                        factoryTargets.add(importStatement.getAlias());
+                    }
+                }
+            }
+
+            if (importPackages != null) {
+                for (ImportNode importPackage : importPackages) {
+                    if ("org.codehaus.groovy.ast.builder.".equals(importPackage.getPackageName())) {
+                        factoryTargets.add("AstBuilder");
+                        break;
+                    }
+                }
+            }
+        }
+        
+        @Override
+        protected boolean handleTargetMethodCallExpression(MethodCallExpression call) {
+            ClosureExpression closureExpression = getClosureArgument(call);
+            List<Expression> otherArgs = getNonClosureArguments(call);
+            String source = convertClosureToSource(closureExpression);
+
+            // parameter order is build(CompilePhase, boolean, String)
+            otherArgs.add(new ConstantExpression(source));
+            call.setArguments(new ArgumentListExpression(otherArgs));
+            call.setMethod(new ConstantExpression("buildFromBlock"));
+            call.setSpreadSafe(false);
+            call.setSafe(false);
+            call.setImplicitThis(false);
+            
+            return false;
+        }
+
+        private static List<Expression> getNonClosureArguments(MethodCallExpression call) {
+            List<Expression> result = new ArrayList<Expression>();
+            if (call.getArguments() instanceof TupleExpression) {
+                for (ASTNode node : ((TupleExpression) call.getArguments()).getExpressions()) {
+                    if (!(node instanceof ClosureExpression)) {
+                        result.add((Expression) node);
+                    }
+                }
+            }
+            return result;
+        }
+
+        private static ClosureExpression getClosureArgument(MethodCallExpression call) {
+
+            if (call.getArguments() instanceof TupleExpression) {
+                for (ASTNode node : ((TupleExpression) call.getArguments()).getExpressions()) {
+                    if (node instanceof ClosureExpression) {
+                        return (ClosureExpression) node;
+                    }
+                }
+            }
+            return null;
+        }
+
+        /**
+         * Looks for method calls on the AstBuilder class called build that take
+         * a Closure as parameter. This is all needed b/c build is overloaded.
+         *
+         * @param call the method call expression, may not be null
+         */
+        @Override
+        protected boolean isBuildInvocation(MethodCallExpression call) {
+            if (call == null) throw new IllegalArgumentException("Null: call");
+
+            // is method name correct?
+            if (call.getMethod() instanceof ConstantExpression && "buildFromCode".equals(((ConstantExpression) call.getMethod()).getValue())) {
+
+                // is method object correct type?
+                if (call.getObjectExpression() != null && call.getObjectExpression().getType() != null) {
+                    String name = call.getObjectExpression().getType().getName();
+                    if (name != null && !"".equals(name) && factoryTargets.contains(name)) {
+
+                        // is one of the arguments a closure?
+                        if (call.getArguments() != null && call.getArguments() instanceof TupleExpression) {
+                            if (((TupleExpression) call.getArguments()).getExpressions() != null) {
+                                for (ASTNode node : ((TupleExpression) call.getArguments()).getExpressions()) {
+                                    if (node instanceof ClosureExpression) {
+                                        return true;
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+            return false;
+        }
+    }
+}
+
+
diff --git a/src/main/java/org/codehaus/groovy/ast/decompiled/Annotations.java b/src/main/java/org/codehaus/groovy/ast/decompiled/Annotations.java
index 297dbb0..07f0f63 100644
--- a/src/main/java/org/codehaus/groovy/ast/decompiled/Annotations.java
+++ b/src/main/java/org/codehaus/groovy/ast/decompiled/Annotations.java
@@ -33,9 +33,6 @@ import java.lang.reflect.Array;
 import java.util.List;
 import java.util.Map;
 
-/**
- * @author Peter Gromov
- */
 class Annotations {
     static AnnotationNode createAnnotationNode(AnnotationStub annotation, AsmReferenceResolver resolver) {
         ClassNode classNode = resolver.resolveClassNullable(Type.getType(annotation.className).getClassName());
diff --git a/src/main/java/org/codehaus/groovy/ast/decompiled/AsmReferenceResolver.java b/src/main/java/org/codehaus/groovy/ast/decompiled/AsmReferenceResolver.java
index 9b96fa1..64cf500 100644
--- a/src/main/java/org/codehaus/groovy/ast/decompiled/AsmReferenceResolver.java
+++ b/src/main/java/org/codehaus/groovy/ast/decompiled/AsmReferenceResolver.java
@@ -30,8 +30,6 @@ import org.objectweb.asm.Type;
  *
  * @see DecompiledClassNode
  * @see AsmDecompiler
- *
- * @author Peter Gromov
  */
 public class AsmReferenceResolver {
     private final ClassNodeResolver resolver;
diff --git a/src/main/java/org/codehaus/groovy/ast/decompiled/ClassSignatureParser.java b/src/main/java/org/codehaus/groovy/ast/decompiled/ClassSignatureParser.java
index 2c0d28c..5d225f0 100644
--- a/src/main/java/org/codehaus/groovy/ast/decompiled/ClassSignatureParser.java
+++ b/src/main/java/org/codehaus/groovy/ast/decompiled/ClassSignatureParser.java
@@ -26,9 +26,6 @@ import org.objectweb.asm.signature.SignatureVisitor;
 import java.util.ArrayList;
 import java.util.List;
 
-/**
- * @author Peter Gromov
- */
 class ClassSignatureParser {
     static void configureClass(ClassNode classNode, ClassStub stub, AsmReferenceResolver resolver) {
         if (stub.signature != null) {
diff --git a/src/main/java/org/codehaus/groovy/ast/decompiled/DecompiledClassNode.java b/src/main/java/org/codehaus/groovy/ast/decompiled/DecompiledClassNode.java
index 7376348..8207070 100644
--- a/src/main/java/org/codehaus/groovy/ast/decompiled/DecompiledClassNode.java
+++ b/src/main/java/org/codehaus/groovy/ast/decompiled/DecompiledClassNode.java
@@ -35,7 +35,6 @@ import java.util.List;
  * A {@link ClassNode} kind representing the classes coming from *.class files decompiled using ASM.
  *
  * @see AsmDecompiler
- * @author Peter Gromov
  */
 public class DecompiledClassNode extends ClassNode {
     private final ClassStub classData;
diff --git a/src/main/java/org/codehaus/groovy/ast/decompiled/FormalParameterParser.java b/src/main/java/org/codehaus/groovy/ast/decompiled/FormalParameterParser.java
index 0c0603a..2c3ca9a 100644
--- a/src/main/java/org/codehaus/groovy/ast/decompiled/FormalParameterParser.java
+++ b/src/main/java/org/codehaus/groovy/ast/decompiled/FormalParameterParser.java
@@ -27,9 +27,6 @@ import org.objectweb.asm.signature.SignatureVisitor;
 import java.util.ArrayList;
 import java.util.List;
 
-/**
-* @author Peter Gromov
-*/
 abstract class FormalParameterParser extends SignatureVisitor {
     private final AsmReferenceResolver resolver;
     private String currentTypeParameter;
diff --git a/src/main/java/org/codehaus/groovy/ast/decompiled/TypeSignatureParser.java b/src/main/java/org/codehaus/groovy/ast/decompiled/TypeSignatureParser.java
index 21a7e6c..7d7537a 100644
--- a/src/main/java/org/codehaus/groovy/ast/decompiled/TypeSignatureParser.java
+++ b/src/main/java/org/codehaus/groovy/ast/decompiled/TypeSignatureParser.java
@@ -29,9 +29,6 @@ import org.objectweb.asm.signature.SignatureVisitor;
 import java.util.ArrayList;
 import java.util.List;
 
-/**
-* @author Peter Gromov
-*/
 abstract class TypeSignatureParser extends SignatureVisitor {
     private final AsmReferenceResolver resolver;
 
diff --git a/src/main/java/org/codehaus/groovy/ast/expr/AnnotationConstantExpression.java b/src/main/java/org/codehaus/groovy/ast/expr/AnnotationConstantExpression.java
index bb4d78f..cc683a9 100644
--- a/src/main/java/org/codehaus/groovy/ast/expr/AnnotationConstantExpression.java
+++ b/src/main/java/org/codehaus/groovy/ast/expr/AnnotationConstantExpression.java
@@ -1,50 +1,48 @@
-/*
- *  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.ast.expr;
-
-import org.codehaus.groovy.ast.AnnotationNode;
-import org.codehaus.groovy.ast.GroovyCodeVisitor;
-
-import java.util.Map;
-
-/**
- * Represents an annotation "constant" that may appear in annotation attributes
- * (mainly used as a marker).
- *
- * @author <a href='mailto:the[dot]mindstorm[at]gmail[dot]com'>Alex Popescu</a>
- */
-public class AnnotationConstantExpression extends ConstantExpression {
-    public AnnotationConstantExpression(AnnotationNode node) {
-        super(node);
-        setType(node.getClassNode());
-    }
-
-    public void visit(GroovyCodeVisitor visitor) {
-        AnnotationNode node = (AnnotationNode) getValue();
-        Map<String, Expression> attrs = node.getMembers();
-        for (Expression expr : attrs.values()) {
-            expr.visit(visitor);
-        }
-        super.visit(visitor);
-    }
-
-    public String toString() {
-        return "AnnotationConstantExpression[" + getValue() + "]";
-    }
-}
+/*
+ *  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.ast.expr;
+
+import org.codehaus.groovy.ast.AnnotationNode;
+import org.codehaus.groovy.ast.GroovyCodeVisitor;
+
+import java.util.Map;
+
+/**
+ * Represents an annotation "constant" that may appear in annotation attributes
+ * (mainly used as a marker).
+ */
+public class AnnotationConstantExpression extends ConstantExpression {
+    public AnnotationConstantExpression(AnnotationNode node) {
+        super(node);
+        setType(node.getClassNode());
+    }
+
+    public void visit(GroovyCodeVisitor visitor) {
+        AnnotationNode node = (AnnotationNode) getValue();
+        Map<String, Expression> attrs = node.getMembers();
+        for (Expression expr : attrs.values()) {
+            expr.visit(visitor);
+        }
+        super.visit(visitor);
+    }
+
+    public String toString() {
+        return "AnnotationConstantExpression[" + getValue() + "]";
+    }
+}
diff --git a/src/main/java/org/codehaus/groovy/ast/expr/ArgumentListExpression.java b/src/main/java/org/codehaus/groovy/ast/expr/ArgumentListExpression.java
index de835b7..0f4a7e4 100644
--- a/src/main/java/org/codehaus/groovy/ast/expr/ArgumentListExpression.java
+++ b/src/main/java/org/codehaus/groovy/ast/expr/ArgumentListExpression.java
@@ -25,8 +25,6 @@ import java.util.List;
 
 /**
  * Represents one or more arguments being passed into a method
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public class ArgumentListExpression extends TupleExpression {
 
diff --git a/src/main/java/org/codehaus/groovy/ast/expr/ArrayExpression.java b/src/main/java/org/codehaus/groovy/ast/expr/ArrayExpression.java
index a70102d..c316179 100644
--- a/src/main/java/org/codehaus/groovy/ast/expr/ArrayExpression.java
+++ b/src/main/java/org/codehaus/groovy/ast/expr/ArrayExpression.java
@@ -27,8 +27,6 @@ import java.util.List;
 /**
  * Represents an array object construction either using a fixed size
  * or an initializer expression
- *
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public class ArrayExpression extends Expression {
     private final List<Expression> expressions;
diff --git a/src/main/java/org/codehaus/groovy/ast/expr/AttributeExpression.java b/src/main/java/org/codehaus/groovy/ast/expr/AttributeExpression.java
index a52929c..00d1647 100644
--- a/src/main/java/org/codehaus/groovy/ast/expr/AttributeExpression.java
+++ b/src/main/java/org/codehaus/groovy/ast/expr/AttributeExpression.java
@@ -20,11 +20,8 @@ package org.codehaus.groovy.ast.expr;
 
 import org.codehaus.groovy.ast.GroovyCodeVisitor;
 
-
 /**
  * Represents an attribute access (accessing the field of a class) such as the expression "foo.@bar".
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public class AttributeExpression extends PropertyExpression {
 
diff --git a/src/main/java/org/codehaus/groovy/ast/expr/BinaryExpression.java b/src/main/java/org/codehaus/groovy/ast/expr/BinaryExpression.java
index 5cd35f7..121f094 100644
--- a/src/main/java/org/codehaus/groovy/ast/expr/BinaryExpression.java
+++ b/src/main/java/org/codehaus/groovy/ast/expr/BinaryExpression.java
@@ -26,8 +26,6 @@ import org.codehaus.groovy.syntax.Types;
 
 /**
  * Represents two expressions and an operation
- *
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public class BinaryExpression extends Expression {
 
diff --git a/src/main/java/org/codehaus/groovy/ast/expr/BitwiseNegationExpression.java b/src/main/java/org/codehaus/groovy/ast/expr/BitwiseNegationExpression.java
index dece59d23..5887281 100644
--- a/src/main/java/org/codehaus/groovy/ast/expr/BitwiseNegationExpression.java
+++ b/src/main/java/org/codehaus/groovy/ast/expr/BitwiseNegationExpression.java
@@ -21,9 +21,6 @@ package org.codehaus.groovy.ast.expr;
 import org.codehaus.groovy.ast.ClassNode;
 import org.codehaus.groovy.ast.GroovyCodeVisitor;
 
-/**
- * @author phk
- */
 public class BitwiseNegationExpression extends Expression {
 
     private final Expression expression;
diff --git a/src/main/java/org/codehaus/groovy/ast/expr/BooleanExpression.java b/src/main/java/org/codehaus/groovy/ast/expr/BooleanExpression.java
index 5cab929..bde8320 100644
--- a/src/main/java/org/codehaus/groovy/ast/expr/BooleanExpression.java
+++ b/src/main/java/org/codehaus/groovy/ast/expr/BooleanExpression.java
@@ -23,8 +23,6 @@ import org.codehaus.groovy.ast.GroovyCodeVisitor;
 
 /**
  * Represents a boolean expression
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public class BooleanExpression extends Expression {
     private final Expression expression;
diff --git a/src/main/java/org/codehaus/groovy/ast/expr/CastExpression.java b/src/main/java/org/codehaus/groovy/ast/expr/CastExpression.java
index f6145bb..c1e6c88 100644
--- a/src/main/java/org/codehaus/groovy/ast/expr/CastExpression.java
+++ b/src/main/java/org/codehaus/groovy/ast/expr/CastExpression.java
@@ -23,8 +23,6 @@ import org.codehaus.groovy.ast.GroovyCodeVisitor;
 
 /**
  * Represents a type cast expression
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public class CastExpression extends Expression {
     
diff --git a/src/main/java/org/codehaus/groovy/ast/expr/ClassExpression.java b/src/main/java/org/codehaus/groovy/ast/expr/ClassExpression.java
index 9b29e5c..c6ff02e 100644
--- a/src/main/java/org/codehaus/groovy/ast/expr/ClassExpression.java
+++ b/src/main/java/org/codehaus/groovy/ast/expr/ClassExpression.java
@@ -24,8 +24,6 @@ import org.codehaus.groovy.ast.GroovyCodeVisitor;
 /**
  * Represents access to a Java/Groovy class in an expression, such
  * as when invoking a static method or accessing a static type
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public class ClassExpression extends Expression {
 
diff --git a/src/main/java/org/codehaus/groovy/ast/expr/ClosureExpression.java b/src/main/java/org/codehaus/groovy/ast/expr/ClosureExpression.java
index 802a6ee..62ba789 100644
--- a/src/main/java/org/codehaus/groovy/ast/expr/ClosureExpression.java
+++ b/src/main/java/org/codehaus/groovy/ast/expr/ClosureExpression.java
@@ -29,9 +29,6 @@ import org.codehaus.groovy.runtime.InvokerHelper;
 /**
  * Represents a closure expression such as { statement }
  * or { i -> statement } or { i, x, String y ->  statement }
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @author Hamlet D'Arcy
  */
 public class ClosureExpression extends Expression {
     
diff --git a/src/main/java/org/codehaus/groovy/ast/expr/ClosureListExpression.java b/src/main/java/org/codehaus/groovy/ast/expr/ClosureListExpression.java
index ecbd333..0562944 100644
--- a/src/main/java/org/codehaus/groovy/ast/expr/ClosureListExpression.java
+++ b/src/main/java/org/codehaus/groovy/ast/expr/ClosureListExpression.java
@@ -34,9 +34,6 @@ import java.util.List;
  * two ConstantExpressions for the values 1 and 2, and two
  * EmptyStatement entries. The ClosureListExpression defines a new 
  * variable scope. All created Closures share this scope.
- * 
- * 
- * @author Jochen Theodorou
  */
 public class ClosureListExpression extends ListExpression {
 
diff --git a/src/main/java/org/codehaus/groovy/ast/expr/ConstantExpression.java b/src/main/java/org/codehaus/groovy/ast/expr/ConstantExpression.java
index dfa2c52..1708c10 100644
--- a/src/main/java/org/codehaus/groovy/ast/expr/ConstantExpression.java
+++ b/src/main/java/org/codehaus/groovy/ast/expr/ConstantExpression.java
@@ -23,8 +23,6 @@ import org.codehaus.groovy.ast.GroovyCodeVisitor;
 
 /**
  * Represents a constant expression such as null, true, false
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public class ConstantExpression extends Expression {
     // The following fields are only used internally; every occurrence of a user-defined expression of the same kind
diff --git a/src/main/java/org/codehaus/groovy/ast/expr/ConstructorCallExpression.java b/src/main/java/org/codehaus/groovy/ast/expr/ConstructorCallExpression.java
index 0c040fa..cbd5c7b 100644
--- a/src/main/java/org/codehaus/groovy/ast/expr/ConstructorCallExpression.java
+++ b/src/main/java/org/codehaus/groovy/ast/expr/ConstructorCallExpression.java
@@ -24,9 +24,6 @@ import org.codehaus.groovy.ast.GroovyCodeVisitor;
 
 /**
  * A constructor call
- *
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @author Jochen Theodorou
  */
 public class ConstructorCallExpression extends Expression implements MethodCall {
 
diff --git a/src/main/java/org/codehaus/groovy/ast/expr/DeclarationExpression.java b/src/main/java/org/codehaus/groovy/ast/expr/DeclarationExpression.java
index 51dad92..13918f1 100644
--- a/src/main/java/org/codehaus/groovy/ast/expr/DeclarationExpression.java
+++ b/src/main/java/org/codehaus/groovy/ast/expr/DeclarationExpression.java
@@ -40,9 +40,6 @@ import org.codehaus.groovy.syntax.Token;
  * you can use the method "<code>TupleExpression getTupleExpression()</code>" method.
  * Calling either of these expression getters when the "isMultipleAssignment" condition
  * is not appropriate is unsafe and will result in a <code>ClassCastException</code>.
- *
- * @author Jochen Theodorou
- * @author Hamlet D'Arcy
  */
 public class DeclarationExpression extends BinaryExpression {
     
diff --git a/src/main/java/org/codehaus/groovy/ast/expr/ElvisOperatorExpression.java b/src/main/java/org/codehaus/groovy/ast/expr/ElvisOperatorExpression.java
index 64df749..f6c4fcf 100644
--- a/src/main/java/org/codehaus/groovy/ast/expr/ElvisOperatorExpression.java
+++ b/src/main/java/org/codehaus/groovy/ast/expr/ElvisOperatorExpression.java
@@ -41,7 +41,6 @@ import org.codehaus.groovy.ast.GroovyCodeVisitor;
  * assert result == 1 
  * </pre>
  * 
- * @author <a href="mailto:blackdrag@gmx.org">Jochen Theodorou</a>
  * @since 1.5
  */
 public class ElvisOperatorExpression extends TernaryExpression {
diff --git a/src/main/java/org/codehaus/groovy/ast/expr/EmptyExpression.java b/src/main/java/org/codehaus/groovy/ast/expr/EmptyExpression.java
index c0d645a..21340d8 100644
--- a/src/main/java/org/codehaus/groovy/ast/expr/EmptyExpression.java
+++ b/src/main/java/org/codehaus/groovy/ast/expr/EmptyExpression.java
@@ -1,41 +1,40 @@
-/*
- *  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.ast.expr;
-
-import org.codehaus.groovy.ast.GroovyCodeVisitor;
-
-/**
- * This class is a place holder for an empty expression. 
- * Empty expression are used in closures lists like (;). During
- * class Generation this expression should be either ignored or
- * replace with a null value.
- *   
- * @author Jochen Theodorou
- * @see org.codehaus.groovy.ast.stmt.EmptyStatement
- */
-public class EmptyExpression extends Expression {
-    public static final EmptyExpression INSTANCE = new EmptyExpression();
-
-    public Expression transformExpression(ExpressionTransformer transformer) {
-        return this;
-    }
-
-    public void visit(GroovyCodeVisitor visitor) {
-    }
+/*
+ *  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.ast.expr;
+
+import org.codehaus.groovy.ast.GroovyCodeVisitor;
+
+/**
+ * This class is a place holder for an empty expression. 
+ * Empty expression are used in closures lists like (;). During
+ * class Generation this expression should be either ignored or
+ * replace with a null value.
+ *   
+ * @see org.codehaus.groovy.ast.stmt.EmptyStatement
+ */
+public class EmptyExpression extends Expression {
+    public static final EmptyExpression INSTANCE = new EmptyExpression();
+
+    public Expression transformExpression(ExpressionTransformer transformer) {
+        return this;
+    }
+
+    public void visit(GroovyCodeVisitor visitor) {
+    }
 }
\ No newline at end of file
diff --git a/src/main/java/org/codehaus/groovy/ast/expr/Expression.java b/src/main/java/org/codehaus/groovy/ast/expr/Expression.java
index 166f58f..39934c8 100644
--- a/src/main/java/org/codehaus/groovy/ast/expr/Expression.java
+++ b/src/main/java/org/codehaus/groovy/ast/expr/Expression.java
@@ -28,8 +28,6 @@ import java.util.List;
 
 /**
  * Represents a base class for expressions which evaluate as an object
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public abstract class Expression extends AnnotatedNode {
 
diff --git a/src/main/java/org/codehaus/groovy/ast/expr/ExpressionTransformer.java b/src/main/java/org/codehaus/groovy/ast/expr/ExpressionTransformer.java
index 459ed43..c7f6412 100644
--- a/src/main/java/org/codehaus/groovy/ast/expr/ExpressionTransformer.java
+++ b/src/main/java/org/codehaus/groovy/ast/expr/ExpressionTransformer.java
@@ -21,8 +21,6 @@ package org.codehaus.groovy.ast.expr;
 
 /**
  * Provides a way to transform expressions
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public interface ExpressionTransformer {
     
diff --git a/src/main/java/org/codehaus/groovy/ast/expr/FieldExpression.java b/src/main/java/org/codehaus/groovy/ast/expr/FieldExpression.java
index 41b5acf..f0c362a 100644
--- a/src/main/java/org/codehaus/groovy/ast/expr/FieldExpression.java
+++ b/src/main/java/org/codehaus/groovy/ast/expr/FieldExpression.java
@@ -24,8 +24,6 @@ import org.codehaus.groovy.ast.GroovyCodeVisitor;
 
 /**
  * Represents a field access such as the expression "this.foo".
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public class FieldExpression extends Expression {
 
diff --git a/src/main/java/org/codehaus/groovy/ast/expr/GStringExpression.java b/src/main/java/org/codehaus/groovy/ast/expr/GStringExpression.java
index 7ccf355..e46235e 100644
--- a/src/main/java/org/codehaus/groovy/ast/expr/GStringExpression.java
+++ b/src/main/java/org/codehaus/groovy/ast/expr/GStringExpression.java
@@ -27,8 +27,6 @@ import java.util.List;
 /**
  * Represents a String expression which contains embedded values inside
  * it such as "hello there ${user} how are you" which is expanded lazily
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public class GStringExpression extends Expression {
 
diff --git a/src/main/java/org/codehaus/groovy/ast/expr/ListExpression.java b/src/main/java/org/codehaus/groovy/ast/expr/ListExpression.java
index 94ab0d2..070a8e3 100644
--- a/src/main/java/org/codehaus/groovy/ast/expr/ListExpression.java
+++ b/src/main/java/org/codehaus/groovy/ast/expr/ListExpression.java
@@ -26,8 +26,6 @@ import java.util.List;
 
 /**
  * Represents a list expression [1, 2, 3] which creates a mutable List
- *
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public class ListExpression extends Expression {
     private final List<Expression> expressions;
diff --git a/src/main/java/org/codehaus/groovy/ast/expr/MapEntryExpression.java b/src/main/java/org/codehaus/groovy/ast/expr/MapEntryExpression.java
index 3426fe0..9733637 100644
--- a/src/main/java/org/codehaus/groovy/ast/expr/MapEntryExpression.java
+++ b/src/main/java/org/codehaus/groovy/ast/expr/MapEntryExpression.java
@@ -23,8 +23,6 @@ import org.codehaus.groovy.ast.GroovyCodeVisitor;
 
 /**
  * Represents an entry inside a map expression such as 1 : 2.
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public class MapEntryExpression extends Expression {
     private Expression keyExpression;
diff --git a/src/main/java/org/codehaus/groovy/ast/expr/MapExpression.java b/src/main/java/org/codehaus/groovy/ast/expr/MapExpression.java
index 0effc80..5ef2f9e 100644
--- a/src/main/java/org/codehaus/groovy/ast/expr/MapExpression.java
+++ b/src/main/java/org/codehaus/groovy/ast/expr/MapExpression.java
@@ -26,8 +26,6 @@ import java.util.List;
 
 /**
  * Represents a map expression [1 : 2, "a" : "b", x : y] which creates a mutable Map
- *
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public class MapExpression extends Expression {
     private final List<MapEntryExpression> mapEntryExpressions;
diff --git a/src/main/java/org/codehaus/groovy/ast/expr/MethodCall.java b/src/main/java/org/codehaus/groovy/ast/expr/MethodCall.java
index e2e889d..6f7f6a3 100644
--- a/src/main/java/org/codehaus/groovy/ast/expr/MethodCall.java
+++ b/src/main/java/org/codehaus/groovy/ast/expr/MethodCall.java
@@ -23,7 +23,6 @@ import org.codehaus.groovy.ast.ASTNode;
 /**
  * Interface defining common methods for method calls.
  *
- * @author Cedric Champeau
  * @since 2.1.0
  */
 public interface MethodCall {
diff --git a/src/main/java/org/codehaus/groovy/ast/expr/MethodCallExpression.java b/src/main/java/org/codehaus/groovy/ast/expr/MethodCallExpression.java
index 089d930..a15cb2f 100644
--- a/src/main/java/org/codehaus/groovy/ast/expr/MethodCallExpression.java
+++ b/src/main/java/org/codehaus/groovy/ast/expr/MethodCallExpression.java
@@ -26,8 +26,6 @@ import org.codehaus.groovy.ast.MethodNode;
 
 /**
  * A method call on an object or class
- *
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public class MethodCallExpression extends Expression implements MethodCall {
 
diff --git a/src/main/java/org/codehaus/groovy/ast/expr/NamedArgumentListExpression.java b/src/main/java/org/codehaus/groovy/ast/expr/NamedArgumentListExpression.java
index b53b89b..6cd7ac5 100644
--- a/src/main/java/org/codehaus/groovy/ast/expr/NamedArgumentListExpression.java
+++ b/src/main/java/org/codehaus/groovy/ast/expr/NamedArgumentListExpression.java
@@ -22,8 +22,6 @@ import java.util.List;
 
 /**
  * Represents one or more arguments being passed into a method by name
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public class NamedArgumentListExpression extends MapExpression {
 
diff --git a/src/main/java/org/codehaus/groovy/ast/expr/NotExpression.java b/src/main/java/org/codehaus/groovy/ast/expr/NotExpression.java
index ec227ee..f404765 100644
--- a/src/main/java/org/codehaus/groovy/ast/expr/NotExpression.java
+++ b/src/main/java/org/codehaus/groovy/ast/expr/NotExpression.java
@@ -20,9 +20,6 @@ package org.codehaus.groovy.ast.expr;
 
 import org.codehaus.groovy.ast.GroovyCodeVisitor;
 
-/**
- * @author sam
- */
 public class NotExpression extends BooleanExpression {
 
     public NotExpression(Expression expression) {
diff --git a/src/main/java/org/codehaus/groovy/ast/expr/PostfixExpression.java b/src/main/java/org/codehaus/groovy/ast/expr/PostfixExpression.java
index 16d12dc..8caabab 100644
--- a/src/main/java/org/codehaus/groovy/ast/expr/PostfixExpression.java
+++ b/src/main/java/org/codehaus/groovy/ast/expr/PostfixExpression.java
@@ -24,8 +24,6 @@ import org.codehaus.groovy.syntax.Token;
 
 /**
  * Represents a postfix expression like foo++ or bar++
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public class PostfixExpression extends Expression {
 
diff --git a/src/main/java/org/codehaus/groovy/ast/expr/PrefixExpression.java b/src/main/java/org/codehaus/groovy/ast/expr/PrefixExpression.java
index 8d8f7b2..b4be8ab 100644
--- a/src/main/java/org/codehaus/groovy/ast/expr/PrefixExpression.java
+++ b/src/main/java/org/codehaus/groovy/ast/expr/PrefixExpression.java
@@ -24,8 +24,6 @@ import org.codehaus.groovy.syntax.Token;
 
 /**
  * Represents a prefix expression like ++foo or --bar
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public class PrefixExpression extends Expression {
 
diff --git a/src/main/java/org/codehaus/groovy/ast/expr/PropertyExpression.java b/src/main/java/org/codehaus/groovy/ast/expr/PropertyExpression.java
index 0b22c02..bfc6638 100644
--- a/src/main/java/org/codehaus/groovy/ast/expr/PropertyExpression.java
+++ b/src/main/java/org/codehaus/groovy/ast/expr/PropertyExpression.java
@@ -22,8 +22,6 @@ import org.codehaus.groovy.ast.GroovyCodeVisitor;
 
 /**
  * Represents a property access such as the expression "foo.bar".
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public class PropertyExpression extends Expression {
 
diff --git a/src/main/java/org/codehaus/groovy/ast/expr/RangeExpression.java b/src/main/java/org/codehaus/groovy/ast/expr/RangeExpression.java
index 9067725..ad61b8c 100644
--- a/src/main/java/org/codehaus/groovy/ast/expr/RangeExpression.java
+++ b/src/main/java/org/codehaus/groovy/ast/expr/RangeExpression.java
@@ -24,8 +24,6 @@ import org.codehaus.groovy.ast.GroovyCodeVisitor;
  * Represents a range expression such as for iterating.
  * E.g.:
  * <pre>for i in 0..10 {...}</pre>
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public class RangeExpression extends Expression {
 
diff --git a/src/main/java/org/codehaus/groovy/ast/expr/StaticMethodCallExpression.java b/src/main/java/org/codehaus/groovy/ast/expr/StaticMethodCallExpression.java
index 679b250..020274c 100644
--- a/src/main/java/org/codehaus/groovy/ast/expr/StaticMethodCallExpression.java
+++ b/src/main/java/org/codehaus/groovy/ast/expr/StaticMethodCallExpression.java
@@ -25,8 +25,6 @@ import org.codehaus.groovy.ast.GroovyCodeVisitor;
 
 /**
  * A static method call on a class
- *
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public class StaticMethodCallExpression extends Expression implements MethodCall {
 
diff --git a/src/main/java/org/codehaus/groovy/ast/expr/TernaryExpression.java b/src/main/java/org/codehaus/groovy/ast/expr/TernaryExpression.java
index a24fd63..6a060dc 100644
--- a/src/main/java/org/codehaus/groovy/ast/expr/TernaryExpression.java
+++ b/src/main/java/org/codehaus/groovy/ast/expr/TernaryExpression.java
@@ -24,8 +24,6 @@ import org.codehaus.groovy.ast.GroovyCodeVisitor;
 
 /**
  * Represents a ternary expression (booleanExpression) ? expression : expression
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public class TernaryExpression extends Expression {
 
diff --git a/src/main/java/org/codehaus/groovy/ast/expr/TupleExpression.java b/src/main/java/org/codehaus/groovy/ast/expr/TupleExpression.java
index 113706a..022b7ae 100644
--- a/src/main/java/org/codehaus/groovy/ast/expr/TupleExpression.java
+++ b/src/main/java/org/codehaus/groovy/ast/expr/TupleExpression.java
@@ -28,8 +28,6 @@ import java.util.List;
 
 /**
  * Represents a tuple expression {1, 2, 3} which creates an immutable List
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public class TupleExpression extends Expression implements Iterable<Expression> {
     private final List<Expression> expressions;
diff --git a/src/main/java/org/codehaus/groovy/ast/expr/UnaryMinusExpression.java b/src/main/java/org/codehaus/groovy/ast/expr/UnaryMinusExpression.java
index 8d1315e..8e040fc 100644
--- a/src/main/java/org/codehaus/groovy/ast/expr/UnaryMinusExpression.java
+++ b/src/main/java/org/codehaus/groovy/ast/expr/UnaryMinusExpression.java
@@ -21,9 +21,6 @@ package org.codehaus.groovy.ast.expr;
 import org.codehaus.groovy.ast.ClassNode;
 import org.codehaus.groovy.ast.GroovyCodeVisitor;
 
-/**
- * @author sam
- */
 public class UnaryMinusExpression extends Expression {
 
     private final Expression expression;
diff --git a/src/main/java/org/codehaus/groovy/ast/expr/UnaryPlusExpression.java b/src/main/java/org/codehaus/groovy/ast/expr/UnaryPlusExpression.java
index 7c3f990..dc18eb2 100644
--- a/src/main/java/org/codehaus/groovy/ast/expr/UnaryPlusExpression.java
+++ b/src/main/java/org/codehaus/groovy/ast/expr/UnaryPlusExpression.java
@@ -21,9 +21,6 @@ package org.codehaus.groovy.ast.expr;
 import org.codehaus.groovy.ast.ClassNode;
 import org.codehaus.groovy.ast.GroovyCodeVisitor;
 
-/**
- * @author Paul King
- */
 public class UnaryPlusExpression extends Expression {
 
     private final Expression expression;
diff --git a/src/main/java/org/codehaus/groovy/ast/expr/VariableExpression.java b/src/main/java/org/codehaus/groovy/ast/expr/VariableExpression.java
index 4ddf07b..9043f7a 100644
--- a/src/main/java/org/codehaus/groovy/ast/expr/VariableExpression.java
+++ b/src/main/java/org/codehaus/groovy/ast/expr/VariableExpression.java
@@ -25,8 +25,6 @@ import org.codehaus.groovy.ast.Variable;
 
 /**
  * Represents a local variable name, the simplest form of expression. e.g.&#160;"foo".
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public class VariableExpression extends Expression implements Variable {
     // The following fields are only used internally; every occurrence of a user-defined expression of the same kind
diff --git a/src/main/java/org/codehaus/groovy/ast/stmt/AssertStatement.java b/src/main/java/org/codehaus/groovy/ast/stmt/AssertStatement.java
index 3f1fb33..2adab38 100644
--- a/src/main/java/org/codehaus/groovy/ast/stmt/AssertStatement.java
+++ b/src/main/java/org/codehaus/groovy/ast/stmt/AssertStatement.java
@@ -29,8 +29,6 @@ import org.codehaus.groovy.ast.expr.Expression;
  * <code>
  * assert i != 0 : "should never be zero";
  * </code>
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public class AssertStatement extends Statement {
 
diff --git a/src/main/java/org/codehaus/groovy/ast/stmt/BlockStatement.java b/src/main/java/org/codehaus/groovy/ast/stmt/BlockStatement.java
index 5013726..d71e1e2 100644
--- a/src/main/java/org/codehaus/groovy/ast/stmt/BlockStatement.java
+++ b/src/main/java/org/codehaus/groovy/ast/stmt/BlockStatement.java
@@ -27,8 +27,6 @@ import java.util.List;
 
 /**
  * A list of statements and a scope. 
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public class BlockStatement extends Statement {
 
diff --git a/src/main/java/org/codehaus/groovy/ast/stmt/BreakStatement.java b/src/main/java/org/codehaus/groovy/ast/stmt/BreakStatement.java
index 5257991..ded97c2 100644
--- a/src/main/java/org/codehaus/groovy/ast/stmt/BreakStatement.java
+++ b/src/main/java/org/codehaus/groovy/ast/stmt/BreakStatement.java
@@ -20,11 +20,8 @@ package org.codehaus.groovy.ast.stmt;
 
 import org.codehaus.groovy.ast.GroovyCodeVisitor;
 
-
 /**
  * Represents a break statement in a switch or loop statement
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public class BreakStatement extends Statement {
 
diff --git a/src/main/java/org/codehaus/groovy/ast/stmt/CaseStatement.java b/src/main/java/org/codehaus/groovy/ast/stmt/CaseStatement.java
index 7c06e69..ad69a55 100644
--- a/src/main/java/org/codehaus/groovy/ast/stmt/CaseStatement.java
+++ b/src/main/java/org/codehaus/groovy/ast/stmt/CaseStatement.java
@@ -24,8 +24,6 @@ import org.codehaus.groovy.ast.expr.Expression;
 
 /**
  * Represents a case statement in a switch statement
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public class CaseStatement extends Statement {
 
diff --git a/src/main/java/org/codehaus/groovy/ast/stmt/CatchStatement.java b/src/main/java/org/codehaus/groovy/ast/stmt/CatchStatement.java
index 3f40957..ce0fe17 100644
--- a/src/main/java/org/codehaus/groovy/ast/stmt/CatchStatement.java
+++ b/src/main/java/org/codehaus/groovy/ast/stmt/CatchStatement.java
@@ -25,8 +25,6 @@ import org.codehaus.groovy.ast.Parameter;
 
 /**
  * Represents a catch (Exception var) { } statement
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public class CatchStatement extends Statement {
 
diff --git a/src/main/java/org/codehaus/groovy/ast/stmt/ContinueStatement.java b/src/main/java/org/codehaus/groovy/ast/stmt/ContinueStatement.java
index 034dcf2..d261b5a 100644
--- a/src/main/java/org/codehaus/groovy/ast/stmt/ContinueStatement.java
+++ b/src/main/java/org/codehaus/groovy/ast/stmt/ContinueStatement.java
@@ -23,8 +23,6 @@ import org.codehaus.groovy.ast.GroovyCodeVisitor;
 
 /**
  * Represents a continue statement in a loop statement
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public class ContinueStatement extends Statement {
 
diff --git a/src/main/java/org/codehaus/groovy/ast/stmt/DoWhileStatement.java b/src/main/java/org/codehaus/groovy/ast/stmt/DoWhileStatement.java
index a7b518b..77ae235 100644
--- a/src/main/java/org/codehaus/groovy/ast/stmt/DoWhileStatement.java
+++ b/src/main/java/org/codehaus/groovy/ast/stmt/DoWhileStatement.java
@@ -23,8 +23,6 @@ import org.codehaus.groovy.ast.expr.BooleanExpression;
 
 /**
  * Represents a do { ... } while (condition) loop in Groovy
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public class DoWhileStatement extends Statement implements LoopingStatement {
 
diff --git a/src/main/java/org/codehaus/groovy/ast/stmt/EmptyStatement.java b/src/main/java/org/codehaus/groovy/ast/stmt/EmptyStatement.java
index d4b706c..ff83eaa 100644
--- a/src/main/java/org/codehaus/groovy/ast/stmt/EmptyStatement.java
+++ b/src/main/java/org/codehaus/groovy/ast/stmt/EmptyStatement.java
@@ -22,8 +22,6 @@ import org.codehaus.groovy.ast.GroovyCodeVisitor;
 
 /**
  * Represents an empty statement
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public class EmptyStatement extends Statement {
 
diff --git a/src/main/java/org/codehaus/groovy/ast/stmt/ExpressionStatement.java b/src/main/java/org/codehaus/groovy/ast/stmt/ExpressionStatement.java
index c6376b2..edb82f3 100644
--- a/src/main/java/org/codehaus/groovy/ast/stmt/ExpressionStatement.java
+++ b/src/main/java/org/codehaus/groovy/ast/stmt/ExpressionStatement.java
@@ -24,8 +24,6 @@ import org.codehaus.groovy.ast.expr.Expression;
 
 /**
  * A simple statement such as a method call where the return value is ignored
- *
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public class ExpressionStatement extends Statement {
 
diff --git a/src/main/java/org/codehaus/groovy/ast/stmt/ForStatement.java b/src/main/java/org/codehaus/groovy/ast/stmt/ForStatement.java
index 072ee6e..0e8b45f 100644
--- a/src/main/java/org/codehaus/groovy/ast/stmt/ForStatement.java
+++ b/src/main/java/org/codehaus/groovy/ast/stmt/ForStatement.java
@@ -27,8 +27,6 @@ import org.codehaus.groovy.ast.expr.Expression;
 
 /**
  * Represents a standard for loop in Groovy
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public class ForStatement extends Statement implements LoopingStatement {
     public static final Parameter FOR_LOOP_DUMMY = new Parameter(ClassHelper.OBJECT_TYPE,"forLoopDummyParameter");
diff --git a/src/main/java/org/codehaus/groovy/ast/stmt/IfStatement.java b/src/main/java/org/codehaus/groovy/ast/stmt/IfStatement.java
index 3f614cc..94629d9 100644
--- a/src/main/java/org/codehaus/groovy/ast/stmt/IfStatement.java
+++ b/src/main/java/org/codehaus/groovy/ast/stmt/IfStatement.java
@@ -23,8 +23,6 @@ import org.codehaus.groovy.ast.expr.BooleanExpression;
 
 /**
  * Represents an if (condition) { ... } else { ... } statement in Groovy
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public class IfStatement extends Statement {
 
diff --git a/src/main/java/org/codehaus/groovy/ast/stmt/LoopingStatement.java b/src/main/java/org/codehaus/groovy/ast/stmt/LoopingStatement.java
index 4568103..c536aa5 100644
--- a/src/main/java/org/codehaus/groovy/ast/stmt/LoopingStatement.java
+++ b/src/main/java/org/codehaus/groovy/ast/stmt/LoopingStatement.java
@@ -22,9 +22,7 @@ package org.codehaus.groovy.ast.stmt;
 * This is an AST Node that provides some sort of looping mechanism. Typically
 * in the form of a block that will be executed repeatedly. 
 * DoWhileStatements, WhileStatements, and ForStatements are all examples of LoopingStatements. 
-*
-* @author Hamlet D'Arcy
-*/ 
+*/
 public interface LoopingStatement {
 
      /**
diff --git a/src/main/java/org/codehaus/groovy/ast/stmt/ReturnStatement.java b/src/main/java/org/codehaus/groovy/ast/stmt/ReturnStatement.java
index 9e08ebd..bfa34d8 100644
--- a/src/main/java/org/codehaus/groovy/ast/stmt/ReturnStatement.java
+++ b/src/main/java/org/codehaus/groovy/ast/stmt/ReturnStatement.java
@@ -24,8 +24,6 @@ import org.codehaus.groovy.ast.expr.Expression;
 
 /**
  * A return statement
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public class ReturnStatement extends Statement {
     /**
diff --git a/src/main/java/org/codehaus/groovy/ast/stmt/Statement.java b/src/main/java/org/codehaus/groovy/ast/stmt/Statement.java
index 80dbc4d..5764df0 100644
--- a/src/main/java/org/codehaus/groovy/ast/stmt/Statement.java
+++ b/src/main/java/org/codehaus/groovy/ast/stmt/Statement.java
@@ -25,8 +25,6 @@ import java.util.List;
 
 /**
  * Base class for any statement
- *
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public class Statement extends ASTNode {
 
diff --git a/src/main/java/org/codehaus/groovy/ast/stmt/SwitchStatement.java b/src/main/java/org/codehaus/groovy/ast/stmt/SwitchStatement.java
index bad0194..52f1d41 100644
--- a/src/main/java/org/codehaus/groovy/ast/stmt/SwitchStatement.java
+++ b/src/main/java/org/codehaus/groovy/ast/stmt/SwitchStatement.java
@@ -26,8 +26,6 @@ import java.util.List;
 
 /**
  * Represents a switch (object) { case value: ... case [1, 2, 3]: ...  default: ... } statement in Groovy.
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public class SwitchStatement extends Statement {
 
diff --git a/src/main/java/org/codehaus/groovy/ast/stmt/SynchronizedStatement.java b/src/main/java/org/codehaus/groovy/ast/stmt/SynchronizedStatement.java
index 1fd3e5c..739cb11 100644
--- a/src/main/java/org/codehaus/groovy/ast/stmt/SynchronizedStatement.java
+++ b/src/main/java/org/codehaus/groovy/ast/stmt/SynchronizedStatement.java
@@ -24,8 +24,6 @@ import org.codehaus.groovy.ast.expr.Expression;
 
 /**
  * Represents a synchronized statement
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public class SynchronizedStatement extends Statement {
 
diff --git a/src/main/java/org/codehaus/groovy/ast/stmt/ThrowStatement.java b/src/main/java/org/codehaus/groovy/ast/stmt/ThrowStatement.java
index a217840..4346086 100644
--- a/src/main/java/org/codehaus/groovy/ast/stmt/ThrowStatement.java
+++ b/src/main/java/org/codehaus/groovy/ast/stmt/ThrowStatement.java
@@ -24,8 +24,6 @@ import org.codehaus.groovy.ast.expr.Expression;
 
 /**
  * Represents a throw statement
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public class ThrowStatement extends Statement {
 
diff --git a/src/main/java/org/codehaus/groovy/ast/stmt/TryCatchStatement.java b/src/main/java/org/codehaus/groovy/ast/stmt/TryCatchStatement.java
index 172e403..223e419 100644
--- a/src/main/java/org/codehaus/groovy/ast/stmt/TryCatchStatement.java
+++ b/src/main/java/org/codehaus/groovy/ast/stmt/TryCatchStatement.java
@@ -25,8 +25,6 @@ import java.util.List;
 
 /**
  * Represents a try { ... } catch () finally {} statement in Groovy
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public class TryCatchStatement extends Statement {
 
diff --git a/src/main/java/org/codehaus/groovy/ast/stmt/WhileStatement.java b/src/main/java/org/codehaus/groovy/ast/stmt/WhileStatement.java
index e325481..38e004e 100644
--- a/src/main/java/org/codehaus/groovy/ast/stmt/WhileStatement.java
+++ b/src/main/java/org/codehaus/groovy/ast/stmt/WhileStatement.java
@@ -23,8 +23,6 @@ import org.codehaus.groovy.ast.expr.BooleanExpression;
 
 /**
  * Represents a while (condition) { ... } loop in Groovy
- *
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public class WhileStatement extends Statement implements LoopingStatement {
 
diff --git a/src/main/java/org/codehaus/groovy/ast/tools/WideningCategories.java b/src/main/java/org/codehaus/groovy/ast/tools/WideningCategories.java
index fb1cc72..2e4f71d 100644
--- a/src/main/java/org/codehaus/groovy/ast/tools/WideningCategories.java
+++ b/src/main/java/org/codehaus/groovy/ast/tools/WideningCategories.java
@@ -67,9 +67,6 @@ import static org.codehaus.groovy.ast.GenericsType.GenericsTypeName;
  * the number 1 being int, since the 1 is an int. The 2l is a long, therefore the
  * int category will not apply and the result type can't be int. The next category
  * in the list is long, and since both apply to long, the result type is a long.
- *
- * @author <a href="mailto:blackdrag@gmx.org">Jochen "blackdrag" Theodorou</a>
- * @author Cedric Champeau
  */
 public class WideningCategories {
 
diff --git a/src/main/java/org/codehaus/groovy/classgen/BytecodeExpression.java b/src/main/java/org/codehaus/groovy/classgen/BytecodeExpression.java
index ca8030f..670e484 100644
--- a/src/main/java/org/codehaus/groovy/classgen/BytecodeExpression.java
+++ b/src/main/java/org/codehaus/groovy/classgen/BytecodeExpression.java
@@ -26,8 +26,6 @@ import org.objectweb.asm.MethodVisitor;
 
 /**
  * Represents some custom bytecode generation by the compiler
- *
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public abstract class BytecodeExpression extends Expression {
     public static final BytecodeExpression NOP = new BytecodeExpression() {
diff --git a/src/main/java/org/codehaus/groovy/classgen/BytecodeInstruction.java b/src/main/java/org/codehaus/groovy/classgen/BytecodeInstruction.java
index e390654..a0bb9a7 100644
--- a/src/main/java/org/codehaus/groovy/classgen/BytecodeInstruction.java
+++ b/src/main/java/org/codehaus/groovy/classgen/BytecodeInstruction.java
@@ -1,32 +1,30 @@
-/*
- *  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.classgen;
-
-import org.objectweb.asm.MethodVisitor;
-
-/**
- * Helper class used by the class generator. Usually
- * an inner class is produced, that contains bytecode
- * creation code in the visit method.
- *
- * @author Jochen Theodorou
- */
-public abstract class BytecodeInstruction {
-    public abstract void visit(MethodVisitor mv);
-}
+/*
+ *  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.classgen;
+
+import org.objectweb.asm.MethodVisitor;
+
+/**
+ * Helper class used by the class generator. Usually
+ * an inner class is produced, that contains bytecode
+ * creation code in the visit method.
+ */
+public abstract class BytecodeInstruction {
+    public abstract void visit(MethodVisitor mv);
+}
diff --git a/src/main/java/org/codehaus/groovy/classgen/ClassGenerator.java b/src/main/java/org/codehaus/groovy/classgen/ClassGenerator.java
index 2ed8661..237b06d 100644
--- a/src/main/java/org/codehaus/groovy/classgen/ClassGenerator.java
+++ b/src/main/java/org/codehaus/groovy/classgen/ClassGenerator.java
@@ -27,9 +27,6 @@ import java.util.LinkedList;
 
 /**
  * Abstract base class for generator of Java class versions of Groovy AST classes
- *
- * @author <a href="mailto:jstrachan@protique.com">James Strachan</a>
- * @author Russel Winder
  */
 public abstract class ClassGenerator extends ClassCodeVisitorSupport implements Opcodes {
     // inner classes created while generating bytecode
diff --git a/src/main/java/org/codehaus/groovy/classgen/ClassGeneratorException.java b/src/main/java/org/codehaus/groovy/classgen/ClassGeneratorException.java
index 5c404ec..280f59d 100644
--- a/src/main/java/org/codehaus/groovy/classgen/ClassGeneratorException.java
+++ b/src/main/java/org/codehaus/groovy/classgen/ClassGeneratorException.java
@@ -20,8 +20,6 @@ package org.codehaus.groovy.classgen;
 
 /**
  * An exception thrown by the class generator
- *
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public class ClassGeneratorException extends RuntimeException {
 
diff --git a/src/main/java/org/codehaus/groovy/classgen/DummyClassGenerator.java b/src/main/java/org/codehaus/groovy/classgen/DummyClassGenerator.java
index 15ade40..b85f91a 100644
--- a/src/main/java/org/codehaus/groovy/classgen/DummyClassGenerator.java
+++ b/src/main/java/org/codehaus/groovy/classgen/DummyClassGenerator.java
@@ -40,9 +40,6 @@ import java.util.Iterator;
  * To generate a class that has all the fields and methods, except that fields are not initialized
  * and methods are empty. It's intended for being used as a place holder during code generation
  * of reference to the "this" class itself.
- *
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @author <a href="mailto:b55r@sina.com">Bing Ran</a>
  */
 public class DummyClassGenerator extends ClassGenerator {
 
diff --git a/src/main/java/org/codehaus/groovy/classgen/GeneratorContext.java b/src/main/java/org/codehaus/groovy/classgen/GeneratorContext.java
index da51a0a..4fc9c92 100644
--- a/src/main/java/org/codehaus/groovy/classgen/GeneratorContext.java
+++ b/src/main/java/org/codehaus/groovy/classgen/GeneratorContext.java
@@ -27,8 +27,6 @@ import org.codehaus.groovy.ast.MethodNode;
 
 /**
  * A context shared across generations of a class and its inner classes
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public class GeneratorContext {
 
diff --git a/src/main/java/org/codehaus/groovy/classgen/VerifierCodeVisitor.java b/src/main/java/org/codehaus/groovy/classgen/VerifierCodeVisitor.java
index 424aa7e..2cb9fc2 100644
--- a/src/main/java/org/codehaus/groovy/classgen/VerifierCodeVisitor.java
+++ b/src/main/java/org/codehaus/groovy/classgen/VerifierCodeVisitor.java
@@ -35,8 +35,6 @@ import org.objectweb.asm.Opcodes;
  * Performs various checks on code inside methods and constructors
  * including checking for valid field, variables names etc. that
  * would otherwise lead to invalid code.
- *
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public class VerifierCodeVisitor extends CodeVisitorSupport implements Opcodes {
 
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/BinaryDoubleExpressionHelper.java b/src/main/java/org/codehaus/groovy/classgen/asm/BinaryDoubleExpressionHelper.java
index 736e060..669aa88 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/BinaryDoubleExpressionHelper.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/BinaryDoubleExpressionHelper.java
@@ -32,9 +32,6 @@ import static org.objectweb.asm.Opcodes.DMUL;
 import static org.objectweb.asm.Opcodes.DREM;
 import static org.objectweb.asm.Opcodes.DSUB;
 
-/**
- * @author <a href="mailto:blackdrag@gmx.org">Jochen "blackdrag" Theodorou</a>
- */
 public class BinaryDoubleExpressionHelper extends BinaryLongExpressionHelper {
 
 
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/BinaryExpressionWriter.java b/src/main/java/org/codehaus/groovy/classgen/asm/BinaryExpressionWriter.java
index c03515a..de949a8 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/BinaryExpressionWriter.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/BinaryExpressionWriter.java
@@ -44,7 +44,6 @@ import static org.objectweb.asm.Opcodes.IFNE;
 
 /**
  * Base class for writing primitive typed operations
- * @author <a href="mailto:blackdrag@gmx.org">Jochen "blackdrag" Theodorou</a>
  */
 public abstract class BinaryExpressionWriter {
     
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/BinaryFloatExpressionHelper.java b/src/main/java/org/codehaus/groovy/classgen/asm/BinaryFloatExpressionHelper.java
index 6a4552a..5e7a012 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/BinaryFloatExpressionHelper.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/BinaryFloatExpressionHelper.java
@@ -34,9 +34,6 @@ import static org.objectweb.asm.Opcodes.FREM;
 import static org.objectweb.asm.Opcodes.FSUB;
 import static org.objectweb.asm.Opcodes.POP2;
 
-/**
- * @author <a href="mailto:blackdrag@gmx.org">Jochen "blackdrag" Theodorou</a>
- */
 public class BinaryFloatExpressionHelper extends BinaryExpressionWriter {
 
     public BinaryFloatExpressionHelper(WriterController controller) {
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/BinaryLongExpressionHelper.java b/src/main/java/org/codehaus/groovy/classgen/asm/BinaryLongExpressionHelper.java
index 8bfaf98..95558e1 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/BinaryLongExpressionHelper.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/BinaryLongExpressionHelper.java
@@ -39,9 +39,6 @@ import static org.objectweb.asm.Opcodes.LUSHR;
 import static org.objectweb.asm.Opcodes.LXOR;
 import static org.objectweb.asm.Opcodes.POP2;
 
-/**
- * @author <a href="mailto:blackdrag@gmx.org">Jochen "blackdrag" Theodorou</a>
- */
 public class BinaryLongExpressionHelper extends BinaryExpressionWriter {
 
     /**
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/BinaryObjectExpressionHelper.java b/src/main/java/org/codehaus/groovy/classgen/asm/BinaryObjectExpressionHelper.java
index 31350d5..f625279 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/BinaryObjectExpressionHelper.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/BinaryObjectExpressionHelper.java
@@ -24,9 +24,6 @@ import org.codehaus.groovy.ast.ClassNode;
 import org.codehaus.groovy.runtime.BytecodeInterface8;
 import org.objectweb.asm.MethodVisitor;
 
-/**
- * @author <a href="mailto:blackdrag@gmx.org">Jochen "blackdrag" Theodorou</a>
- */
 public class BinaryObjectExpressionHelper extends BinaryExpressionWriter {
     private static final MethodCaller arrayGet = MethodCaller.newStatic(BytecodeInterface8.class, "objectArrayGet");
     private static final MethodCaller arraySet = MethodCaller.newStatic(BytecodeInterface8.class, "objectArraySet");
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/BytecodeDumper.java b/src/main/java/org/codehaus/groovy/classgen/asm/BytecodeDumper.java
index 935020f..86359e6 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/BytecodeDumper.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/BytecodeDumper.java
@@ -28,7 +28,6 @@ import java.io.Writer;
 /**
  * An utility class which can be used in test cases to dump generated bytecode.
  *
- * @author Cédric Champeau
  * @since 2.4.0
  */
 public class BytecodeDumper implements BytecodeProcessor {
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/BytecodeHelper.java b/src/main/java/org/codehaus/groovy/classgen/asm/BytecodeHelper.java
index b5880fd..b010726 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/BytecodeHelper.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/BytecodeHelper.java
@@ -46,10 +46,6 @@ import static org.codehaus.groovy.ast.ClassHelper.short_TYPE;
 
 /**
  * A helper class for bytecode generation with AsmClassGenerator.
- *
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @author <a href="mailto:b55r@sina.com">Bing Ran</a>
- * @author <a href="mailto:blackdrag@gmx.org">Jochen Theodorou</a>
  */
 public class BytecodeHelper implements Opcodes {
     
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/BytecodeVariable.java b/src/main/java/org/codehaus/groovy/classgen/asm/BytecodeVariable.java
index 1f34bc3..8ca64fe 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/BytecodeVariable.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/BytecodeVariable.java
@@ -24,9 +24,6 @@ import org.objectweb.asm.Label;
 
 /**
  * Represents compile time variable metadata while compiling a method.
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @author <a href="mailto:blackdrag@gmx.org">Jochen Theodorou</a>
  */
 public class BytecodeVariable {
     
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/CompileStack.java b/src/main/java/org/codehaus/groovy/classgen/asm/CompileStack.java
index 35133bb..3caafad 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/CompileStack.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/CompileStack.java
@@ -67,7 +67,6 @@ import java.util.Map;
  *
  *
  * @see org.codehaus.groovy.classgen.AsmClassGenerator
- * @author Jochen Theodorou
  */
 public class CompileStack implements Opcodes {
     /**
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/DelegatingController.java b/src/main/java/org/codehaus/groovy/classgen/asm/DelegatingController.java
index 22acbaa..36bb501 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/DelegatingController.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/DelegatingController.java
@@ -30,7 +30,6 @@ import org.objectweb.asm.MethodVisitor;
 
 /**
  * This class will delegate all calls to a WriterController given in the constructor. 
- * @author <a href="mailto:blackdrag@gmx.org">Jochen "blackdrag" Theodorou</a>
  */
 public class DelegatingController extends WriterController {
     private final WriterController delegationController;
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/ExpressionAsVariableSlot.java b/src/main/java/org/codehaus/groovy/classgen/asm/ExpressionAsVariableSlot.java
index a9e568b..9570a44 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/ExpressionAsVariableSlot.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/ExpressionAsVariableSlot.java
@@ -29,7 +29,6 @@ import org.objectweb.asm.MethodVisitor;
  * the visit is completed. A copy of the variable will stay on the stack. 
  * Subsequent visits will load the stored value instead of visiting the 
  * expression again
- * @author <a href="mailto:blackdrag@gmx.org">Jochen "blackdrag" Theodorou</a>
  */
 public class ExpressionAsVariableSlot extends BytecodeExpression {
     private int index = -1;
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/MethodCaller.java b/src/main/java/org/codehaus/groovy/classgen/asm/MethodCaller.java
index bc40952..9ebb34d 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/MethodCaller.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/MethodCaller.java
@@ -27,8 +27,6 @@ import java.lang.reflect.Method;
 
 /**
  * A helper class to invoke methods more easily in ASM
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public class MethodCaller implements Opcodes {
 
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/StatementMetaTypeChooser.java b/src/main/java/org/codehaus/groovy/classgen/asm/StatementMetaTypeChooser.java
index 2ada09d..c02b4f3 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/StatementMetaTypeChooser.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/StatementMetaTypeChooser.java
@@ -28,9 +28,6 @@ import org.codehaus.groovy.ast.expr.VariableExpression;
 
 /**
  * A {@link TypeChooser} which is aware of statement metadata.
- *
- * @author Jochen Theodorou
- * @author Cedric Champeau
  */
 public class StatementMetaTypeChooser implements TypeChooser {
     public ClassNode resolveType(final Expression exp, final ClassNode current) {
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/TypeChooser.java b/src/main/java/org/codehaus/groovy/classgen/asm/TypeChooser.java
index ec552b3..5455224 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/TypeChooser.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/TypeChooser.java
@@ -25,8 +25,6 @@ import org.codehaus.groovy.ast.expr.Expression;
  * Interface for modules which are capable of resolving the type of an expression.
  * Several implementations are available, depending on whether you are in a dynamic
  * or static compilation mode.
- *
- * @author Cedric Champeau
  */
 public interface TypeChooser {
 
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/UnaryExpressionHelper.java b/src/main/java/org/codehaus/groovy/classgen/asm/UnaryExpressionHelper.java
index 0ebd9b4..9ed2792 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/UnaryExpressionHelper.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/UnaryExpressionHelper.java
@@ -33,8 +33,6 @@ import org.codehaus.groovy.runtime.ScriptBytecodeAdapter;
  * helper.
  *
  * @see BinaryExpressionHelper
- *
- * @author Cedric Champeau
  */
 public class UnaryExpressionHelper {
 
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/WriterControllerFactory.java b/src/main/java/org/codehaus/groovy/classgen/asm/WriterControllerFactory.java
index a47f309..a98bd44 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/WriterControllerFactory.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/WriterControllerFactory.java
@@ -20,7 +20,6 @@ package org.codehaus.groovy.classgen.asm;
 
 /**
  * A non static factory to get alternative writer controller to be stored in the meta data
- * @author <a href="mailto:blackdrag@gmx.org">Jochen "blackdrag" Theodorou</a>
  */
 public interface WriterControllerFactory {
     WriterController makeController(WriterController normalController);
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/indy/IndyCallSiteWriter.java b/src/main/java/org/codehaus/groovy/classgen/asm/indy/IndyCallSiteWriter.java
index 1a80e06..da73e57 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/indy/IndyCallSiteWriter.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/indy/IndyCallSiteWriter.java
@@ -27,7 +27,6 @@ import org.codehaus.groovy.classgen.asm.WriterController;
  * This class mostly contains empty stubs for calls to the call site writer,
  * since this class is normally used to prepare call site caching and in indy
  * call site caching is done by the jvm.
- * @author <a href="mailto:blackdrag@gmx.org">Jochen "blackdrag" Theodorou</a>
  */
 public class IndyCallSiteWriter extends CallSiteWriter {
     private final WriterController controller;
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/indy/InvokeDynamicWriter.java b/src/main/java/org/codehaus/groovy/classgen/asm/indy/InvokeDynamicWriter.java
index 1b74a11..0cde5aa 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/indy/InvokeDynamicWriter.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/indy/InvokeDynamicWriter.java
@@ -58,8 +58,6 @@ import static org.objectweb.asm.Opcodes.H_INVOKESTATIC;
 /**
  * This Writer is used to generate the call invocation byte codes
  * for usage by invokedynamic.
- * 
- * @author <a href="mailto:blackdrag@gmx.org">Jochen "blackdrag" Theodorou</a>
  */
 public class InvokeDynamicWriter extends InvocationWriter {
     
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/indy/sc/IndyStaticTypesMultiTypeDispatcher.java b/src/main/java/org/codehaus/groovy/classgen/asm/indy/sc/IndyStaticTypesMultiTypeDispatcher.java
index ebcf2a8..4fa6e36 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/indy/sc/IndyStaticTypesMultiTypeDispatcher.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/indy/sc/IndyStaticTypesMultiTypeDispatcher.java
@@ -32,7 +32,7 @@ import java.lang.invoke.MethodType;
 
 /**
  * Multi type dispatcher for binary expression backend combining indy and static compilation
- * @author Jochen Theodorou
+ *
  * @since 2.5.0
  */
 public class IndyStaticTypesMultiTypeDispatcher extends StaticTypesBinaryExpressionMultiTypeDispatcher {
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticCompilationMopWriter.java b/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticCompilationMopWriter.java
index 5a09829..c30040d 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticCompilationMopWriter.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticCompilationMopWriter.java
@@ -31,7 +31,6 @@ import java.util.LinkedList;
  * when a class is *fully* statically compiled. In mixed mode, MOP methods are
  * still generated.
  *
- * @author Cédric Champeau
  * @since 2.4.0
  */
 public class StaticCompilationMopWriter extends MopWriter {
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticPropertyAccessHelper.java b/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticPropertyAccessHelper.java
index 6027a0c..b36801b 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticPropertyAccessHelper.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticPropertyAccessHelper.java
@@ -32,7 +32,6 @@ import java.util.Arrays;
 /**
  * Contains helper methods aimed at facilitating the generation of statically compiled bytecode for property access.
  *
- * @author Cédric Champeau
  * @since 2.4.0
  */
 public abstract class StaticPropertyAccessHelper {
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesBinaryExpressionMultiTypeDispatcher.java b/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesBinaryExpressionMultiTypeDispatcher.java
index 9078aee..7168996 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesBinaryExpressionMultiTypeDispatcher.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesBinaryExpressionMultiTypeDispatcher.java
@@ -76,9 +76,6 @@ import static org.codehaus.groovy.transform.sc.StaticCompilationVisitor.ARRAYLIS
 /**
  * A specialized version of the multi type binary expression dispatcher which is aware of static compilation.
  * It is able to generate optimized bytecode for some operations using JVM instructions when available.
- *
- * @author Cedric Champeau
- * @author Jochen Theodorou
  */
 public class StaticTypesBinaryExpressionMultiTypeDispatcher extends BinaryExpressionMultiTypeDispatcher implements Opcodes {
 
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesCallSiteWriter.java b/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesCallSiteWriter.java
index 164b598..99226c3 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesCallSiteWriter.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesCallSiteWriter.java
@@ -91,8 +91,6 @@ import static org.codehaus.groovy.transform.stc.StaticTypeCheckingSupport.isClas
  * A call site writer which replaces call site caching with static calls. This means that the generated code
  * looks more like Java code than dynamic Groovy code. Best effort is made to use JVM instructions instead of
  * calls to helper methods.
- *
- * @author Cedric Champeau
  */
 public class StaticTypesCallSiteWriter extends CallSiteWriter implements Opcodes {
 
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesClosureWriter.java b/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesClosureWriter.java
index fc26486..e65f03d 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesClosureWriter.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesClosureWriter.java
@@ -41,8 +41,6 @@ import java.util.List;
 
 /**
  * Writer responsible for generating closure classes in statically compiled mode.
- *
- * @author Cedric Champeau
  */
 public class StaticTypesClosureWriter extends ClosureWriter {
     public StaticTypesClosureWriter(WriterController wc) {
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesStatementWriter.java b/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesStatementWriter.java
index cabc3c4..f049eb8 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesStatementWriter.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesStatementWriter.java
@@ -60,7 +60,6 @@ import static org.objectweb.asm.Opcodes.SALOAD;
 
 /**
  * A class to write out the optimized statements
- * @author <a href="mailto:blackdrag@gmx.org">Jochen "blackdrag" Theodorou</a>
  */
 public class StaticTypesStatementWriter extends StatementWriter {
 
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesTypeChooser.java b/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesTypeChooser.java
index a3e4551..fbcaa94 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesTypeChooser.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesTypeChooser.java
@@ -30,8 +30,6 @@ import org.codehaus.groovy.transform.stc.StaticTypesMarker;
 /**
  * A {@link org.codehaus.groovy.classgen.asm.TypeChooser} which reads type information from node metadata
  * generated by the {@link groovy.transform.CompileStatic} annotation.
- *
- * @author Cedric Champeau
  */
 public class StaticTypesTypeChooser extends StatementMetaTypeChooser {
     @Override
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesUnaryExpressionHelper.java b/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesUnaryExpressionHelper.java
index 73adb10..c02e0e2 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesUnaryExpressionHelper.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesUnaryExpressionHelper.java
@@ -46,8 +46,6 @@ import static org.codehaus.groovy.ast.ClassHelper.short_TYPE;
 /**
  * An unary expression helper which generates optimized bytecode depending on
  * the current type on top of the operand stack.
- *
- * @author Cedric Champeau
  */
 public class StaticTypesUnaryExpressionHelper extends UnaryExpressionHelper implements Opcodes {
     private static final UnaryMinusExpression EMPTY_UNARY_MINUS = new UnaryMinusExpression(EmptyExpression.INSTANCE);
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesWriterController.java b/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesWriterController.java
index 47ef3d4..a160bb5 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesWriterController.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesWriterController.java
@@ -47,8 +47,6 @@ import org.objectweb.asm.ClassVisitor;
  * An alternative {@link org.codehaus.groovy.classgen.asm.WriterController} which handles static types and method
  * dispatch. In case of a "mixed mode" where only some methods are annotated with {@link groovy.transform.TypeChecked}
  * then this writer will delegate to the classic writer controller.
- *
- * @author Cedric Champeau
  */
 public class StaticTypesWriterController extends DelegatingController {
 
diff --git a/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesWriterControllerFactoryImpl.java b/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesWriterControllerFactoryImpl.java
index c68f635..41f2dea 100644
--- a/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesWriterControllerFactoryImpl.java
+++ b/src/main/java/org/codehaus/groovy/classgen/asm/sc/StaticTypesWriterControllerFactoryImpl.java
@@ -21,9 +21,6 @@ package org.codehaus.groovy.classgen.asm.sc;
 import org.codehaus.groovy.classgen.asm.WriterController;
 import org.codehaus.groovy.classgen.asm.WriterControllerFactory;
 
-/**
- * @author <a href="mailto:blackdrag@gmx.org">Jochen "blackdrag" Theodorou</a>
- */
 public class StaticTypesWriterControllerFactoryImpl implements WriterControllerFactory {
 
     public WriterController makeController(WriterController normalController) {
diff --git a/src/main/java/org/codehaus/groovy/control/ASTTransformationsContext.java b/src/main/java/org/codehaus/groovy/control/ASTTransformationsContext.java
index ae95275..727dd25 100644
--- a/src/main/java/org/codehaus/groovy/control/ASTTransformationsContext.java
+++ b/src/main/java/org/codehaus/groovy/control/ASTTransformationsContext.java
@@ -25,8 +25,6 @@ import java.util.Set;
 
 /**
  * Stores state information about global AST transformations applied to a compilation unit.
- *
- * @author Cedric Champeau
 */
 public class ASTTransformationsContext {
     protected final GroovyClassLoader transformLoader;  // Classloader for global and local transforms
diff --git a/src/main/java/org/codehaus/groovy/control/ClassNodeResolver.java b/src/main/java/org/codehaus/groovy/control/ClassNodeResolver.java
index 844d7c6..05c938b 100644
--- a/src/main/java/org/codehaus/groovy/control/ClassNodeResolver.java
+++ b/src/main/java/org/codehaus/groovy/control/ClassNodeResolver.java
@@ -53,14 +53,11 @@ import java.util.Map;
  * supposed to go into the method 
  * {@link ClassNodeResolver#findClassNode(String, CompilationUnit)} while the 
  * entry method is {@link ClassNodeResolver#resolveName(String, CompilationUnit)}
- * 
- * @author <a href="mailto:blackdrag@gmx.org">Jochen "blackdrag" Theodorou</a>
  */
 public class ClassNodeResolver {
 
     /**
      * Helper class to return either a SourceUnit or ClassNode.
-     * @author <a href="mailto:blackdrag@gmx.org">Jochen "blackdrag" Theodorou</a>
      */
     public static class LookupResult {
         private final SourceUnit su;
diff --git a/src/main/java/org/codehaus/groovy/control/CompilationFailedException.java b/src/main/java/org/codehaus/groovy/control/CompilationFailedException.java
index 2930b8c..d57f631 100644
--- a/src/main/java/org/codehaus/groovy/control/CompilationFailedException.java
+++ b/src/main/java/org/codehaus/groovy/control/CompilationFailedException.java
@@ -23,10 +23,7 @@ import groovy.lang.GroovyRuntimeException;
 
 /**
  * Thrown when compilation fails from source errors.
- *
- * @author <a href="mailto:cpoirier@dreaming.org">Chris Poirier</a>
  */
-
 public class CompilationFailedException extends GroovyRuntimeException {
 
     private static final long serialVersionUID = 4500269747315896966L;
diff --git a/src/main/java/org/codehaus/groovy/control/CompilationUnit.java b/src/main/java/org/codehaus/groovy/control/CompilationUnit.java
index 5df90d9..26e58bf 100644
--- a/src/main/java/org/codehaus/groovy/control/CompilationUnit.java
+++ b/src/main/java/org/codehaus/groovy/control/CompilationUnit.java
@@ -73,10 +73,6 @@ import java.util.Map;
  * <p>
  * You can also add PhaseOperations to this compilation using the addPhaseOperation method.
  * This is commonly used when you want to wire a new AST Transformation into the compilation.
- *
- * @author <a href="mailto:cpoirier@dreaming.org">Chris Poirier</a>
- * @author <a href="mailto:blackdrag@gmx.org">Jochen Theodorou</a>
- * @author <a href="mailto:roshandawrani@codehaus.org">Roshan Dawrani</a>
  */
 
 public class CompilationUnit extends ProcessingUnit {
diff --git a/src/main/java/org/codehaus/groovy/control/CompilePhase.java b/src/main/java/org/codehaus/groovy/control/CompilePhase.java
index 7b25fed..edfa08e 100644
--- a/src/main/java/org/codehaus/groovy/control/CompilePhase.java
+++ b/src/main/java/org/codehaus/groovy/control/CompilePhase.java
@@ -1,118 +1,116 @@
-/*
- *  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.control;
-
-/**
-* The phases of the GroovyCompiler. This is an enum facade on top of the 
-* Phases object. In general, prefer using this object over Phases. 
-*
-* @author Hamlet D'Arcy
-*/ 
-public enum CompilePhase {
-
-    /**
-    * source files are opened and environment configured
-    */ 
-    INITIALIZATION(Phases.INITIALIZATION),
-    
-    /**
-    * the grammar is used to to produce tree of tokens representing the source code
-    */ 
-    PARSING(Phases.PARSING),
-    
-    /**
-    * An abstract syntax tree (AST) is created from token trees
-    */ 
-    CONVERSION(Phases.CONVERSION),
-    
-    /**
-    * Performs consistency and validity checks that the grammar can't check for, and resolves classes
-    */ 
-    SEMANTIC_ANALYSIS(Phases.SEMANTIC_ANALYSIS),
-    
-    /**
-    * Complete building the AST
-    */ 
-    CANONICALIZATION(Phases.CANONICALIZATION),
-    
-    /**
-    * instruction set is chosen, for example java5 or pre java5
-    */ 
-    INSTRUCTION_SELECTION(Phases.INSTRUCTION_SELECTION),
-    
-    /**
-    * creates the binary output in memory
-    */ 
-    CLASS_GENERATION(Phases.CLASS_GENERATION),
-    
-    /**
-    * write the binary output to the file system
-    */ 
-    OUTPUT(Phases.OUTPUT),
-    
-    /**
-    * Perform any last cleanup
-    */ 
-    FINALIZATION(Phases.FINALIZATION),
-    ;
-
-    /**
-    * The phases as an array, with a null entry. 
-    */ 
-    public static CompilePhase[] phases = {
-        null,
-        INITIALIZATION,
-        PARSING,
-        CONVERSION,
-        SEMANTIC_ANALYSIS,
-        CANONICALIZATION,
-        INSTRUCTION_SELECTION,
-        CLASS_GENERATION,
-        OUTPUT,
-        FINALIZATION,
-    };
-
-    int phaseNumber;
-    CompilePhase(int phaseNumber) {
-        this.phaseNumber = phaseNumber;
-    }
-
-    /**
-    * Returns the underlieng integer Phase number. 
-    */ 
-    public int getPhaseNumber() {
-        return phaseNumber;
-    }
-
-    /**
-     * Returns the CompilePhase for the given integer phase number.
-     * @param phaseNumber
-     *      the phase number
-     * @return
-     *      the CompilePhase or null if not found
-     */
-    public static CompilePhase fromPhaseNumber(int phaseNumber) {
-        for (CompilePhase phase : values()) {
-            if (phase.phaseNumber == phaseNumber) {
-                return phase;
-            }
-        }
-        return null;
-    }
-}
+/*
+ *  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.control;
+
+/**
+* The phases of the GroovyCompiler. This is an enum facade on top of the 
+* Phases object. In general, prefer using this object over Phases. 
+*/
+public enum CompilePhase {
+
+    /**
+    * source files are opened and environment configured
+    */ 
+    INITIALIZATION(Phases.INITIALIZATION),
+    
+    /**
+    * the grammar is used to to produce tree of tokens representing the source code
+    */ 
+    PARSING(Phases.PARSING),
+    
+    /**
+    * An abstract syntax tree (AST) is created from token trees
+    */ 
+    CONVERSION(Phases.CONVERSION),
+    
+    /**
+    * Performs consistency and validity checks that the grammar can't check for, and resolves classes
+    */ 
+    SEMANTIC_ANALYSIS(Phases.SEMANTIC_ANALYSIS),
+    
+    /**
+    * Complete building the AST
+    */ 
+    CANONICALIZATION(Phases.CANONICALIZATION),
+    
+    /**
+    * instruction set is chosen, for example java5 or pre java5
+    */ 
+    INSTRUCTION_SELECTION(Phases.INSTRUCTION_SELECTION),
+    
+    /**
+    * creates the binary output in memory
+    */ 
+    CLASS_GENERATION(Phases.CLASS_GENERATION),
+    
+    /**
+    * write the binary output to the file system
+    */ 
+    OUTPUT(Phases.OUTPUT),
+    
+    /**
+    * Perform any last cleanup
+    */ 
+    FINALIZATION(Phases.FINALIZATION),
+    ;
+
+    /**
+    * The phases as an array, with a null entry. 
+    */ 
+    public static CompilePhase[] phases = {
+        null,
+        INITIALIZATION,
+        PARSING,
+        CONVERSION,
+        SEMANTIC_ANALYSIS,
+        CANONICALIZATION,
+        INSTRUCTION_SELECTION,
+        CLASS_GENERATION,
+        OUTPUT,
+        FINALIZATION,
+    };
+
+    int phaseNumber;
+    CompilePhase(int phaseNumber) {
+        this.phaseNumber = phaseNumber;
+    }
+
+    /**
+    * Returns the underlieng integer Phase number. 
+    */ 
+    public int getPhaseNumber() {
+        return phaseNumber;
+    }
+
+    /**
+     * Returns the CompilePhase for the given integer phase number.
+     * @param phaseNumber
+     *      the phase number
+     * @return
+     *      the CompilePhase or null if not found
+     */
+    public static CompilePhase fromPhaseNumber(int phaseNumber) {
+        for (CompilePhase phase : values()) {
+            if (phase.phaseNumber == phaseNumber) {
+                return phase;
+            }
+        }
+        return null;
+    }
+}
diff --git a/src/main/java/org/codehaus/groovy/control/HasCleanup.java b/src/main/java/org/codehaus/groovy/control/HasCleanup.java
index e7f2365..5daaea9 100644
--- a/src/main/java/org/codehaus/groovy/control/HasCleanup.java
+++ b/src/main/java/org/codehaus/groovy/control/HasCleanup.java
@@ -19,13 +19,9 @@
 package org.codehaus.groovy.control;
 
 /**
- *  An interface for things that need to be cleaned up after
- *  operations complete.
- *
- *  @author <a href="mailto:cpoirier@dreaming.org">Chris Poirier</a>
+ * An interface for things that need to be cleaned up after
+ * operations complete.
  */
-
-public interface HasCleanup 
-{
+public interface HasCleanup {
     void cleanup();
 }
diff --git a/src/main/java/org/codehaus/groovy/control/Janitor.java b/src/main/java/org/codehaus/groovy/control/Janitor.java
index 8d08ebd..862bc09 100644
--- a/src/main/java/org/codehaus/groovy/control/Janitor.java
+++ b/src/main/java/org/codehaus/groovy/control/Janitor.java
@@ -23,33 +23,28 @@ import java.util.Iterator;
 import java.util.Set;
 
 /**
- *  An agent that can be used to defer cleanup operations to 
- *  a later time.  Users much implement the HasCleanup interface.  
- *
- *  @author <a href="mailto:cpoirier@dreaming.org">Chris Poirier</a>
+ * An agent that can be used to defer cleanup operations to
+ * a later time.  Users much implement the HasCleanup interface.
  */
-
-public class Janitor implements HasCleanup
-{
+public class Janitor implements HasCleanup {
     private final Set pending = new HashSet();   // All objects pending cleanup
-    
-    public void register( HasCleanup object )
-    {
-        pending.add( object );
+
+    public void register(HasCleanup object) {
+        pending.add(object);
     }
-    
-    public void cleanup()
-    {
+
+    public void cleanup() {
         Iterator iterator = pending.iterator();
-        while( iterator.hasNext() )
-        {
-            HasCleanup object = (HasCleanup)iterator.next();
-            
-            try { object.cleanup(); } catch( Exception e ) {
+        while (iterator.hasNext()) {
+            HasCleanup object = (HasCleanup) iterator.next();
+
+            try {
+                object.cleanup();
+            } catch (Exception e) {
                 // Ignore
             }
         }
-        
+
         pending.clear();
     }
 }
diff --git a/src/main/java/org/codehaus/groovy/control/LabelVerifier.java b/src/main/java/org/codehaus/groovy/control/LabelVerifier.java
index 1aea0be..3c82c14 100644
--- a/src/main/java/org/codehaus/groovy/control/LabelVerifier.java
+++ b/src/main/java/org/codehaus/groovy/control/LabelVerifier.java
@@ -33,8 +33,6 @@ import java.util.List;
 
 /**
  * This class checks the handling of labels in the AST
- *
- * @author Jochen Theodorou
  */
 public class LabelVerifier extends ClassCodeVisitorSupport {
 
diff --git a/src/main/java/org/codehaus/groovy/control/Phases.java b/src/main/java/org/codehaus/groovy/control/Phases.java
index 47e421f..eecba8d 100644
--- a/src/main/java/org/codehaus/groovy/control/Phases.java
+++ b/src/main/java/org/codehaus/groovy/control/Phases.java
@@ -18,50 +18,41 @@
  */
 package org.codehaus.groovy.control;
 
-
-
-
 /**
- *  Compilation phase identifiers.  
- *
- *  @author <a href="mailto:cpoirier@dreaming.org">Chris Poirier</a>
+ * Compilation phase identifiers.
  */
-
-public class Phases
-{
-    public static final int INITIALIZATION        = 1;   // Opening of files and such
-    public static final int PARSING               = 2;   // Lexing, parsing, and AST building
-    public static final int CONVERSION            = 3;   // CST to AST conversion
-    public static final int SEMANTIC_ANALYSIS     = 4;   // AST semantic analysis and elucidation
-    public static final int CANONICALIZATION      = 5;   // AST completion
+public class Phases {
+    public static final int INITIALIZATION = 1;   // Opening of files and such
+    public static final int PARSING = 2;   // Lexing, parsing, and AST building
+    public static final int CONVERSION = 3;   // CST to AST conversion
+    public static final int SEMANTIC_ANALYSIS = 4;   // AST semantic analysis and elucidation
+    public static final int CANONICALIZATION = 5;   // AST completion
     public static final int INSTRUCTION_SELECTION = 6;   // Class generation, phase 1
-    public static final int CLASS_GENERATION      = 7;   // Class generation, phase 2
-    public static final int OUTPUT                = 8;   // Output of class to disk
-    public static final int FINALIZATION          = 9;   // Cleanup
-    public static final int ALL                   = 9;   // Synonym for full compilation
-    
+    public static final int CLASS_GENERATION = 7;   // Class generation, phase 2
+    public static final int OUTPUT = 8;   // Output of class to disk
+    public static final int FINALIZATION = 9;   // Cleanup
+    public static final int ALL = 9;   // Synonym for full compilation
+
     public static final String[] descriptions = {
-          "startup"
-        , "initialization"
-        , "parsing"
-        , "conversion"
-        , "semantic analysis"
-        , "canonicalization"
-        , "instruction selection"
-        , "class generation"
-        , "output"
-        , "cleanup"
+            "startup"
+            , "initialization"
+            , "parsing"
+            , "conversion"
+            , "semantic analysis"
+            , "canonicalization"
+            , "instruction selection"
+            , "class generation"
+            , "output"
+            , "cleanup"
     };
-    
-    
-    
-   /**
-    *  Returns a description of the specified phase.
-    */
-    
-    public static String getDescription( int phase )
-    {
+
+
+    /**
+     * Returns a description of the specified phase.
+     */
+
+    public static String getDescription(int phase) {
         return descriptions[phase];
     }
-    
+
 }
diff --git a/src/main/java/org/codehaus/groovy/control/ProcessingUnit.java b/src/main/java/org/codehaus/groovy/control/ProcessingUnit.java
index d95822d..66715a4 100644
--- a/src/main/java/org/codehaus/groovy/control/ProcessingUnit.java
+++ b/src/main/java/org/codehaus/groovy/control/ProcessingUnit.java
@@ -26,10 +26,7 @@ import java.security.PrivilegedAction;
 /**
  * A base class for data structures that can collect messages and errors
  * during processing.
- *
- * @author <a href="mailto:cpoirier@dreaming.org">Chris Poirier</a>
  */
-
 public abstract class ProcessingUnit {
 
     /**
@@ -45,12 +42,12 @@ public abstract class ProcessingUnit {
      * Configuration and other settings that control processing
      */
     protected CompilerConfiguration configuration;
-  
+
     /**
      * The ClassLoader to use during processing
      */
     protected GroovyClassLoader classLoader;
-    
+
     /**
      * a helper to share errors and report them
      */
@@ -67,7 +64,7 @@ public abstract class ProcessingUnit {
         this.configuration = configuration;
         this.setClassLoader(classLoader);
         configure((configuration == null ? new CompilerConfiguration() : configuration));
-        if (er==null) er = new ErrorCollector(getConfiguration());
+        if (er == null) er = new ErrorCollector(getConfiguration());
         this.errorCollector = er;
     }
 
@@ -134,13 +131,13 @@ public abstract class ProcessingUnit {
 
     /**
      * Errors found during the compilation should be reported through the ErrorCollector.
-     * @return
-     *      the ErrorCollector for this ProcessingUnit
+     *
+     * @return the ErrorCollector for this ProcessingUnit
      */
     public ErrorCollector getErrorCollector() {
         return errorCollector;
     }
-    
+
     //---------------------------------------------------------------------------
     // PROCESSING
 
@@ -150,7 +147,7 @@ public abstract class ProcessingUnit {
      * errors.
      */
 
-    public void completePhase() throws CompilationFailedException {       
+    public void completePhase() throws CompilationFailedException {
         errorCollector.failIfErrors();
         phaseComplete = true;
     }
diff --git a/src/main/java/org/codehaus/groovy/control/SourceUnit.java b/src/main/java/org/codehaus/groovy/control/SourceUnit.java
index b61c6e4..66c1c73 100644
--- a/src/main/java/org/codehaus/groovy/control/SourceUnit.java
+++ b/src/main/java/org/codehaus/groovy/control/SourceUnit.java
@@ -47,11 +47,7 @@ import java.security.PrivilegedAction;
 /**
  * Provides an anchor for a single source unit (usually a script file)
  * as it passes through the compiler system.
- *
- * @author <a href="mailto:cpoirier@dreaming.org">Chris Poirier</a>
- * @author <a href="mailto:b55r@sina.com">Bing Ran</a>
  */
-
 public class SourceUnit extends ProcessingUnit {
 
     /**
@@ -251,8 +247,7 @@ public class SourceUnit extends ProcessingUnit {
         try {
             this.ast = parserPlugin.buildAST(this, this.classLoader, this.cst);
             this.ast.setDescription(this.name);
-        }
-        catch (SyntaxException e) {
+        } catch (SyntaxException e) {
             if (this.ast == null) {
                 // Create a dummy ModuleNode to represent a failed parse - in case a later phase attempts to use the ast
                 this.ast = new ModuleNode(this);
@@ -309,10 +304,9 @@ public class SourceUnit extends ProcessingUnit {
      * This method adds an exception to the error collector. The Exception most likely has no line number attached to it.
      * For this reason you should use this method sparingly. Prefer using addError for syntax errors or add an error
      * to the {@link ErrorCollector} directly by retrieving it with getErrorCollector().
-     * @param e
-     *      the exception that occurred
-     * @throws CompilationFailedException
-     *      on error
+     *
+     * @param e the exception that occurred
+     * @throws CompilationFailedException on error
      */
     public void addException(Exception e) throws CompilationFailedException {
         getErrorCollector().addException(e, this);
@@ -323,10 +317,9 @@ public class SourceUnit extends ProcessingUnit {
      * number of the error.  This method should be reserved for real errors in the syntax of the SourceUnit. If
      * your error is not in syntax, and is a semantic error, or more general error, then use addException or use
      * the error collector directly by retrieving it with getErrorCollector().
-     * @param se
-     *      the exception, which should have line and column information
-     * @throws CompilationFailedException
-     *      on error
+     *
+     * @param se the exception, which should have line and column information
+     * @throws CompilationFailedException on error
      */
     public void addError(SyntaxException se) throws CompilationFailedException {
         getErrorCollector().addError(se, this);
diff --git a/src/main/java/org/codehaus/groovy/control/customizers/CompilationCustomizer.java b/src/main/java/org/codehaus/groovy/control/customizers/CompilationCustomizer.java
index 8f9e81c..9d0b565 100644
--- a/src/main/java/org/codehaus/groovy/control/customizers/CompilationCustomizer.java
+++ b/src/main/java/org/codehaus/groovy/control/customizers/CompilationCustomizer.java
@@ -27,10 +27,7 @@ import org.codehaus.groovy.control.CompilePhase;
  * call the {@link org.codehaus.groovy.control.CompilerConfiguration#addCompilationCustomizers(CompilationCustomizer...)}
  * method.
  *
- * @author Cedric Champeau
- *
  * @since 1.8.0
- *
  */
 public abstract class CompilationCustomizer extends CompilationUnit.PrimaryClassNodeOperation {
     private final CompilePhase phase;
diff --git a/src/main/java/org/codehaus/groovy/control/customizers/DelegatingCustomizer.java b/src/main/java/org/codehaus/groovy/control/customizers/DelegatingCustomizer.java
index 0f6af6a..68e394a 100644
--- a/src/main/java/org/codehaus/groovy/control/customizers/DelegatingCustomizer.java
+++ b/src/main/java/org/codehaus/groovy/control/customizers/DelegatingCustomizer.java
@@ -27,7 +27,6 @@ import org.codehaus.groovy.control.SourceUnit;
  * Base class for compilation customizers which delegate to another customizer. The phase this
  * customizer runs at is retrieved from the phase of the delegate.
  *
- * @author Cedric Champeau
  * @since 2.1.0
  */
 public abstract class DelegatingCustomizer extends CompilationCustomizer {
diff --git a/src/main/java/org/codehaus/groovy/control/customizers/ImportCustomizer.java b/src/main/java/org/codehaus/groovy/control/customizers/ImportCustomizer.java
index 780b554..ebd16f5 100644
--- a/src/main/java/org/codehaus/groovy/control/customizers/ImportCustomizer.java
+++ b/src/main/java/org/codehaus/groovy/control/customizers/ImportCustomizer.java
@@ -38,10 +38,7 @@ import java.util.List;
  *     <li>static star imports thanks to {@link #addStaticStar(String)} or {@link #addStaticStars(String...)}</li>
  * </ul>
  *
- * @author Cedric Champeau
- *
  * @since 1.8.0
- *
  */
 public class ImportCustomizer extends CompilationCustomizer {
 
diff --git a/src/main/java/org/codehaus/groovy/control/customizers/SecureASTCustomizer.java b/src/main/java/org/codehaus/groovy/control/customizers/SecureASTCustomizer.java
index 1bb302b..8580144 100644
--- a/src/main/java/org/codehaus/groovy/control/customizers/SecureASTCustomizer.java
+++ b/src/main/java/org/codehaus/groovy/control/customizers/SecureASTCustomizer.java
@@ -175,9 +175,6 @@ import java.util.Map;
  *             GroovyClassLoader loader = new GroovyClassLoader(this.class.classLoader, config)
  *  </pre>
  *  
- * @author Cedric Champeau
- * @author Guillaume Laforge
- * @author Hamlet D'Arcy
  * @since 1.8.0
  */
 public class SecureASTCustomizer extends CompilationCustomizer {
diff --git a/src/main/java/org/codehaus/groovy/control/customizers/SourceAwareCustomizer.java b/src/main/java/org/codehaus/groovy/control/customizers/SourceAwareCustomizer.java
index 3bb5183..9858a42 100644
--- a/src/main/java/org/codehaus/groovy/control/customizers/SourceAwareCustomizer.java
+++ b/src/main/java/org/codehaus/groovy/control/customizers/SourceAwareCustomizer.java
@@ -38,7 +38,6 @@ import org.codehaus.groovy.control.io.ReaderSource;
  * <pre><code>return "foo".equals(extension)</code></pre>
  *
  * @since 2.1.0
- * @author Cedric Champeau
  */
 public class SourceAwareCustomizer extends DelegatingCustomizer {
 
diff --git a/src/main/java/org/codehaus/groovy/control/customizers/builder/CustomizersFactory.java b/src/main/java/org/codehaus/groovy/control/customizers/builder/CustomizersFactory.java
index 37bcee8..b013cee 100644
--- a/src/main/java/org/codehaus/groovy/control/customizers/builder/CustomizersFactory.java
+++ b/src/main/java/org/codehaus/groovy/control/customizers/builder/CustomizersFactory.java
@@ -30,7 +30,6 @@ import java.util.Map;
 /**
  * This factory generates an array of compilation customizers.
  *
- * @author Cedric Champeau
  * @since 2.1.0
  */
 public class CustomizersFactory extends AbstractFactory implements PostCompletionFactory {
diff --git a/src/main/java/org/codehaus/groovy/control/customizers/builder/ImportCustomizerFactory.java b/src/main/java/org/codehaus/groovy/control/customizers/builder/ImportCustomizerFactory.java
index e9e8b7e..a42570d 100644
--- a/src/main/java/org/codehaus/groovy/control/customizers/builder/ImportCustomizerFactory.java
+++ b/src/main/java/org/codehaus/groovy/control/customizers/builder/ImportCustomizerFactory.java
@@ -44,7 +44,6 @@ import java.util.Map;
  * alias 'AL', 'java.util.concurrent.atomic.AtomicLong'
  *}</code></pre>
  *
- * @author Cedric Champeau
  * @since 2.1.0
  */
 public class ImportCustomizerFactory extends AbstractFactory {
diff --git a/src/main/java/org/codehaus/groovy/control/customizers/builder/InlinedASTCustomizerFactory.java b/src/main/java/org/codehaus/groovy/control/customizers/builder/InlinedASTCustomizerFactory.java
index c7b599c..66b4f41 100644
--- a/src/main/java/org/codehaus/groovy/control/customizers/builder/InlinedASTCustomizerFactory.java
+++ b/src/main/java/org/codehaus/groovy/control/customizers/builder/InlinedASTCustomizerFactory.java
@@ -39,7 +39,6 @@ import java.util.Map;
  * }
  * </pre>
  *
- * @author Cedric Champeau
  * @since 2.1.0
  */
 @SuppressWarnings("unchecked")
diff --git a/src/main/java/org/codehaus/groovy/control/customizers/builder/PostCompletionFactory.java b/src/main/java/org/codehaus/groovy/control/customizers/builder/PostCompletionFactory.java
index 8855dbf..d18564c 100644
--- a/src/main/java/org/codehaus/groovy/control/customizers/builder/PostCompletionFactory.java
+++ b/src/main/java/org/codehaus/groovy/control/customizers/builder/PostCompletionFactory.java
@@ -24,7 +24,6 @@ import groovy.util.FactoryBuilderSupport;
  * A helper interface for factories which require post processing of generated nodes.
  *
  * @since 2.1.0
- * @author Cedric Champeau
  */
 public interface PostCompletionFactory {
     Object postCompleteNode(FactoryBuilderSupport factory, Object parent, Object node);
diff --git a/src/main/java/org/codehaus/groovy/control/customizers/builder/SecureASTCustomizerFactory.java b/src/main/java/org/codehaus/groovy/control/customizers/builder/SecureASTCustomizerFactory.java
index 3c81dee..4d2fd0c 100644
--- a/src/main/java/org/codehaus/groovy/control/customizers/builder/SecureASTCustomizerFactory.java
+++ b/src/main/java/org/codehaus/groovy/control/customizers/builder/SecureASTCustomizerFactory.java
@@ -30,7 +30,6 @@ import java.util.Map;
  * to a {@link SecureASTCustomizer} instance.
  *
  * @since 2.1.0
- * @author Cedric Champeau
  */
 public class SecureASTCustomizerFactory extends AbstractFactory {
     @Override
diff --git a/src/main/java/org/codehaus/groovy/control/customizers/builder/SourceAwareCustomizerFactory.java b/src/main/java/org/codehaus/groovy/control/customizers/builder/SourceAwareCustomizerFactory.java
index 1edf636..f9004fe 100644
--- a/src/main/java/org/codehaus/groovy/control/customizers/builder/SourceAwareCustomizerFactory.java
+++ b/src/main/java/org/codehaus/groovy/control/customizers/builder/SourceAwareCustomizerFactory.java
@@ -72,8 +72,6 @@ import java.util.Map;
  *         ast(CompileStatic)
  *     }
  * </code></pre>
- *
- * @author Cedric Champeau
  */
 public class SourceAwareCustomizerFactory extends AbstractFactory implements PostCompletionFactory {
 
diff --git a/src/main/java/org/codehaus/groovy/control/io/AbstractReaderSource.java b/src/main/java/org/codehaus/groovy/control/io/AbstractReaderSource.java
index 1c1084c..c3a9d59 100644
--- a/src/main/java/org/codehaus/groovy/control/io/AbstractReaderSource.java
+++ b/src/main/java/org/codehaus/groovy/control/io/AbstractReaderSource.java
@@ -27,10 +27,7 @@ import java.io.IOException;
 /**
  * For ReaderSources that can choose a parent class, a base that
  * provides common functionality.
- *
- * @author <a href="mailto:cpoirier@dreaming.org">Chris Poirier</a>
  */
-
 public abstract class AbstractReaderSource implements ReaderSource {
     protected CompilerConfiguration configuration;   // Configuration data
 
diff --git a/src/main/java/org/codehaus/groovy/control/io/FileReaderSource.java b/src/main/java/org/codehaus/groovy/control/io/FileReaderSource.java
index 6171f7a..07700d3 100644
--- a/src/main/java/org/codehaus/groovy/control/io/FileReaderSource.java
+++ b/src/main/java/org/codehaus/groovy/control/io/FileReaderSource.java
@@ -32,8 +32,6 @@ import java.nio.charset.Charset;
 
 /**
  *  A ReaderSource for source files.
- *
- *  @author <a href="mailto:cpoirier@dreaming.org">Chris Poirier</a>
  */
 public class FileReaderSource extends AbstractReaderSource {
     private final File file;  // The File from which we produce Readers.
diff --git a/src/main/java/org/codehaus/groovy/control/io/InputStreamReaderSource.java b/src/main/java/org/codehaus/groovy/control/io/InputStreamReaderSource.java
index d018698..3674012 100644
--- a/src/main/java/org/codehaus/groovy/control/io/InputStreamReaderSource.java
+++ b/src/main/java/org/codehaus/groovy/control/io/InputStreamReaderSource.java
@@ -28,8 +28,6 @@ import java.net.URI;
 
 /**
  * A ReaderSource for source strings.
- *
- * @author <a href="mailto:cpoirier@dreaming.org">Chris Poirier</a>
  */
 public class InputStreamReaderSource extends AbstractReaderSource {
     private InputStream stream;  // The InputStream from which we produce a Reader.
diff --git a/src/main/java/org/codehaus/groovy/control/io/NullWriter.java b/src/main/java/org/codehaus/groovy/control/io/NullWriter.java
index c783249..a50caed 100644
--- a/src/main/java/org/codehaus/groovy/control/io/NullWriter.java
+++ b/src/main/java/org/codehaus/groovy/control/io/NullWriter.java
@@ -22,8 +22,6 @@ import java.io.Writer;
 
 /**
  *  An Writer than eats its input.
- *
- *  @author <a href="mailto:cpoirier@dreaming.org">Chris Poirier</a>
  */
 public class NullWriter extends Writer {
     public static final NullWriter DEFAULT = new NullWriter();
diff --git a/src/main/java/org/codehaus/groovy/control/io/ReaderSource.java b/src/main/java/org/codehaus/groovy/control/io/ReaderSource.java
index 76ddd3c..9cf2d2a 100644
--- a/src/main/java/org/codehaus/groovy/control/io/ReaderSource.java
+++ b/src/main/java/org/codehaus/groovy/control/io/ReaderSource.java
@@ -28,8 +28,6 @@ import java.net.URI;
 /**
  *  An interface for things that can supply (and potentially resupply) a Reader
  *  on a source stream.
- *
- *  @author <a href="mailto:cpoirier@dreaming.org">Chris Poirier</a>
  */
 public interface ReaderSource extends HasCleanup {
    /**
diff --git a/src/main/java/org/codehaus/groovy/control/io/StringReaderSource.java b/src/main/java/org/codehaus/groovy/control/io/StringReaderSource.java
index 5e83de0..2f01140 100644
--- a/src/main/java/org/codehaus/groovy/control/io/StringReaderSource.java
+++ b/src/main/java/org/codehaus/groovy/control/io/StringReaderSource.java
@@ -28,10 +28,7 @@ import java.net.URISyntaxException;
 
 /**
  *  A ReaderSource for source strings.
- *
- *  @author <a href="mailto:cpoirier@dreaming.org">Chris Poirier</a>
  */
-
 public class StringReaderSource extends AbstractReaderSource {
     private final String string;  // The String from which we produce Readers.
 
diff --git a/src/main/java/org/codehaus/groovy/control/io/URLReaderSource.java b/src/main/java/org/codehaus/groovy/control/io/URLReaderSource.java
index 2af1a91..3644dd2 100644
--- a/src/main/java/org/codehaus/groovy/control/io/URLReaderSource.java
+++ b/src/main/java/org/codehaus/groovy/control/io/URLReaderSource.java
@@ -31,8 +31,6 @@ import java.net.URL;
 
 /**
  *  A ReaderSource for source files hosted at a URL.
- *
- *  @author <a href="mailto:cpoirier@dreaming.org">Chris Poirier</a>
  */
 public class URLReaderSource extends AbstractReaderSource {
     private final URL url;  // The URL from which we produce Readers.
diff --git a/src/main/java/org/codehaus/groovy/control/messages/ExceptionMessage.java b/src/main/java/org/codehaus/groovy/control/messages/ExceptionMessage.java
index 363b9f5..57c92fb 100644
--- a/src/main/java/org/codehaus/groovy/control/messages/ExceptionMessage.java
+++ b/src/main/java/org/codehaus/groovy/control/messages/ExceptionMessage.java
@@ -23,65 +23,50 @@ import org.codehaus.groovy.control.ProcessingUnit;
 
 import java.io.PrintWriter;
 
-
-
 /**
- *  A class for error messages produced by the parser system.
- *
- *  @author <a href="mailto:cpoirier@dreaming.org">Chris Poirier</a>
+ * A class for error messages produced by the parser system.
  */
-
-public class ExceptionMessage extends Message
-{
+public class ExceptionMessage extends Message {
     protected boolean verbose = true;
 
     private Exception cause = null;   // The exception source of the message, if any
     ProcessingUnit owner = null;
 
-    public ExceptionMessage( Exception cause, boolean v, ProcessingUnit owner )
-    {
+    public ExceptionMessage(Exception cause, boolean v, ProcessingUnit owner) {
         this.verbose = v;
         this.cause = cause;
         this.owner = owner;
     }
-    
-    
-   
-   /**
-    *  Returns the underlying Exception.
-    */
-
-    public Exception getCause()
-    {
+
+    /**
+     * Returns the underlying Exception.
+     */
+
+    public Exception getCause() {
         return this.cause;
     }
-    
 
 
-   /**
-    *  Writes out a nicely formatted summary of the exception. 
-    */
-    
-    public void write( PrintWriter output, Janitor janitor )
-    {
-        String description = "General error during " + owner.getPhaseDescription() + ": "; 
-        
+    /**
+     * Writes out a nicely formatted summary of the exception.
+     */
+
+    public void write(PrintWriter output, Janitor janitor) {
+        String description = "General error during " + owner.getPhaseDescription() + ": ";
+
         String message = cause.getMessage();
-        if( message != null )
-        {
-            output.println( description + message );
-        }
-        else
-        {
-            output.println( description + cause );
+        if (message != null) {
+            output.println(description + message);
+        } else {
+            output.println(description + cause);
         }
         output.println();
 
         //if (verbose) {
-            cause.printStackTrace(output);
+        cause.printStackTrace(output);
         //}
     }
-    
+
 }
 
 
diff --git a/src/main/java/org/codehaus/groovy/control/messages/LocatedMessage.java b/src/main/java/org/codehaus/groovy/control/messages/LocatedMessage.java
index d3368ac..98c0c5f 100644
--- a/src/main/java/org/codehaus/groovy/control/messages/LocatedMessage.java
+++ b/src/main/java/org/codehaus/groovy/control/messages/LocatedMessage.java
@@ -25,54 +25,45 @@ import org.codehaus.groovy.syntax.CSTNode;
 import java.io.PrintWriter;
 
 
-
 /**
- *  A base class for compilation messages.
- *
- *  @author <a href="mailto:cpoirier@dreaming.org">Chris Poirier</a>
+ * A base class for compilation messages.
  */
-
-public class LocatedMessage extends SimpleMessage
-{
+public class LocatedMessage extends SimpleMessage {
     protected CSTNode context;  // The CSTNode that indicates the location to which the message applies
-    
-    public LocatedMessage( String message, CSTNode context, SourceUnit source ) 
-    {
-        super( message, source );
+
+    public LocatedMessage(String message, CSTNode context, SourceUnit source) {
+        super(message, source);
         this.context = context;
     }
-    
-    
-    public LocatedMessage( String message, Object data, CSTNode context, SourceUnit source ) 
-    {
-        super( message, data, source );
+
+
+    public LocatedMessage(String message, Object data, CSTNode context, SourceUnit source) {
+        super(message, data, source);
         this.context = context;
     }
-    
-    
-    public void write( PrintWriter writer, Janitor janitor )
-    {
+
+
+    public void write(PrintWriter writer, Janitor janitor) {
         if (owner instanceof SourceUnit) {
             SourceUnit source = (SourceUnit) owner;
 
-            String name   = source.getName();
-            int    line   = context.getStartLine();
-            int    column = context.getStartColumn();
-            String sample = source.getSample( line, column, janitor );
+            String name = source.getName();
+            int line = context.getStartLine();
+            int column = context.getStartColumn();
+            String sample = source.getSample(line, column, janitor);
 
-            if( sample != null )
-            {
-                writer.println( source.getSample(line, column, janitor) );
+            if (sample != null) {
+                writer.println(source.getSample(line, column, janitor));
             }
 
-            writer.println( name + ": " + line + ": " + this.message );
+            writer.println(name + ": " + line + ": " + this.message);
             writer.println("");
         } else {
-            writer.println( "<No Relevant Source>: " + this.message );
+            writer.println("<No Relevant Source>: " + this.message);
             writer.println("");
         }
     }
-    
+
 }
 
 
diff --git a/src/main/java/org/codehaus/groovy/control/messages/Message.java b/src/main/java/org/codehaus/groovy/control/messages/Message.java
index 0c2feab..2392607 100644
--- a/src/main/java/org/codehaus/groovy/control/messages/Message.java
+++ b/src/main/java/org/codehaus/groovy/control/messages/Message.java
@@ -25,75 +25,48 @@ import org.codehaus.groovy.syntax.SyntaxException;
 
 import java.io.PrintWriter;
 
-
-
 /**
- *  A base class for compilation messages.
- *
- *  @author <a href="mailto:cpoirier@dreaming.org">Chris Poirier</a>
+ * A base class for compilation messages.
  */
+public abstract class Message {
 
-public abstract class Message
-{
-    
-    
-   /**
-    *  Writes the message to the specified PrintWriter.  The supplied
-    *  ProcessingUnit is the unit that holds this Message.
-    */
-    
-    public abstract void write( PrintWriter writer, Janitor janitor );
-    
-    
-   /**
-    *  A synonym for write( writer, owner, null ).
-    */
-    
-    public final void write( PrintWriter writer)
-    {
-        write( writer,  null );
+    /**
+     * Writes the message to the specified PrintWriter.  The supplied
+     * ProcessingUnit is the unit that holds this Message.
+     */
+    public abstract void write(PrintWriter writer, Janitor janitor);
+
+    /**
+     * A synonym for write( writer, owner, null ).
+     */
+    public final void write(PrintWriter writer) {
+        write(writer, null);
     }
-    
-    
-    
-  //---------------------------------------------------------------------------
-  // FACTORY METHODS
-    
-    
-   /**
-    *  Creates a new Message from the specified text.
-    */
-    
-    public static Message create( String text, ProcessingUnit owner )
-    {
-        return new SimpleMessage( text, owner );
+
+    //---------------------------------------------------------------------------
+    // FACTORY METHODS
+
+    /**
+     * Creates a new Message from the specified text.
+     */
+    public static Message create(String text, ProcessingUnit owner) {
+        return new SimpleMessage(text, owner);
     }
-    
-    
-          
-   /**
-    *  Creates a new Message from the specified text.
-    */
-     
-    public static Message create( String text, Object data, ProcessingUnit owner  )
-    {
-        return new SimpleMessage( text, data, owner);
+
+    /**
+     * Creates a new Message from the specified text.
+     */
+    public static Message create(String text, Object data, ProcessingUnit owner) {
+        return new SimpleMessage(text, data, owner);
     }
-     
-     
-           
-   /**
-    *  Creates a new Message from the specified SyntaxException.
-    */
-      
-    public static Message create( SyntaxException error, SourceUnit owner )
-    {
-        return new SyntaxErrorMessage( error, owner );
+
+    /**
+     * Creates a new Message from the specified SyntaxException.
+     */
+    public static Message create(SyntaxException error, SourceUnit owner) {
+        return new SyntaxErrorMessage(error, owner);
     }
-      
-    
-      
-    
+
 }
 
 
diff --git a/src/main/java/org/codehaus/groovy/control/messages/SimpleMessage.java b/src/main/java/org/codehaus/groovy/control/messages/SimpleMessage.java
index 2cbc9d8..8668dfe 100644
--- a/src/main/java/org/codehaus/groovy/control/messages/SimpleMessage.java
+++ b/src/main/java/org/codehaus/groovy/control/messages/SimpleMessage.java
@@ -24,54 +24,35 @@ import org.codehaus.groovy.control.SourceUnit;
 
 import java.io.PrintWriter;
 
-
-
 /**
- *  A base class for compilation messages.
- *
- *  @author <a href="mailto:cpoirier@dreaming.org">Chris Poirier</a>
+ * A base class for compilation messages.
  */
-
-public class SimpleMessage extends Message
-{
+public class SimpleMessage extends Message {
     protected String message;  // Message text
     protected Object data;     // Data, when the message text is an I18N identifier
     protected ProcessingUnit owner;
-    
-    public SimpleMessage( String message, ProcessingUnit source ) 
-    {
-        this( message, null, source );
+
+    public SimpleMessage(String message, ProcessingUnit source) {
+        this(message, null, source);
     }
-    
-    public SimpleMessage( String message, Object data, ProcessingUnit source )
-    {
+
+    public SimpleMessage(String message, Object data, ProcessingUnit source) {
         this.message = message;
-        this.data    = null;
+        this.data = null;
         this.owner = source;
     }
-    
-    
-    public void write( PrintWriter writer, Janitor janitor )
-    {
-        if( owner instanceof SourceUnit )
-        {
-            String name = ((SourceUnit)owner).getName();
-            writer.println( "" + name + ": " + message );
-        }
-        else
-        {
-            writer.println( message );
+
+    public void write(PrintWriter writer, Janitor janitor) {
+        if (owner instanceof SourceUnit) {
+            String name = ((SourceUnit) owner).getName();
+            writer.println("" + name + ": " + message);
+        } else {
+            writer.println(message);
         }
     }
-    
-    
-    public String getMessage()
-    {
+
+    public String getMessage() {
         return message;
     }
-    
-}
-
-
-
 
+}
diff --git a/src/main/java/org/codehaus/groovy/control/messages/SyntaxErrorMessage.java b/src/main/java/org/codehaus/groovy/control/messages/SyntaxErrorMessage.java
index be9339d..5955412 100644
--- a/src/main/java/org/codehaus/groovy/control/messages/SyntaxErrorMessage.java
+++ b/src/main/java/org/codehaus/groovy/control/messages/SyntaxErrorMessage.java
@@ -26,14 +26,11 @@ import java.io.PrintWriter;
 
 /**
  * A class for error messages produced by the parser system.
- *
- * @author <a href="mailto:cpoirier@dreaming.org">Chris Poirier</a>
  */
-
 public class SyntaxErrorMessage extends Message {
     protected SyntaxException cause;
     protected SourceUnit source;
-    
+
     public SyntaxErrorMessage(SyntaxException cause, SourceUnit source) {
         this.cause = cause;
         this.source = source;
@@ -43,7 +40,6 @@ public class SyntaxErrorMessage extends Message {
     /**
      * Returns the underlying SyntaxException.
      */
-
     public SyntaxException getCause() {
         return this.cause;
     }
@@ -51,7 +47,6 @@ public class SyntaxErrorMessage extends Message {
     /**
      * Writes out a nicely formatted summary of the syntax error.
      */
-
     public void write(PrintWriter output, Janitor janitor) {
         String name = source.getName();
         int line = getCause().getStartLine();
diff --git a/src/main/java/org/codehaus/groovy/control/messages/WarningMessage.java b/src/main/java/org/codehaus/groovy/control/messages/WarningMessage.java
index 969f29f..c245e8e 100644
--- a/src/main/java/org/codehaus/groovy/control/messages/WarningMessage.java
+++ b/src/main/java/org/codehaus/groovy/control/messages/WarningMessage.java
@@ -24,95 +24,66 @@ import org.codehaus.groovy.syntax.CSTNode;
 
 import java.io.PrintWriter;
 
-
-
 /**
- *  A class for warning messages.
- *
- *  @author <a href="mailto:cpoirier@dreaming.org">Chris Poirier</a>
+ * A class for warning messages.
  */
+public class WarningMessage extends LocatedMessage {
+    //---------------------------------------------------------------------------
+    // WARNING LEVELS
 
-public class WarningMessage extends LocatedMessage
-{
-  //---------------------------------------------------------------------------
-  // WARNING LEVELS
-
-    public static final int NONE            = 0;  // For querying, ignore all errors
-    public static final int LIKELY_ERRORS   = 1;  // Warning indicates likely error
+    public static final int NONE = 0;  // For querying, ignore all errors
+    public static final int LIKELY_ERRORS = 1;  // Warning indicates likely error
     public static final int POSSIBLE_ERRORS = 2;  // Warning indicates possible error
-    public static final int PARANOIA        = 3;  // Warning indicates paranoia on the part of the compiler
-    
-    
-   /**
-    *  Returns true if a warning would be relevant to the specified level.
-    */
-    
-    public static boolean isRelevant( int actual, int limit )
-    {
+    public static final int PARANOIA = 3;  // Warning indicates paranoia on the part of the compiler
+
+    /**
+     * Returns true if a warning would be relevant to the specified level.
+     */
+    public static boolean isRelevant(int actual, int limit) {
         return actual <= limit;
     }
-    
-    
-    
-   /**
-    *  Returns true if this message is as or more important than the 
-    *  specified importance level.
-    */
-    
-    public boolean isRelevant( int importance )
-    {
-        return isRelevant( this.importance, importance );
+
+    /**
+     * Returns true if this message is as or more important than the
+     * specified importance level.
+     */
+    public boolean isRelevant(int importance) {
+        return isRelevant(this.importance, importance);
     }
-    
-    
-    
-  //---------------------------------------------------------------------------
-  // CONSTRUCTION AND DATA ACCESS
+
+    //---------------------------------------------------------------------------
+    // CONSTRUCTION AND DATA ACCESS
 
     private final int importance;  // The warning level, for filtering
-    
-    
-   /**
-    *  Creates a new warning message.
-    * 
-    *  @param importance the warning level 
-    *  @param message    the message text
-    *  @param context    context information for locating the offending source text
-    */
-     
-    public WarningMessage( int importance, String message, CSTNode context, SourceUnit owner )
-    {
-        super( message, context, owner );
+
+    /**
+     * Creates a new warning message.
+     *
+     * @param importance the warning level
+     * @param message    the message text
+     * @param context    context information for locating the offending source text
+     */
+    public WarningMessage(int importance, String message, CSTNode context, SourceUnit owner) {
+        super(message, context, owner);
         this.importance = importance;
     }
 
-    
-    
-   /**
-    *  Creates a new warning message.
-    *
-    *  @param importance the warning level 
-    *  @param message    the message text
-    *  @param data       additional data needed when generating the message
-    *  @param context    context information for locating the offending source text
-    */
-     
-    public WarningMessage( int importance, String message, Object data, CSTNode context, SourceUnit owner )
-    {
-        super( message, data, context, owner );
+    /**
+     * Creates a new warning message.
+     *
+     * @param importance the warning level
+     * @param message    the message text
+     * @param data       additional data needed when generating the message
+     * @param context    context information for locating the offending source text
+     */
+    public WarningMessage(int importance, String message, Object data, CSTNode context, SourceUnit owner) {
+        super(message, data, context, owner);
         this.importance = importance;
     }
-    
-    
-    public void write( PrintWriter writer, Janitor janitor )
-    {
-        writer.print( "warning: " );
-        super.write( writer, janitor );
+
+    public void write(PrintWriter writer, Janitor janitor) {
+        writer.print("warning: ");
+        super.write(writer, janitor);
     }
 
-     
-     
 }
-
-
-
diff --git a/src/main/java/org/codehaus/groovy/reflection/CachedClass.java b/src/main/java/org/codehaus/groovy/reflection/CachedClass.java
index 7790930..5eba402 100644
--- a/src/main/java/org/codehaus/groovy/reflection/CachedClass.java
+++ b/src/main/java/org/codehaus/groovy/reflection/CachedClass.java
@@ -49,9 +49,6 @@ import java.util.LinkedList;
 import java.util.List;
 import java.util.Set;
 
-/**
- * @author Alex.Tkachman
- */
 public class CachedClass {
     private static final Method[] EMPTY_METHOD_ARRAY = new Method[0];
     private final Class cachedClass;
diff --git a/src/main/java/org/codehaus/groovy/reflection/CachedConstructor.java b/src/main/java/org/codehaus/groovy/reflection/CachedConstructor.java
index 74d9b71..d99a72c 100644
--- a/src/main/java/org/codehaus/groovy/reflection/CachedConstructor.java
+++ b/src/main/java/org/codehaus/groovy/reflection/CachedConstructor.java
@@ -27,9 +27,6 @@ import java.lang.reflect.InvocationTargetException;
 import java.security.AccessController;
 import java.security.PrivilegedAction;
 
-/**
- * @author Alex.Tkachman
- */
 public class CachedConstructor extends ParameterTypes {
     CachedClass clazz;
 
diff --git a/src/main/java/org/codehaus/groovy/reflection/CachedMethod.java b/src/main/java/org/codehaus/groovy/reflection/CachedMethod.java
index 1c8f3b3..b8ae4f8 100644
--- a/src/main/java/org/codehaus/groovy/reflection/CachedMethod.java
+++ b/src/main/java/org/codehaus/groovy/reflection/CachedMethod.java
@@ -1,344 +1,341 @@
-/*
- *  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.reflection;
-
-import groovy.lang.MetaClassImpl;
-import groovy.lang.MetaMethod;
-import groovy.lang.MissingMethodException;
-import org.codehaus.groovy.classgen.asm.BytecodeHelper;
-import org.codehaus.groovy.runtime.InvokerInvocationException;
-import org.codehaus.groovy.runtime.callsite.CallSite;
-import org.codehaus.groovy.runtime.callsite.CallSiteGenerator;
-import org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite;
-import org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite;
-import org.codehaus.groovy.runtime.callsite.StaticMetaMethodSite;
-import org.codehaus.groovy.runtime.metaclass.MethodHelper;
-
-import java.io.Serializable;
-import java.lang.ref.SoftReference;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.util.Arrays;
-import java.util.Comparator;
-
-/**
- * @author Alex.Tkachman
- */
-public class CachedMethod extends MetaMethod implements Comparable {
-    public static final CachedMethod[] EMPTY_ARRAY = new CachedMethod[0];
-    public final CachedClass cachedClass;
-
-    private final Method cachedMethod;
-    private int hashCode;
-
-    private static final MyComparator COMPARATOR = new MyComparator();
-
-    private SoftReference<Constructor> pogoCallSiteConstructor, pojoCallSiteConstructor, staticCallSiteConstructor;
-
-    private boolean skipCompiled;
-
-    public CachedMethod(CachedClass clazz, Method method) {
-        this.cachedMethod = method;
-        this.cachedClass = clazz;
-    }
-
-    public CachedMethod(Method method) {
-        this(ReflectionCache.getCachedClass(method.getDeclaringClass()),method);
-    }
-
-    public static CachedMethod find(Method method) {
-        CachedMethod[] methods = ReflectionCache.getCachedClass(method.getDeclaringClass()).getMethods();
-//        for (int i = 0; i < methods.length; i++) {
-//            CachedMethod cachedMethod = methods[i];
-//            if (cachedMethod.cachedMethod.equals(method))
-//                return cachedMethod;
-//        }
-//        return null;
-        int i = Arrays.binarySearch(methods, method, COMPARATOR);
-        if (i < 0)
-          return null;
-
-        return methods[i];
-    }
-
-    protected Class[] getPT() {
-        return cachedMethod.getParameterTypes();
-    }
-
-    public String getName() {
-        return cachedMethod.getName();
-    }
-
-    public String getDescriptor() {
-        return BytecodeHelper.getMethodDescriptor(getReturnType(), getNativeParameterTypes());
-    }
-
-    public CachedClass getDeclaringClass() {
-        return cachedClass;
-    }
-
-    public final Object invoke(Object object, Object[] arguments) {
-        try {
-            AccessPermissionChecker.checkAccessPermission(cachedMethod);
-        } catch (CacheAccessControlException ex) {
-            throw new InvokerInvocationException(ex);
-        }
-        try {
-            return cachedMethod.invoke(object, arguments);
-        } catch (IllegalArgumentException | IllegalAccessException e) {
-            throw new InvokerInvocationException(e);
-        } catch (InvocationTargetException e) {
-            Throwable cause = e.getCause(); 
-            throw (cause instanceof RuntimeException && !(cause instanceof MissingMethodException)) ? 
-                    (RuntimeException) cause : new InvokerInvocationException(e);
-        }
-    }
-
-    public ParameterTypes getParamTypes() {
-        return null;
-    }
-
-    public Class getReturnType() {
-        return cachedMethod.getReturnType();
-    }
-
-    public int getParamsCount() {
-        return getParameterTypes().length;
-    }
-
-    public int getModifiers() {
-        return cachedMethod.getModifiers();
-    }
-
-
-    public String getSignature() {
-        return getName() + getDescriptor();
-    }
-
-    public final Method setAccessible() {
-        AccessPermissionChecker.checkAccessPermission(cachedMethod);
-//        if (queuedToCompile.compareAndSet(false,true)) {
-//            if (isCompilable())
-//              CompileThread.addMethod(this);
-//        }
-        return cachedMethod;
-    }
-
-    public boolean isStatic() {
-        return MethodHelper.isStatic(cachedMethod);
-    }
-
-    public int compareTo(Object o) {
-      if (o instanceof CachedMethod)
-        return compareToCachedMethod((CachedMethod)o);
-      else
-        return compareToMethod((Method)o);
-    }
-
-    private int compareToCachedMethod(CachedMethod other) {
-        if (other == null)
-            return -1;
-
-        final int strComp = getName().compareTo(other.getName());
-        if (strComp != 0)
-            return strComp;
-
-        final int retComp = getReturnType().getName().compareTo(other.getReturnType().getName());
-        if (retComp != 0)
-            return retComp;
-
-        CachedClass[] params = getParameterTypes();
-        CachedClass[] otherParams = other.getParameterTypes();
-
-        final int pd = params.length - otherParams.length;
-        if (pd != 0)
-            return pd;
-
-        for (int i = 0; i != params.length; ++i) {
-            final int nameComp = params[i].getName().compareTo(otherParams[i].getName());
-            if (nameComp != 0)
-                return nameComp;
-        }
-
-        final int classComp = cachedClass.toString().compareTo(other.getDeclaringClass().toString());
-        if (classComp != 0)
-            return classComp;
-
-        throw new RuntimeException("Should never happen");
-    }
-
-    private int compareToMethod(Method other) {
-        if (other == null)
-            return -1;
-
-        final int strComp = getName().compareTo(other.getName());
-        if (strComp != 0)
-            return strComp;
-
-        final int retComp = getReturnType().getName().compareTo(other.getReturnType().getName());
-        if (retComp != 0)
-            return retComp;
-
-        CachedClass[] params = getParameterTypes();
-        Class[] mparams = other.getParameterTypes();
-
-        final int pd = params.length - mparams.length;
-        if (pd != 0)
-            return pd;
-
-        for (int i = 0; i != params.length; ++i) {
-            final int nameComp = params[i].getName().compareTo(mparams[i].getName());
-            if (nameComp != 0)
-                return nameComp;
-        }
-
-        return 0;
-    }
-
-    public boolean equals(Object o) {
-        return (o instanceof CachedMethod && cachedMethod.equals(((CachedMethod)o).cachedMethod))
-                || (o instanceof Method && cachedMethod.equals(o));
-    }
-
-    public int hashCode() {
-        if (hashCode == 0) {
-           hashCode = cachedMethod.hashCode();
-           if (hashCode == 0)
-             hashCode = 0xcafebebe;
-        }
-        return hashCode;
-    }
-
-    public String toString() {
-        return cachedMethod.toString();
-    }
-    
-    private static Constructor getConstructor(SoftReference<Constructor> ref) {
-        if (ref==null) return null;
-        return ref.get();
-    }
-
-    public CallSite createPogoMetaMethodSite(CallSite site, MetaClassImpl metaClass, Class[] params) {
-        if (!skipCompiled) {
-            Constructor constr = getConstructor(pogoCallSiteConstructor);
-            if (constr==null) {
-                if (CallSiteGenerator.isCompilable(this)) {
-                  constr = CallSiteGenerator.compilePogoMethod(this);
-                }
-                if (constr != null) {
-                     pogoCallSiteConstructor = new SoftReference<Constructor> (constr);
-                } else {
-                    skipCompiled = true;
-                }
-            }
-    
-            if (constr!=null) {
-                try {
-                    return (CallSite) constr.newInstance(site, metaClass, this, params, constr);
-                } catch (Error e) {
-                    skipCompiled=true;
-                    throw e;
-                } catch (Throwable e) {
-                    skipCompiled=true;
-                }
-            }
-        }
-        return new PogoMetaMethodSite.PogoCachedMethodSiteNoUnwrapNoCoerce(site, metaClass, this, params);
-    }
-
-
-    public CallSite createPojoMetaMethodSite(CallSite site, MetaClassImpl metaClass, Class[] params) {
-        if (!skipCompiled) {
-            Constructor constr = getConstructor(pojoCallSiteConstructor);
-            if (constr==null) {
-                if (CallSiteGenerator.isCompilable(this)) {
-                  constr = CallSiteGenerator.compilePojoMethod(this);
-                }
-                if (constr != null) {
-                    pojoCallSiteConstructor = new SoftReference<Constructor> (constr);
-                } else {
-                    skipCompiled = true;
-                }
-            }
-    
-            if (constr!=null) {
-                try {
-                    return (CallSite) constr.newInstance(site, metaClass, this, params, constr);
-                } catch (Error e) {
-                    skipCompiled=true;
-                    throw e;
-                } catch (Throwable e) {
-                    skipCompiled=true;
-                }
-            }
-        }
-        return new PojoMetaMethodSite.PojoCachedMethodSiteNoUnwrapNoCoerce(site, metaClass, this, params);
-    }
-
-    public CallSite createStaticMetaMethodSite(CallSite site, MetaClassImpl metaClass, Class[] params) {
-        if (!skipCompiled) {
-            Constructor constr = getConstructor(staticCallSiteConstructor);
-            if (constr==null) {
-                if (CallSiteGenerator.isCompilable(this)) {
-                  constr = CallSiteGenerator.compileStaticMethod(this);
-                }
-                if (constr != null) {
-                    staticCallSiteConstructor = new SoftReference<Constructor> (constr);
-                } else {
-                    skipCompiled = true;
-                }
-            }
-    
-            if (constr!=null) {
-                try {
-                    return (CallSite) constr.newInstance(site, metaClass, this, params, constr);
-                } catch (Error e) {
-                    skipCompiled=true;
-                    throw e;
-                } catch (Throwable e) {
-                    skipCompiled=true;
-                }
-            }
-        }
-
-        return new StaticMetaMethodSite.StaticMetaMethodSiteNoUnwrapNoCoerce(site, metaClass, this, params);
-    }
-
-    private static class MyComparator implements Comparator, Serializable {
-        private static final long serialVersionUID = 8909277090690131302L;
-
-        public int compare(Object o1, Object o2) {
-            if (o1 instanceof CachedMethod)
-                return ((CachedMethod)o1).compareTo(o2);
-            else if (o2 instanceof CachedMethod)
-                return -((CachedMethod)o2).compareTo(o1);
-            else
-                // really, this should never happen, it's evidence of corruption if it does
-                throw new ClassCastException("One of the two comparables must be a CachedMethod");
-        }
-    }
-
-    public Method getCachedMethod() {
-        AccessPermissionChecker.checkAccessPermission(cachedMethod);
-        return cachedMethod;
-    }
-
-}
-
+/*
+ *  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.reflection;
+
+import groovy.lang.MetaClassImpl;
+import groovy.lang.MetaMethod;
+import groovy.lang.MissingMethodException;
+import org.codehaus.groovy.classgen.asm.BytecodeHelper;
+import org.codehaus.groovy.runtime.InvokerInvocationException;
+import org.codehaus.groovy.runtime.callsite.CallSite;
+import org.codehaus.groovy.runtime.callsite.CallSiteGenerator;
+import org.codehaus.groovy.runtime.callsite.PogoMetaMethodSite;
+import org.codehaus.groovy.runtime.callsite.PojoMetaMethodSite;
+import org.codehaus.groovy.runtime.callsite.StaticMetaMethodSite;
+import org.codehaus.groovy.runtime.metaclass.MethodHelper;
+
+import java.io.Serializable;
+import java.lang.ref.SoftReference;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.Arrays;
+import java.util.Comparator;
+
+public class CachedMethod extends MetaMethod implements Comparable {
+    public static final CachedMethod[] EMPTY_ARRAY = new CachedMethod[0];
+    public final CachedClass cachedClass;
+
+    private final Method cachedMethod;
+    private int hashCode;
+
+    private static final MyComparator COMPARATOR = new MyComparator();
+
+    private SoftReference<Constructor> pogoCallSiteConstructor, pojoCallSiteConstructor, staticCallSiteConstructor;
+
+    private boolean skipCompiled;
+
+    public CachedMethod(CachedClass clazz, Method method) {
+        this.cachedMethod = method;
+        this.cachedClass = clazz;
+    }
+
+    public CachedMethod(Method method) {
+        this(ReflectionCache.getCachedClass(method.getDeclaringClass()),method);
+    }
+
+    public static CachedMethod find(Method method) {
+        CachedMethod[] methods = ReflectionCache.getCachedClass(method.getDeclaringClass()).getMethods();
+//        for (int i = 0; i < methods.length; i++) {
+//            CachedMethod cachedMethod = methods[i];
+//            if (cachedMethod.cachedMethod.equals(method))
+//                return cachedMethod;
+//        }
+//        return null;
+        int i = Arrays.binarySearch(methods, method, COMPARATOR);
+        if (i < 0)
+          return null;
+
+        return methods[i];
+    }
+
+    protected Class[] getPT() {
+        return cachedMethod.getParameterTypes();
+    }
+
+    public String getName() {
+        return cachedMethod.getName();
+    }
+
+    public String getDescriptor() {
+        return BytecodeHelper.getMethodDescriptor(getReturnType(), getNativeParameterTypes());
+    }
+
+    public CachedClass getDeclaringClass() {
+        return cachedClass;
+    }
+
+    public final Object invoke(Object object, Object[] arguments) {
+        try {
+            AccessPermissionChecker.checkAccessPermission(cachedMethod);
+        } catch (CacheAccessControlException ex) {
+            throw new InvokerInvocationException(ex);
+        }
+        try {
+            return cachedMethod.invoke(object, arguments);
+        } catch (IllegalArgumentException | IllegalAccessException e) {
+            throw new InvokerInvocationException(e);
+        } catch (InvocationTargetException e) {
+            Throwable cause = e.getCause(); 
+            throw (cause instanceof RuntimeException && !(cause instanceof MissingMethodException)) ? 
+                    (RuntimeException) cause : new InvokerInvocationException(e);
+        }
+    }
+
+    public ParameterTypes getParamTypes() {
+        return null;
+    }
+
+    public Class getReturnType() {
+        return cachedMethod.getReturnType();
+    }
+
+    public int getParamsCount() {
+        return getParameterTypes().length;
+    }
+
+    public int getModifiers() {
+        return cachedMethod.getModifiers();
+    }
+
+
+    public String getSignature() {
+        return getName() + getDescriptor();
+    }
+
+    public final Method setAccessible() {
+        AccessPermissionChecker.checkAccessPermission(cachedMethod);
+//        if (queuedToCompile.compareAndSet(false,true)) {
+//            if (isCompilable())
+//              CompileThread.addMethod(this);
+//        }
+        return cachedMethod;
+    }
+
+    public boolean isStatic() {
+        return MethodHelper.isStatic(cachedMethod);
+    }
+
+    public int compareTo(Object o) {
+      if (o instanceof CachedMethod)
+        return compareToCachedMethod((CachedMethod)o);
+      else
+        return compareToMethod((Method)o);
+    }
+
+    private int compareToCachedMethod(CachedMethod other) {
+        if (other == null)
+            return -1;
+
+        final int strComp = getName().compareTo(other.getName());
+        if (strComp != 0)
+            return strComp;
+
+        final int retComp = getReturnType().getName().compareTo(other.getReturnType().getName());
+        if (retComp != 0)
+            return retComp;
+
+        CachedClass[] params = getParameterTypes();
+        CachedClass[] otherParams = other.getParameterTypes();
+
+        final int pd = params.length - otherParams.length;
+        if (pd != 0)
+            return pd;
+
+        for (int i = 0; i != params.length; ++i) {
+            final int nameComp = params[i].getName().compareTo(otherParams[i].getName());
+            if (nameComp != 0)
+                return nameComp;
+        }
+
+        final int classComp = cachedClass.toString().compareTo(other.getDeclaringClass().toString());
+        if (classComp != 0)
+            return classComp;
+
+        throw new RuntimeException("Should never happen");
+    }
+
+    private int compareToMethod(Method other) {
+        if (other == null)
+            return -1;
+
+        final int strComp = getName().compareTo(other.getName());
+        if (strComp != 0)
+            return strComp;
+
+        final int retComp = getReturnType().getName().compareTo(other.getReturnType().getName());
+        if (retComp != 0)
+            return retComp;
+
+        CachedClass[] params = getParameterTypes();
+        Class[] mparams = other.getParameterTypes();
+
+        final int pd = params.length - mparams.length;
+        if (pd != 0)
+            return pd;
+
+        for (int i = 0; i != params.length; ++i) {
+            final int nameComp = params[i].getName().compareTo(mparams[i].getName());
+            if (nameComp != 0)
+                return nameComp;
+        }
+
+        return 0;
+    }
+
+    public boolean equals(Object o) {
+        return (o instanceof CachedMethod && cachedMethod.equals(((CachedMethod)o).cachedMethod))
+                || (o instanceof Method && cachedMethod.equals(o));
+    }
+
+    public int hashCode() {
+        if (hashCode == 0) {
+           hashCode = cachedMethod.hashCode();
+           if (hashCode == 0)
+             hashCode = 0xcafebebe;
+        }
+        return hashCode;
+    }
+
+    public String toString() {
+        return cachedMethod.toString();
+    }
+    
+    private static Constructor getConstructor(SoftReference<Constructor> ref) {
+        if (ref==null) return null;
+        return ref.get();
+    }
+
+    public CallSite createPogoMetaMethodSite(CallSite site, MetaClassImpl metaClass, Class[] params) {
+        if (!skipCompiled) {
+            Constructor constr = getConstructor(pogoCallSiteConstructor);
+            if (constr==null) {
+                if (CallSiteGenerator.isCompilable(this)) {
+                  constr = CallSiteGenerator.compilePogoMethod(this);
+                }
+                if (constr != null) {
+                     pogoCallSiteConstructor = new SoftReference<Constructor> (constr);
+                } else {
+                    skipCompiled = true;
+                }
+            }
+    
+            if (constr!=null) {
+                try {
+                    return (CallSite) constr.newInstance(site, metaClass, this, params, constr);
+                } catch (Error e) {
+                    skipCompiled=true;
+                    throw e;
+                } catch (Throwable e) {
+                    skipCompiled=true;
+                }
+            }
+        }
+        return new PogoMetaMethodSite.PogoCachedMethodSiteNoUnwrapNoCoerce(site, metaClass, this, params);
+    }
+
+
+    public CallSite createPojoMetaMethodSite(CallSite site, MetaClassImpl metaClass, Class[] params) {
+        if (!skipCompiled) {
+            Constructor constr = getConstructor(pojoCallSiteConstructor);
+            if (constr==null) {
+                if (CallSiteGenerator.isCompilable(this)) {
+                  constr = CallSiteGenerator.compilePojoMethod(this);
+                }
+                if (constr != null) {
+                    pojoCallSiteConstructor = new SoftReference<Constructor> (constr);
+                } else {
+                    skipCompiled = true;
+                }
+            }
+    
+            if (constr!=null) {
+                try {
+                    return (CallSite) constr.newInstance(site, metaClass, this, params, constr);
+                } catch (Error e) {
+                    skipCompiled=true;
+                    throw e;
+                } catch (Throwable e) {
+                    skipCompiled=true;
+                }
+            }
+        }
+        return new PojoMetaMethodSite.PojoCachedMethodSiteNoUnwrapNoCoerce(site, metaClass, this, params);
+    }
+
+    public CallSite createStaticMetaMethodSite(CallSite site, MetaClassImpl metaClass, Class[] params) {
+        if (!skipCompiled) {
+            Constructor constr = getConstructor(staticCallSiteConstructor);
+            if (constr==null) {
+                if (CallSiteGenerator.isCompilable(this)) {
+                  constr = CallSiteGenerator.compileStaticMethod(this);
+                }
+                if (constr != null) {
+                    staticCallSiteConstructor = new SoftReference<Constructor> (constr);
+                } else {
+                    skipCompiled = true;
+                }
+            }
+    
+            if (constr!=null) {
+                try {
+                    return (CallSite) constr.newInstance(site, metaClass, this, params, constr);
+                } catch (Error e) {
+                    skipCompiled=true;
+                    throw e;
+                } catch (Throwable e) {
+                    skipCompiled=true;
+                }
+            }
+        }
+
+        return new StaticMetaMethodSite.StaticMetaMethodSiteNoUnwrapNoCoerce(site, metaClass, this, params);
+    }
+
+    private static class MyComparator implements Comparator, Serializable {
+        private static final long serialVersionUID = 8909277090690131302L;
+
+        public int compare(Object o1, Object o2) {
+            if (o1 instanceof CachedMethod)
+                return ((CachedMethod)o1).compareTo(o2);
+            else if (o2 instanceof CachedMethod)
+                return -((CachedMethod)o2).compareTo(o1);
+            else
+                // really, this should never happen, it's evidence of corruption if it does
+                throw new ClassCastException("One of the two comparables must be a CachedMethod");
+        }
+    }
+
+    public Method getCachedMethod() {
+        AccessPermissionChecker.checkAccessPermission(cachedMethod);
+        return cachedMethod;
+    }
+
+}
+
diff --git a/src/main/java/org/codehaus/groovy/reflection/ClassInfo.java b/src/main/java/org/codehaus/groovy/reflection/ClassInfo.java
index 1067e4b..2c4ae9a 100644
--- a/src/main/java/org/codehaus/groovy/reflection/ClassInfo.java
+++ b/src/main/java/org/codehaus/groovy/reflection/ClassInfo.java
@@ -69,8 +69,6 @@ import java.util.concurrent.atomic.AtomicInteger;
  * from the cache.  Internally the {@code Class} associated with a {@code ClassInfo}
  * instance is kept as {@link WeakReference}, so it not safe to reference
  * and instance without the Class being either strongly or softly reachable.
- *
- * @author Alex.Tkachman
  */
 public class ClassInfo implements Finalizable {
 
diff --git a/src/main/java/org/codehaus/groovy/reflection/stdclasses/ArrayCachedClass.java b/src/main/java/org/codehaus/groovy/reflection/stdclasses/ArrayCachedClass.java
index fcf2908..6f53cac 100644
--- a/src/main/java/org/codehaus/groovy/reflection/stdclasses/ArrayCachedClass.java
+++ b/src/main/java/org/codehaus/groovy/reflection/stdclasses/ArrayCachedClass.java
@@ -23,9 +23,6 @@ import org.codehaus.groovy.reflection.CachedClass;
 import org.codehaus.groovy.reflection.ClassInfo;
 import org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation;
 
-/**
- * @author Alex.Tkachman
- */
 public class ArrayCachedClass extends CachedClass {
     public ArrayCachedClass(Class klazz, ClassInfo classInfo) {
         super(klazz, classInfo);
diff --git a/src/main/java/org/codehaus/groovy/reflection/stdclasses/BigDecimalCachedClass.java b/src/main/java/org/codehaus/groovy/reflection/stdclasses/BigDecimalCachedClass.java
index 45a1c85..d1f7646 100644
--- a/src/main/java/org/codehaus/groovy/reflection/stdclasses/BigDecimalCachedClass.java
+++ b/src/main/java/org/codehaus/groovy/reflection/stdclasses/BigDecimalCachedClass.java
@@ -23,9 +23,6 @@ import org.codehaus.groovy.reflection.ClassInfo;
 import java.math.BigDecimal;
 import java.math.BigInteger;
 
-/**
- * @author Alex.Tkachman
- */
 public class BigDecimalCachedClass extends DoubleCachedClass {
     public BigDecimalCachedClass(Class klazz, ClassInfo classInfo) {
         super(klazz, classInfo, true);
diff --git a/src/main/java/org/codehaus/groovy/reflection/stdclasses/BigIntegerCachedClass.java b/src/main/java/org/codehaus/groovy/reflection/stdclasses/BigIntegerCachedClass.java
index 573fc42..ba90a8b 100644
--- a/src/main/java/org/codehaus/groovy/reflection/stdclasses/BigIntegerCachedClass.java
+++ b/src/main/java/org/codehaus/groovy/reflection/stdclasses/BigIntegerCachedClass.java
@@ -22,9 +22,6 @@ import org.codehaus.groovy.reflection.ClassInfo;
 
 import java.math.BigInteger;
 
-/**
- * @author Alex.Tkachman
- */
 public class BigIntegerCachedClass extends NumberCachedClass {
     public BigIntegerCachedClass(Class klazz, ClassInfo classInfo) {
         super(klazz, classInfo);
diff --git a/src/main/java/org/codehaus/groovy/reflection/stdclasses/BooleanCachedClass.java b/src/main/java/org/codehaus/groovy/reflection/stdclasses/BooleanCachedClass.java
index 9dacdf4..2d24f73 100644
--- a/src/main/java/org/codehaus/groovy/reflection/stdclasses/BooleanCachedClass.java
+++ b/src/main/java/org/codehaus/groovy/reflection/stdclasses/BooleanCachedClass.java
@@ -21,9 +21,6 @@ package org.codehaus.groovy.reflection.stdclasses;
 import org.codehaus.groovy.reflection.CachedClass;
 import org.codehaus.groovy.reflection.ClassInfo;
 
-/**
- * @author Alex.Tkachman
- */
 public class BooleanCachedClass extends CachedClass {
     private final boolean allowNull;
     public BooleanCachedClass(Class klazz, ClassInfo classInfo, boolean allowNull) {
diff --git a/src/main/java/org/codehaus/groovy/reflection/stdclasses/ByteCachedClass.java b/src/main/java/org/codehaus/groovy/reflection/stdclasses/ByteCachedClass.java
index 21abd59..c9d75f9 100644
--- a/src/main/java/org/codehaus/groovy/reflection/stdclasses/ByteCachedClass.java
+++ b/src/main/java/org/codehaus/groovy/reflection/stdclasses/ByteCachedClass.java
@@ -20,9 +20,6 @@ package org.codehaus.groovy.reflection.stdclasses;
 
 import org.codehaus.groovy.reflection.ClassInfo;
 
-/**
- * @author Alex.Tkachman
- */
 public class ByteCachedClass extends NumberCachedClass {
     private final boolean allowNull;
     public ByteCachedClass(Class klazz, ClassInfo classInfo, boolean allowNull) {
diff --git a/src/main/java/org/codehaus/groovy/reflection/stdclasses/CharacterCachedClass.java b/src/main/java/org/codehaus/groovy/reflection/stdclasses/CharacterCachedClass.java
index 619332e..44d9b0f 100644
--- a/src/main/java/org/codehaus/groovy/reflection/stdclasses/CharacterCachedClass.java
+++ b/src/main/java/org/codehaus/groovy/reflection/stdclasses/CharacterCachedClass.java
@@ -21,9 +21,6 @@ package org.codehaus.groovy.reflection.stdclasses;
 import org.codehaus.groovy.reflection.CachedClass;
 import org.codehaus.groovy.reflection.ClassInfo;
 
-/**
- * @author Alex.Tkachman
- */
 public class CharacterCachedClass extends CachedClass {
     private final boolean allowNull;
 
diff --git a/src/main/java/org/codehaus/groovy/reflection/stdclasses/DoubleCachedClass.java b/src/main/java/org/codehaus/groovy/reflection/stdclasses/DoubleCachedClass.java
index 4a0f5c6..5e4fc72 100644
--- a/src/main/java/org/codehaus/groovy/reflection/stdclasses/DoubleCachedClass.java
+++ b/src/main/java/org/codehaus/groovy/reflection/stdclasses/DoubleCachedClass.java
@@ -23,9 +23,6 @@ import org.codehaus.groovy.reflection.ClassInfo;
 import java.math.BigDecimal;
 import java.math.BigInteger;
 
-/**
- * @author Alex.Tkachman
- */
 public class DoubleCachedClass extends NumberCachedClass { // Double, double
     private final boolean allowNull;
 
diff --git a/src/main/java/org/codehaus/groovy/reflection/stdclasses/FloatCachedClass.java b/src/main/java/org/codehaus/groovy/reflection/stdclasses/FloatCachedClass.java
index a579028..a615f2a 100644
--- a/src/main/java/org/codehaus/groovy/reflection/stdclasses/FloatCachedClass.java
+++ b/src/main/java/org/codehaus/groovy/reflection/stdclasses/FloatCachedClass.java
@@ -23,9 +23,6 @@ import org.codehaus.groovy.reflection.ClassInfo;
 import java.math.BigDecimal;
 import java.math.BigInteger;
 
-/**
- * @author Alex.Tkachman
- */
 public class FloatCachedClass extends NumberCachedClass {
     private final boolean allowNull;
 
diff --git a/src/main/java/org/codehaus/groovy/reflection/stdclasses/IntegerCachedClass.java b/src/main/java/org/codehaus/groovy/reflection/stdclasses/IntegerCachedClass.java
index 334a3ab..35be554 100644
--- a/src/main/java/org/codehaus/groovy/reflection/stdclasses/IntegerCachedClass.java
+++ b/src/main/java/org/codehaus/groovy/reflection/stdclasses/IntegerCachedClass.java
@@ -22,9 +22,6 @@ import org.codehaus.groovy.reflection.ClassInfo;
 
 import java.math.BigInteger;
 
-/**
- * @author Alex.Tkachman
- */
 public class IntegerCachedClass extends NumberCachedClass {  // int, Integer
     private final boolean allowNull;
 
diff --git a/src/main/java/org/codehaus/groovy/reflection/stdclasses/LongCachedClass.java b/src/main/java/org/codehaus/groovy/reflection/stdclasses/LongCachedClass.java
index 5d42b0c..0b15b91 100644
--- a/src/main/java/org/codehaus/groovy/reflection/stdclasses/LongCachedClass.java
+++ b/src/main/java/org/codehaus/groovy/reflection/stdclasses/LongCachedClass.java
@@ -20,9 +20,6 @@ package org.codehaus.groovy.reflection.stdclasses;
 
 import org.codehaus.groovy.reflection.ClassInfo;
 
-/**
- * @author Alex.Tkachman
- */
 public class LongCachedClass extends NumberCachedClass {
     private final boolean allowNull;
 
diff --git a/src/main/java/org/codehaus/groovy/reflection/stdclasses/NumberCachedClass.java b/src/main/java/org/codehaus/groovy/reflection/stdclasses/NumberCachedClass.java
index 311cbc2..70a9a35 100644
--- a/src/main/java/org/codehaus/groovy/reflection/stdclasses/NumberCachedClass.java
+++ b/src/main/java/org/codehaus/groovy/reflection/stdclasses/NumberCachedClass.java
@@ -23,9 +23,6 @@ import org.codehaus.groovy.reflection.ClassInfo;
 
 import java.math.BigInteger;
 
-/**
- * @author Alex.Tkachman
- */
 public class NumberCachedClass extends CachedClass {
 
     public NumberCachedClass(Class klazz, ClassInfo classInfo) {
diff --git a/src/main/java/org/codehaus/groovy/reflection/stdclasses/ObjectCachedClass.java b/src/main/java/org/codehaus/groovy/reflection/stdclasses/ObjectCachedClass.java
index f29acf7..9c281f5 100644
--- a/src/main/java/org/codehaus/groovy/reflection/stdclasses/ObjectCachedClass.java
+++ b/src/main/java/org/codehaus/groovy/reflection/stdclasses/ObjectCachedClass.java
@@ -21,9 +21,6 @@ package org.codehaus.groovy.reflection.stdclasses;
 import org.codehaus.groovy.reflection.CachedClass;
 import org.codehaus.groovy.reflection.ClassInfo;
 
-/**
- * @author Alex.Tkachman
- */
 public class ObjectCachedClass extends CachedClass {
     public ObjectCachedClass(ClassInfo classInfo) {
         super(Object.class,classInfo);
diff --git a/src/main/java/org/codehaus/groovy/reflection/stdclasses/ShortCachedClass.java b/src/main/java/org/codehaus/groovy/reflection/stdclasses/ShortCachedClass.java
index f6cccf1..917380b 100644
--- a/src/main/java/org/codehaus/groovy/reflection/stdclasses/ShortCachedClass.java
+++ b/src/main/java/org/codehaus/groovy/reflection/stdclasses/ShortCachedClass.java
@@ -20,9 +20,6 @@ package org.codehaus.groovy.reflection.stdclasses;
 
 import org.codehaus.groovy.reflection.ClassInfo;
 
-/**
- * @author Alex.Tkachman
- */
 public class ShortCachedClass extends NumberCachedClass {
     private final boolean allowNull;
 
diff --git a/src/main/java/org/codehaus/groovy/reflection/stdclasses/StringCachedClass.java b/src/main/java/org/codehaus/groovy/reflection/stdclasses/StringCachedClass.java
index a3039ad..01b41b5 100644
--- a/src/main/java/org/codehaus/groovy/reflection/stdclasses/StringCachedClass.java
+++ b/src/main/java/org/codehaus/groovy/reflection/stdclasses/StringCachedClass.java
@@ -23,9 +23,6 @@ import org.codehaus.groovy.reflection.CachedClass;
 import org.codehaus.groovy.reflection.ClassInfo;
 import org.codehaus.groovy.reflection.ReflectionCache;
 
-/**
- * @author Alex.Tkachman
- */
 public class StringCachedClass extends CachedClass {
     private static final Class STRING_CLASS = String.class;
     private static final Class GSTRING_CLASS = GString.class;
diff --git a/src/main/java/org/codehaus/groovy/runtime/AbstractComparator.java b/src/main/java/org/codehaus/groovy/runtime/AbstractComparator.java
index 7c977cd..db12114 100644
--- a/src/main/java/org/codehaus/groovy/runtime/AbstractComparator.java
+++ b/src/main/java/org/codehaus/groovy/runtime/AbstractComparator.java
@@ -20,9 +20,6 @@ package org.codehaus.groovy.runtime;
 
 import java.util.Comparator;
 
-/**
- * @author Andres Almiray
- */
 public abstract class AbstractComparator<T> implements Comparator<T> {
     public boolean equals(Object obj) {
         return this == obj;
diff --git a/src/main/java/org/codehaus/groovy/runtime/BytecodeInterface8.java b/src/main/java/org/codehaus/groovy/runtime/BytecodeInterface8.java
index 79fae05..71cabf3 100644
--- a/src/main/java/org/codehaus/groovy/runtime/BytecodeInterface8.java
+++ b/src/main/java/org/codehaus/groovy/runtime/BytecodeInterface8.java
@@ -22,7 +22,6 @@ import org.codehaus.groovy.runtime.metaclass.DefaultMetaClassInfo;
 
 /**
  * This class contains methods special to optimizations used directly from bytecode in Groovy 1.8
- * @author <a href="mailto:blackdrag@gmx.org">Jochen "blackdrag" Theodorou</a>
  */
 public class BytecodeInterface8 {
     
diff --git a/src/main/java/org/codehaus/groovy/runtime/DefaultCachedMethodKey.java b/src/main/java/org/codehaus/groovy/runtime/DefaultCachedMethodKey.java
index 9dd8cd0..7dd9a35 100644
--- a/src/main/java/org/codehaus/groovy/runtime/DefaultCachedMethodKey.java
+++ b/src/main/java/org/codehaus/groovy/runtime/DefaultCachedMethodKey.java
@@ -23,8 +23,6 @@ import org.codehaus.groovy.reflection.CachedClass;
 
 /**
  * A default implementation of MethodKey
- *
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public class DefaultCachedMethodKey extends MethodKey{
 
diff --git a/src/main/java/org/codehaus/groovy/runtime/DefaultMethodKey.java b/src/main/java/org/codehaus/groovy/runtime/DefaultMethodKey.java
index 96612ff..97fe495 100644
--- a/src/main/java/org/codehaus/groovy/runtime/DefaultMethodKey.java
+++ b/src/main/java/org/codehaus/groovy/runtime/DefaultMethodKey.java
@@ -20,8 +20,6 @@ package org.codehaus.groovy.runtime;
 
 /**
  * A default implementation of MethodKey
- *
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public class DefaultMethodKey extends MethodKey{
 
diff --git a/src/main/java/org/codehaus/groovy/runtime/FlushingStreamWriter.java b/src/main/java/org/codehaus/groovy/runtime/FlushingStreamWriter.java
index 6fb77b7..89f2113 100644
--- a/src/main/java/org/codehaus/groovy/runtime/FlushingStreamWriter.java
+++ b/src/main/java/org/codehaus/groovy/runtime/FlushingStreamWriter.java
@@ -24,8 +24,6 @@ import java.io.OutputStreamWriter;
 
 /**
  * Stream writer which flushes after each write operation.
- *
- * @author Guillaume Laforge
  */
 public class FlushingStreamWriter extends OutputStreamWriter {
 
diff --git a/src/main/java/org/codehaus/groovy/runtime/GeneratedClosure.java b/src/main/java/org/codehaus/groovy/runtime/GeneratedClosure.java
index 50da843..efcfb5e 100644
--- a/src/main/java/org/codehaus/groovy/runtime/GeneratedClosure.java
+++ b/src/main/java/org/codehaus/groovy/runtime/GeneratedClosure.java
@@ -1,29 +1,28 @@
-/*
- *  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;
-
-/**
- * Marker interface to identify closures generated by the groovy compiler.
- * For internal use only!
- * 
- * @author Jochen Theodorou
- * @since 1.5
- * @see org.codehaus.groovy.runtime.metaclass.ClosureMetaClass
- */
-public interface GeneratedClosure {}
+/*
+ *  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;
+
+/**
+ * Marker interface to identify closures generated by the groovy compiler.
+ * For internal use only!
+ * 
+ * @since 1.5
+ * @see org.codehaus.groovy.runtime.metaclass.ClosureMetaClass
+ */
+public interface GeneratedClosure {}
diff --git a/src/main/java/org/codehaus/groovy/runtime/MetaClassHelper.java b/src/main/java/org/codehaus/groovy/runtime/MetaClassHelper.java
index 7839a59..5d745d4 100644
--- a/src/main/java/org/codehaus/groovy/runtime/MetaClassHelper.java
+++ b/src/main/java/org/codehaus/groovy/runtime/MetaClassHelper.java
@@ -42,10 +42,6 @@ import java.util.Set;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
-/**
- * @author John Wilson
- * @author Jochen Theodorou
- */
 public class MetaClassHelper {
 
     public static final Object[] EMPTY_ARRAY = {};
diff --git a/src/main/java/org/codehaus/groovy/runtime/MethodKey.java b/src/main/java/org/codehaus/groovy/runtime/MethodKey.java
index d03b85a..aaa7e4a 100644
--- a/src/main/java/org/codehaus/groovy/runtime/MethodKey.java
+++ b/src/main/java/org/codehaus/groovy/runtime/MethodKey.java
@@ -26,8 +26,6 @@ import java.util.List;
 /**
  * An abstract base class for a key used for comparators and Map keys to lookup a method by
  * name and parameter types
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public abstract class MethodKey {
 
diff --git a/src/main/java/org/codehaus/groovy/runtime/MethodRankHelper.java b/src/main/java/org/codehaus/groovy/runtime/MethodRankHelper.java
index 689245c..83723df 100644
--- a/src/main/java/org/codehaus/groovy/runtime/MethodRankHelper.java
+++ b/src/main/java/org/codehaus/groovy/runtime/MethodRankHelper.java
@@ -36,8 +36,6 @@ import java.util.Set;
  * Utility class for MissingMethodException, MissingPropertyException etc.
  * This class contains methods assisting in ranking and listing probable intended
  * methods/fields when a exception is thrown.
- *
- * @author Hjalmar Ekengren
  */
 public class MethodRankHelper{
     //These are the costs for the various edit operations
diff --git a/src/main/java/org/codehaus/groovy/runtime/ReflectionMethodInvoker.java b/src/main/java/org/codehaus/groovy/runtime/ReflectionMethodInvoker.java
index a5e8ed4..731eaab 100644
--- a/src/main/java/org/codehaus/groovy/runtime/ReflectionMethodInvoker.java
+++ b/src/main/java/org/codehaus/groovy/runtime/ReflectionMethodInvoker.java
@@ -26,8 +26,6 @@ import java.lang.reflect.Method;
  * The class is particularly useful for Groovy classes implementing <code>GroovyInterceptable</code>,
  * since it is not possible to call any method from this class,
  * because it is intercepted by the <code>invokeMethod()</code> method.
- *
- * @author Guillaume Laforge
  */
 public class ReflectionMethodInvoker {
 
diff --git a/src/main/java/org/codehaus/groovy/runtime/Reflector.java b/src/main/java/org/codehaus/groovy/runtime/Reflector.java
index b1626cc..239467e 100644
--- a/src/main/java/org/codehaus/groovy/runtime/Reflector.java
+++ b/src/main/java/org/codehaus/groovy/runtime/Reflector.java
@@ -24,8 +24,6 @@ import org.codehaus.groovy.reflection.CachedMethod;
 
 /**
  * Provides as alternative to reflection using bytecode generation.
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public class Reflector {
 
diff --git a/src/main/java/org/codehaus/groovy/runtime/ResourceGroovyMethods.java b/src/main/java/org/codehaus/groovy/runtime/ResourceGroovyMethods.java
index a47adab..3bdcb19 100644
--- a/src/main/java/org/codehaus/groovy/runtime/ResourceGroovyMethods.java
+++ b/src/main/java/org/codehaus/groovy/runtime/ResourceGroovyMethods.java
@@ -85,34 +85,6 @@ import static org.codehaus.groovy.runtime.DefaultGroovyMethods.get;
  * 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.
- *
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
- * @author Jeremy Rayner
- * @author Sam Pullara
- * @author Rod Cope
- * @author Guillaume Laforge
- * @author John Wilson
- * @author Hein Meling
- * @author Dierk Koenig
- * @author Pilho Kim
- * @author Marc Guillemot
- * @author Russel Winder
- * @author bing ran
- * @author Jochen Theodorou
- * @author Paul King
- * @author Michael Baehr
- * @author Joachim Baumann
- * @author Alex Tkachman
- * @author Ted Naleid
- * @author Brad Long
- * @author Jim Jagielski
- * @author Rodolfo Velasco
- * @author jeremi Joslin
- * @author Hamlet D'Arcy
- * @author Cedric Champeau
- * @author Tim Yates
- * @author Dinko Srkoc
- * @author Sergei Egorov
  */
 public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
 
@@ -132,13 +104,11 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
      *
      * @param self a file object
      * @return directory size (length)
-     * @since 2.1
-     *
-     * @throws IOException if File object specified does not exist
+     * @throws IOException              if File object specified does not exist
      * @throws IllegalArgumentException if the provided File object does not represent a directory
+     * @since 2.1
      */
-    public static long directorySize(File self) throws IOException, IllegalArgumentException
-    {
+    public static long directorySize(File self) throws IOException, IllegalArgumentException {
         final long[] size = {0L};
 
         eachFileRecurse(self, FileType.FILES, new Closure<Void>(null) {
@@ -176,7 +146,7 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
      * @see IOGroovyMethods#withStream(java.io.OutputStream, groovy.lang.Closure)
      * @since 1.5.0
      */
-    public static <T> T withObjectOutputStream(File file, @ClosureParams(value=SimpleType.class, options="java.io.ObjectOutputStream") Closure<T> closure) throws IOException {
+    public static <T> T withObjectOutputStream(File file, @ClosureParams(value = SimpleType.class, options = "java.io.ObjectOutputStream") Closure<T> closure) throws IOException {
         return IOGroovyMethods.withStream(newObjectOutputStream(file), closure);
     }
 
@@ -230,7 +200,7 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
      * @see IOGroovyMethods#withStream(java.io.InputStream, groovy.lang.Closure)
      * @since 1.5.2
      */
-    public static <T> T withObjectInputStream(File file, @ClosureParams(value=SimpleType.class, options="java.io.ObjectInputStream") Closure<T> closure) throws IOException {
+    public static <T> T withObjectInputStream(File file, @ClosureParams(value = SimpleType.class, options = "java.io.ObjectInputStream") Closure<T> closure) throws IOException {
         return IOGroovyMethods.withStream(newObjectInputStream(file), closure);
     }
 
@@ -246,7 +216,7 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
      * @see IOGroovyMethods#withStream(java.io.InputStream, groovy.lang.Closure)
      * @since 1.5.2
      */
-    public static <T> T withObjectInputStream(File file, ClassLoader classLoader, @ClosureParams(value=SimpleType.class, options="java.io.ObjectInputStream") Closure<T> closure) throws IOException {
+    public static <T> T withObjectInputStream(File file, ClassLoader classLoader, @ClosureParams(value = SimpleType.class, options = "java.io.ObjectInputStream") Closure<T> closure) throws IOException {
         return IOGroovyMethods.withStream(newObjectInputStream(file, classLoader), closure);
     }
 
@@ -262,7 +232,7 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
      * @see #eachLine(java.io.File, int, groovy.lang.Closure)
      * @since 1.5.5
      */
-    public static <T> T eachLine(File self, @ClosureParams(value=FromString.class,options={"String","String,Integer"}) Closure<T> closure) throws IOException {
+    public static <T> T eachLine(File self, @ClosureParams(value = FromString.class, options = {"String", "String,Integer"}) Closure<T> closure) throws IOException {
         return eachLine(self, 1, closure);
     }
 
@@ -279,7 +249,7 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
      * @see #eachLine(java.io.File, java.lang.String, int, groovy.lang.Closure)
      * @since 1.6.8
      */
-    public static <T> T eachLine(File self, String charset, @ClosureParams(value=FromString.class,options={"String","String,Integer"}) Closure<T> closure) throws IOException {
+    public static <T> T eachLine(File self, String charset, @ClosureParams(value = FromString.class, options = {"String", "String,Integer"}) Closure<T> closure) throws IOException {
         return eachLine(self, charset, 1, closure);
     }
 
@@ -296,7 +266,7 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
      * @see IOGroovyMethods#eachLine(java.io.Reader, int, groovy.lang.Closure)
      * @since 1.5.7
      */
-    public static <T> T eachLine(File self, int firstLine, @ClosureParams(value=FromString.class,options={"String","String,Integer"}) Closure<T> closure) throws IOException {
+    public static <T> T eachLine(File self, int firstLine, @ClosureParams(value = FromString.class, options = {"String", "String,Integer"}) Closure<T> closure) throws IOException {
         return IOGroovyMethods.eachLine(newReader(self), firstLine, closure);
     }
 
@@ -314,7 +284,7 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
      * @see IOGroovyMethods#eachLine(java.io.Reader, int, groovy.lang.Closure)
      * @since 1.6.8
      */
-    public static <T> T eachLine(File self, String charset, int firstLine, @ClosureParams(value=FromString.class,options={"String","String,Integer"}) Closure<T> closure) throws IOException {
+    public static <T> T eachLine(File 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);
     }
 
@@ -329,7 +299,7 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
      * @see #eachLine(java.net.URL, int, groovy.lang.Closure)
      * @since 1.5.6
      */
-    public static <T> T eachLine(URL url, @ClosureParams(value=FromString.class,options={"String","String,Integer"}) Closure<T> closure) throws IOException {
+    public static <T> T eachLine(URL url, @ClosureParams(value = FromString.class, options = {"String", "String,Integer"}) Closure<T> closure) throws IOException {
         return eachLine(url, 1, closure);
     }
 
@@ -345,7 +315,7 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
      * @see IOGroovyMethods#eachLine(java.io.InputStream, int, groovy.lang.Closure)
      * @since 1.5.7
      */
-    public static <T> T eachLine(URL url, int firstLine, @ClosureParams(value=FromString.class,options={"String","String,Integer"}) Closure<T> closure) throws IOException {
+    public static <T> T eachLine(URL url, int firstLine, @ClosureParams(value = FromString.class, options = {"String", "String,Integer"}) Closure<T> closure) throws IOException {
         return IOGroovyMethods.eachLine(url.openConnection().getInputStream(), firstLine, closure);
     }
 
@@ -361,7 +331,7 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
      * @see #eachLine(java.net.URL, java.lang.String, int, groovy.lang.Closure)
      * @since 1.5.6
      */
-    public static <T> T eachLine(URL url, String charset, @ClosureParams(value=FromString.class,options={"String","String,Integer"}) Closure<T> closure) throws IOException {
+    public static <T> T eachLine(URL url, String charset, @ClosureParams(value = FromString.class, options = {"String", "String,Integer"}) Closure<T> closure) throws IOException {
         return eachLine(url, charset, 1, closure);
     }
 
@@ -378,7 +348,7 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
      * @see IOGroovyMethods#eachLine(java.io.Reader, int, groovy.lang.Closure)
      * @since 1.5.7
      */
-    public static <T> T eachLine(URL url, String charset, int firstLine, @ClosureParams(value=FromString.class,options={"String","String,Integer"}) Closure<T> closure) throws IOException {
+    public static <T> T eachLine(URL url, String charset, int firstLine, @ClosureParams(value = FromString.class, options = {"String", "String,Integer"}) Closure<T> closure) throws IOException {
         return IOGroovyMethods.eachLine(newReader(url, charset), firstLine, closure);
     }
 
@@ -393,13 +363,12 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
      * @param regex   the delimiting regular expression
      * @param closure a closure
      * @return the last value returned by the closure
-     * @throws IOException if an IOException occurs.
-     * @throws java.util.regex.PatternSyntaxException
-     *                     if the regular expression's syntax is invalid
+     * @throws IOException                            if an IOException occurs.
+     * @throws java.util.regex.PatternSyntaxException if the regular expression's syntax is invalid
      * @see IOGroovyMethods#splitEachLine(java.io.Reader, java.lang.String, groovy.lang.Closure)
      * @since 1.5.5
      */
-    public static <T> T splitEachLine(File self, String regex, @ClosureParams(value=FromString.class,options={"List<String>","String[]"},conflictResolutionStrategy=PickFirstResolver.class) Closure<T> closure) throws IOException {
+    public static <T> T splitEachLine(File 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);
     }
 
@@ -418,7 +387,7 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
      * @see IOGroovyMethods#splitEachLine(java.io.Reader, java.util.regex.Pattern, groovy.lang.Closure)
      * @since 1.6.8
      */
-    public static <T> T splitEachLine(File self, Pattern pattern, @ClosureParams(value=FromString.class,options={"List<String>","String[]"},conflictResolutionStrategy=PickFirstResolver.class) Closure<T> closure) throws IOException {
+    public static <T> T splitEachLine(File 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);
     }
 
@@ -434,13 +403,12 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
      * @param charset opens the file with a specified charset
      * @param closure a closure
      * @return the last value returned by the closure
-     * @throws IOException if an IOException occurs.
-     * @throws java.util.regex.PatternSyntaxException
-     *                     if the regular expression's syntax is invalid
+     * @throws IOException                            if an IOException occurs.
+     * @throws java.util.regex.PatternSyntaxException if the regular expression's syntax is invalid
      * @see IOGroovyMethods#splitEachLine(java.io.Reader, java.lang.String, groovy.lang.Closure)
      * @since 1.6.8
      */
-    public static <T> T splitEachLine(File self, String regex, String charset, @ClosureParams(value=FromString.class,options={"List<String>","String[]"},conflictResolutionStrategy=PickFirstResolver.class) Closure<T> closure) throws IOException {
+    public static <T> T splitEachLine(File 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);
     }
 
@@ -460,7 +428,7 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
      * @see IOGroovyMethods#splitEachLine(java.io.Reader, java.util.regex.Pattern, groovy.lang.Closure)
      * @since 1.6.8
      */
-    public static <T> T splitEachLine(File self, Pattern pattern, String charset, @ClosureParams(value=FromString.class,options={"List<String>","String[]"},conflictResolutionStrategy=PickFirstResolver.class) Closure<T> closure) throws IOException {
+    public static <T> T splitEachLine(File 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);
     }
 
@@ -475,13 +443,12 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
      * @param regex   the delimiting regular expression
      * @param closure a closure
      * @return the last value returned by the closure
-     * @throws IOException if an IOException occurs.
-     * @throws java.util.regex.PatternSyntaxException
-     *                     if the regular expression's syntax is invalid
+     * @throws IOException                            if an IOException occurs.
+     * @throws java.util.regex.PatternSyntaxException if the regular expression's syntax is invalid
      * @see IOGroovyMethods#splitEachLine(java.io.Reader, java.lang.String, groovy.lang.Closure)
      * @since 1.6.8
      */
-    public static <T> T splitEachLine(URL self, String regex, @ClosureParams(value=FromString.class,options={"List<String>","String[]"},conflictResolutionStrategy=PickFirstResolver.class) Closure<T> closure) throws IOException {
+    public static <T> T splitEachLine(URL 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);
     }
 
@@ -500,7 +467,7 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
      * @see IOGroovyMethods#splitEachLine(java.io.Reader, java.util.regex.Pattern, groovy.lang.Closure)
      * @since 1.6.8
      */
-    public static <T> T splitEachLine(URL self, Pattern pattern, @ClosureParams(value=FromString.class,options={"List<String>","String[]"},conflictResolutionStrategy=PickFirstResolver.class) Closure<T> closure) throws IOException {
+    public static <T> T splitEachLine(URL 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);
     }
 
@@ -516,13 +483,12 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
      * @param charset opens the file with a specified charset
      * @param closure a closure
      * @return the last value returned by the closure
-     * @throws IOException if an IOException occurs.
-     * @throws java.util.regex.PatternSyntaxException
-     *                     if the regular expression's syntax is invalid
+     * @throws IOException                            if an IOException occurs.
+     * @throws java.util.regex.PatternSyntaxException if the regular expression's syntax is invalid
      * @see IOGroovyMethods#splitEachLine(java.io.Reader, java.lang.String, groovy.lang.Closure)
      * @since 1.6.8
      */
-    public static <T> T splitEachLine(URL self, String regex, String charset, @ClosureParams(value=FromString.class,options={"List<String>","String[]"},conflictResolutionStrategy=PickFirstResolver.class) Closure<T> closure) throws IOException {
+    public static <T> T splitEachLine(URL 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);
     }
 
@@ -542,7 +508,7 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
      * @see IOGroovyMethods#splitEachLine(java.io.Reader, java.util.regex.Pattern, groovy.lang.Closure)
      * @since 1.6.8
      */
-    public static <T> T splitEachLine(URL self, Pattern pattern, String charset, @ClosureParams(value=FromString.class,options={"List<String>","String[]"},conflictResolutionStrategy=PickFirstResolver.class) Closure<T> closure) throws IOException {
+    public static <T> T splitEachLine(URL 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);
     }
 
@@ -934,7 +900,7 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
     /**
      * Append the text supplied by the Writer at the end of the File without writing a BOM.
      *
-     * @param file a File
+     * @param file   a File
      * @param reader the Reader supplying the text to append at the end of the File
      * @throws IOException if an IOException occurs.
      * @since 2.3
@@ -946,13 +912,13 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
     /**
      * Append the text supplied by the Writer at the end of the File without writing a BOM.
      *
-     * @param file a File
+     * @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
      */
     public static void append(File file, Writer writer) throws IOException {
-         append(file, writer, false);
+        append(file, writer, false);
     }
 
     /**
@@ -1101,9 +1067,9 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
      * 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 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 a BOM
      * @throws IOException if an IOException occurs.
      * @since 2.5.0
@@ -1119,8 +1085,8 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
      * 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 file     a File
+     * @param reader   the Reader supplying the text to append at the end of the File
      * @param writeBom whether to write a BOM
      * @throws IOException if an IOException occurs.
      * @since 2.5.0
@@ -1150,9 +1116,9 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
      * 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 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 a BOM
      * @throws IOException if an IOException occurs.
      * @since 2.5.0
@@ -1208,7 +1174,7 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
      * @throws IllegalArgumentException if the provided File object does not represent a directory
      * @since 1.7.1
      */
-    public static void eachFile(final File self, final FileType fileType, @ClosureParams(value=SimpleType.class,options="java.io.File") final Closure closure)
+    public static void eachFile(final File self, final FileType fileType, @ClosureParams(value = SimpleType.class, options = "java.io.File") final Closure closure)
             throws FileNotFoundException, IllegalArgumentException {
         checkDir(self);
         final File[] files = self.listFiles();
@@ -1235,7 +1201,7 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
      * @see #eachFile(java.io.File, groovy.io.FileType, groovy.lang.Closure)
      * @since 1.5.0
      */
-    public static void eachFile(final File self, @ClosureParams(value=SimpleType.class,options="java.io.File") final Closure closure) throws FileNotFoundException, IllegalArgumentException {
+    public static void eachFile(final File self, @ClosureParams(value = SimpleType.class, options = "java.io.File") final Closure closure) throws FileNotFoundException, IllegalArgumentException {
         eachFile(self, FileType.ANY, closure);
     }
 
@@ -1251,7 +1217,7 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
      * @see #eachFile(java.io.File, groovy.io.FileType, groovy.lang.Closure)
      * @since 1.0
      */
-    public static void eachDir(File self, @ClosureParams(value=SimpleType.class,options="java.io.File") Closure closure) throws FileNotFoundException, IllegalArgumentException {
+    public static void eachDir(File self, @ClosureParams(value = SimpleType.class, options = "java.io.File") Closure closure) throws FileNotFoundException, IllegalArgumentException {
         eachFile(self, FileType.DIRECTORIES, closure);
     }
 
@@ -1269,7 +1235,7 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
      * @throws IllegalArgumentException if the provided File object does not represent a directory
      * @since 1.7.1
      */
-    public static void eachFileRecurse(final File self, final FileType fileType, @ClosureParams(value=SimpleType.class,options="java.io.File") final Closure closure)
+    public static void eachFileRecurse(final File self, final FileType fileType, @ClosureParams(value = SimpleType.class, options = "java.io.File") final Closure closure)
             throws FileNotFoundException, IllegalArgumentException {
         checkDir(self);
         final File[] files = self.listFiles();
@@ -1290,7 +1256,7 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
      * 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>
@@ -1344,7 +1310,7 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
      * @see groovy.io.FileType
      * @since 1.7.1
      */
-    public static void traverse(final File self, final Map<String, Object> options, @ClosureParams(value=SimpleType.class, options="java.io.File") final Closure closure)
+    public static void traverse(final File self, final Map<String, Object> options, @ClosureParams(value = SimpleType.class, options = "java.io.File") final Closure closure)
             throws FileNotFoundException, IllegalArgumentException {
         Number maxDepthNumber = DefaultGroovyMethods.asType(options.remove("maxDepth"), Number.class);
         int maxDepth = maxDepthNumber == null ? -1 : maxDepthNumber.intValue();
@@ -1421,7 +1387,7 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
      * @see #traverse(java.io.File, java.util.Map, groovy.lang.Closure)
      * @since 1.7.1
      */
-    public static void traverse(final File self, @ClosureParams(value=SimpleType.class, options="java.io.File") final Closure closure)
+    public static void traverse(final File self, @ClosureParams(value = SimpleType.class, options = "java.io.File") final Closure closure)
             throws FileNotFoundException, IllegalArgumentException {
         traverse(self, new HashMap<String, Object>(), closure);
     }
@@ -1461,7 +1427,7 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
         // null check because of http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4803836
         if (origFiles != null) {
             List<File> files = Arrays.asList(origFiles);
-            if (sort != null) files = DefaultGroovyMethods.sort((Iterable<File>)files, sort);
+            if (sort != null) files = DefaultGroovyMethods.sort((Iterable<File>) files, sort);
             for (File file : files) {
                 if (file.isDirectory()) {
                     if (type != FileType.FILES) {
@@ -1514,7 +1480,7 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
      * @see #eachFileRecurse(java.io.File, groovy.io.FileType, groovy.lang.Closure)
      * @since 1.0
      */
-    public static void eachFileRecurse(File self, @ClosureParams(value=SimpleType.class,options="java.io.File") Closure closure) throws FileNotFoundException, IllegalArgumentException {
+    public static void eachFileRecurse(File self, @ClosureParams(value = SimpleType.class, options = "java.io.File") Closure closure) throws FileNotFoundException, IllegalArgumentException {
         eachFileRecurse(self, FileType.ANY, closure);
     }
 
@@ -1531,7 +1497,7 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
      * @see #eachFileRecurse(java.io.File, groovy.io.FileType, groovy.lang.Closure)
      * @since 1.5.0
      */
-    public static void eachDirRecurse(final File self, @ClosureParams(value=SimpleType.class,options="java.io.File") final Closure closure) throws FileNotFoundException, IllegalArgumentException {
+    public static void eachDirRecurse(final File self, @ClosureParams(value = SimpleType.class, options = "java.io.File") final Closure closure) throws FileNotFoundException, IllegalArgumentException {
         eachFileRecurse(self, FileType.DIRECTORIES, closure);
     }
 
@@ -1563,7 +1529,7 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
      * @throws IllegalArgumentException if the provided File object does not represent a directory
      * @since 1.7.1
      */
-    public static void eachFileMatch(final File self, final FileType fileType, final Object nameFilter, @ClosureParams(value=SimpleType.class,options="java.io.File") final Closure closure)
+    public static void eachFileMatch(final File self, final FileType fileType, final Object nameFilter, @ClosureParams(value = SimpleType.class, options = "java.io.File") final Closure closure)
             throws FileNotFoundException, IllegalArgumentException {
         checkDir(self);
         final File[] files = self.listFiles();
@@ -1594,7 +1560,7 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
      * @see #eachFileMatch(java.io.File, groovy.io.FileType, java.lang.Object, groovy.lang.Closure)
      * @since 1.5.0
      */
-    public static void eachFileMatch(final File self, final Object nameFilter, @ClosureParams(value=SimpleType.class,options="java.io.File") final Closure closure)
+    public static void eachFileMatch(final File self, final Object nameFilter, @ClosureParams(value = SimpleType.class, options = "java.io.File") final Closure closure)
             throws FileNotFoundException, IllegalArgumentException {
         eachFileMatch(self, FileType.ANY, nameFilter, closure);
     }
@@ -1613,7 +1579,7 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
      * @see #eachFileMatch(java.io.File, groovy.io.FileType, java.lang.Object, groovy.lang.Closure)
      * @since 1.5.0
      */
-    public static void eachDirMatch(final File self, final Object nameFilter, @ClosureParams(value=SimpleType.class,options="java.io.File") final Closure closure) throws FileNotFoundException, IllegalArgumentException {
+    public static void eachDirMatch(final File self, final Object nameFilter, @ClosureParams(value = SimpleType.class, options = "java.io.File") final Closure closure) throws FileNotFoundException, IllegalArgumentException {
         eachFileMatch(self, FileType.DIRECTORIES, nameFilter, closure);
     }
 
@@ -1627,7 +1593,6 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
      * <li>false, when directory couldn't be deleted</li>
      * </ul>
      *
-     *
      * @param self a File
      * @return true if the file doesn't exist or deletion was successful
      * @since 1.6.0
@@ -1668,7 +1633,7 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
      * @param self        a File
      * @param newPathName The new pathname for the named file
      * @return <code>true</code> if and only if the renaming succeeded;
-     *         <code>false</code> otherwise
+     * <code>false</code> otherwise
      * @since 1.7.4
      */
     public static boolean renameTo(final File self, String newPathName) {
@@ -1678,8 +1643,8 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
     /**
      * Relative path to file.
      *
-     * @param self  the <code>File</code> to calculate the path from
-     * @param to    the <code>File</code> to calculate the path to
+     * @param self the <code>File</code> to calculate the path from
+     * @param to   the <code>File</code> to calculate the path to
      * @return the relative path between the files
      */
     public static String relativePath(File self, File to) throws IOException {
@@ -1804,7 +1769,7 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
      * @throws IOException if an IOException occurs.
      * @since 1.5.2
      */
-    public static <T> T withReader(File file, @ClosureParams(value=SimpleType.class, options="java.io.BufferedReader") Closure<T> closure) throws IOException {
+    public static <T> T withReader(File file, @ClosureParams(value = SimpleType.class, options = "java.io.BufferedReader") Closure<T> closure) throws IOException {
         return IOGroovyMethods.withReader(newReader(file), closure);
     }
 
@@ -1820,7 +1785,7 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
      * @throws IOException if an IOException occurs.
      * @since 1.6.0
      */
-    public static <T> T withReader(File file, String charset, @ClosureParams(value=SimpleType.class, options="java.io.BufferedReader") Closure<T> closure) throws IOException {
+    public static <T> T withReader(File file, String charset, @ClosureParams(value = SimpleType.class, options = "java.io.BufferedReader") Closure<T> closure) throws IOException {
         return IOGroovyMethods.withReader(newReader(file, charset), closure);
     }
 
@@ -1859,7 +1824,7 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
      * @see IOGroovyMethods#withStream(java.io.OutputStream, groovy.lang.Closure)
      * @since 1.5.2
      */
-    public static Object withOutputStream(File file, @ClosureParams(value=SimpleType.class, options="java.io.OutputStream") Closure closure) throws IOException {
+    public static Object withOutputStream(File file, @ClosureParams(value = SimpleType.class, options = "java.io.OutputStream") Closure closure) throws IOException {
         return IOGroovyMethods.withStream(newOutputStream(file), closure);
     }
 
@@ -1874,7 +1839,7 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
      * @see IOGroovyMethods#withStream(java.io.InputStream, groovy.lang.Closure)
      * @since 1.5.2
      */
-    public static Object withInputStream(File file, @ClosureParams(value=SimpleType.class, options="java.io.InputStream") Closure closure) throws IOException {
+    public static Object withInputStream(File file, @ClosureParams(value = SimpleType.class, options = "java.io.InputStream") Closure closure) throws IOException {
         return IOGroovyMethods.withStream(newInputStream(file), closure);
     }
 
@@ -1889,7 +1854,7 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
      * @see IOGroovyMethods#withStream(java.io.InputStream, groovy.lang.Closure)
      * @since 1.5.2
      */
-    public static <T> T withInputStream(URL url, @ClosureParams(value=SimpleType.class, options="java.io.InputStream") Closure<T> closure) throws IOException {
+    public static <T> T withInputStream(URL url, @ClosureParams(value = SimpleType.class, options = "java.io.InputStream") Closure<T> closure) throws IOException {
         return IOGroovyMethods.withStream(newInputStream(url), closure);
     }
 
@@ -1904,7 +1869,7 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
      * @see IOGroovyMethods#withStream(java.io.OutputStream, groovy.lang.Closure)
      * @since 1.5.2
      */
-    public static <T> T withDataOutputStream(File file, @ClosureParams(value=SimpleType.class, options="java.io.DataOutputStream") Closure<T> closure) throws IOException {
+    public static <T> T withDataOutputStream(File file, @ClosureParams(value = SimpleType.class, options = "java.io.DataOutputStream") Closure<T> closure) throws IOException {
         return IOGroovyMethods.withStream(newDataOutputStream(file), closure);
     }
 
@@ -1919,7 +1884,7 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
      * @see IOGroovyMethods#withStream(java.io.InputStream, groovy.lang.Closure)
      * @since 1.5.2
      */
-    public static <T> T withDataInputStream(File file, @ClosureParams(value=SimpleType.class, options="java.io.DataInputStream") Closure<T> closure) throws IOException {
+    public static <T> T withDataInputStream(File file, @ClosureParams(value = SimpleType.class, options = "java.io.DataInputStream") Closure<T> closure) throws IOException {
         return IOGroovyMethods.withStream(newDataInputStream(file), closure);
     }
 
@@ -1969,9 +1934,9 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
      * requisite byte order mark is written to the stream before the writer
      * is returned.
      *
-     * @param file    a File
-     * @param charset the name of the encoding used to write in this file
-     * @param append  true if in append mode
+     * @param file     a File
+     * @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 IOException if an IOException occurs.
@@ -2018,7 +1983,7 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
      * @throws IOException if an IOException occurs.
      * @since 1.5.2
      */
-    public static <T> T withWriter(File file, @ClosureParams(value=SimpleType.class, options="java.io.BufferedWriter") Closure<T> closure) throws IOException {
+    public static <T> T withWriter(File file, @ClosureParams(value = SimpleType.class, options = "java.io.BufferedWriter") Closure<T> closure) throws IOException {
         return IOGroovyMethods.withWriter(newWriter(file), closure);
     }
 
@@ -2036,7 +2001,7 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
      * @throws IOException if an IOException occurs.
      * @since 1.5.2
      */
-    public static <T> T withWriter(File file, String charset, @ClosureParams(value=SimpleType.class, options="java.io.BufferedWriter") Closure<T> closure) throws IOException {
+    public static <T> T withWriter(File file, String charset, @ClosureParams(value = SimpleType.class, options = "java.io.BufferedWriter") Closure<T> closure) throws IOException {
         return IOGroovyMethods.withWriter(newWriter(file, charset), closure);
     }
 
@@ -2054,7 +2019,7 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
      * @throws IOException if an IOException occurs.
      * @since 1.5.2
      */
-    public static <T> T withWriterAppend(File file, String charset, @ClosureParams(value=SimpleType.class, options="java.io.BufferedWriter") Closure<T> closure) throws IOException {
+    public static <T> T withWriterAppend(File file, String charset, @ClosureParams(value = SimpleType.class, options = "java.io.BufferedWriter") Closure<T> closure) throws IOException {
         return IOGroovyMethods.withWriter(newWriter(file, charset, true), closure);
     }
 
@@ -2068,7 +2033,7 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
      * @throws IOException if an IOException occurs.
      * @since 1.5.2
      */
-    public static <T> T withWriterAppend(File file, @ClosureParams(value=SimpleType.class, options="java.io.BufferedWriter") Closure<T> closure) throws IOException {
+    public static <T> T withWriterAppend(File file, @ClosureParams(value = SimpleType.class, options = "java.io.BufferedWriter") Closure<T> closure) throws IOException {
         return IOGroovyMethods.withWriter(newWriter(file, true), closure);
     }
 
@@ -2111,7 +2076,7 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
      * @throws IOException if an IOException occurs.
      * @since 1.5.2
      */
-    public static <T> T withPrintWriter(File file, @ClosureParams(value=SimpleType.class, options="java.io.PrintWriter") Closure<T> closure) throws IOException {
+    public static <T> T withPrintWriter(File file, @ClosureParams(value = SimpleType.class, options = "java.io.PrintWriter") Closure<T> closure) throws IOException {
         return IOGroovyMethods.withWriter(newPrintWriter(file), closure);
     }
 
@@ -2129,7 +2094,7 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
      * @throws IOException if an IOException occurs.
      * @since 1.5.2
      */
-    public static <T> T withPrintWriter(File file, String charset, @ClosureParams(value=SimpleType.class, options="java.io.PrintWriter") Closure<T> closure) throws IOException {
+    public static <T> T withPrintWriter(File file, String charset, @ClosureParams(value = SimpleType.class, options = "java.io.PrintWriter") Closure<T> closure) throws IOException {
         return IOGroovyMethods.withWriter(newPrintWriter(file, charset), closure);
     }
 
@@ -2143,7 +2108,7 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
      * @throws IOException if an IOException occurs.
      * @since 1.5.2
      */
-    public static <T> T withReader(URL url, @ClosureParams(value=SimpleType.class, options="java.io.Reader") Closure<T> closure) throws IOException {
+    public static <T> T withReader(URL url, @ClosureParams(value = SimpleType.class, options = "java.io.Reader") Closure<T> closure) throws IOException {
         return IOGroovyMethods.withReader(url.openConnection().getInputStream(), closure);
     }
 
@@ -2158,7 +2123,7 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
      * @throws IOException if an IOException occurs.
      * @since 1.5.6
      */
-    public static <T> T withReader(URL url, String charset, @ClosureParams(value=SimpleType.class, options="java.io.Reader") Closure<T> closure) throws IOException {
+    public static <T> T withReader(URL url, String charset, @ClosureParams(value = SimpleType.class, options = "java.io.Reader") Closure<T> closure) throws IOException {
         return IOGroovyMethods.withReader(url.openConnection().getInputStream(), charset, closure);
     }
 
@@ -2242,7 +2207,7 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
      * <li>allowUserInteraction : set the user interaction flag for the URL connection</li>
      * <li>requestProperties : a map of properties to be passed to the URL connection</li>
      * </ul>
-     * 
+     *
      * @param url        a URL
      * @param parameters connection parameters
      * @return a BufferedInputStream for the URL
@@ -2340,7 +2305,7 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
      * @see IOGroovyMethods#eachByte(java.io.InputStream, groovy.lang.Closure)
      * @since 1.0
      */
-    public static void eachByte(File self, @ClosureParams(value= SimpleType.class,options="byte") Closure closure) throws IOException {
+    public static void eachByte(File self, @ClosureParams(value = SimpleType.class, options = "byte") Closure closure) throws IOException {
         BufferedInputStream is = newInputStream(self);
         IOGroovyMethods.eachByte(is, closure);
     }
@@ -2355,7 +2320,7 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
      * @see IOGroovyMethods#eachByte(java.io.InputStream, int, groovy.lang.Closure)
      * @since 1.7.4
      */
-    public static void eachByte(File self, int bufferLen, @ClosureParams(value= FromString.class,options="byte[],Integer") Closure closure) throws IOException {
+    public static void eachByte(File self, int bufferLen, @ClosureParams(value = FromString.class, options = "byte[],Integer") Closure closure) throws IOException {
         BufferedInputStream is = newInputStream(self);
         IOGroovyMethods.eachByte(is, bufferLen, closure);
     }
@@ -2370,7 +2335,7 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
      * @see IOGroovyMethods#eachByte(java.io.InputStream, groovy.lang.Closure)
      * @since 1.0
      */
-    public static void eachByte(URL url, @ClosureParams(value= SimpleType.class,options="byte") Closure closure) throws IOException {
+    public static void eachByte(URL url, @ClosureParams(value = SimpleType.class, options = "byte") Closure closure) throws IOException {
         InputStream is = url.openConnection().getInputStream();
         IOGroovyMethods.eachByte(is, closure);
     }
@@ -2386,7 +2351,7 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
      * @see IOGroovyMethods#eachByte(java.io.InputStream, int, groovy.lang.Closure)
      * @since 1.8
      */
-    public static void eachByte(URL url, int bufferLen, @ClosureParams(value= FromString.class,options="byte[],Integer") Closure closure) throws IOException {
+    public static void eachByte(URL url, int bufferLen, @ClosureParams(value = FromString.class, options = "byte[],Integer") Closure closure) throws IOException {
         InputStream is = url.openConnection().getInputStream();
         IOGroovyMethods.eachByte(is, bufferLen, closure);
     }
@@ -2403,7 +2368,7 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
      * @see IOGroovyMethods#filterLine(java.io.Reader, groovy.lang.Closure)
      * @since 1.0
      */
-    public static Writable filterLine(File self, @ClosureParams(value=SimpleType.class, options="java.lang.String") Closure closure) throws IOException {
+    public static Writable filterLine(File self, @ClosureParams(value = SimpleType.class, options = "java.lang.String") Closure closure) throws IOException {
         return IOGroovyMethods.filterLine(newReader(self), closure);
     }
 
@@ -2420,7 +2385,7 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
      * @see IOGroovyMethods#filterLine(java.io.Reader, groovy.lang.Closure)
      * @since 1.6.8
      */
-    public static Writable filterLine(File self, String charset, @ClosureParams(value=SimpleType.class, options="java.lang.String") Closure closure) throws IOException {
+    public static Writable filterLine(File self, String charset, @ClosureParams(value = SimpleType.class, options = "java.lang.String") Closure closure) throws IOException {
         return IOGroovyMethods.filterLine(newReader(self, charset), closure);
     }
 
@@ -2436,7 +2401,7 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
      * @see IOGroovyMethods#filterLine(java.io.Reader, java.io.Writer, groovy.lang.Closure)
      * @since 1.0
      */
-    public static void filterLine(File self, Writer writer, @ClosureParams(value=SimpleType.class, options="java.lang.String") Closure closure) throws IOException {
+    public static void filterLine(File self, Writer writer, @ClosureParams(value = SimpleType.class, options = "java.lang.String") Closure closure) throws IOException {
         IOGroovyMethods.filterLine(newReader(self), writer, closure);
     }
 
@@ -2453,7 +2418,7 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
      * @see IOGroovyMethods#filterLine(java.io.Reader, java.io.Writer, groovy.lang.Closure)
      * @since 1.6.8
      */
-    public static void filterLine(File self, Writer writer, String charset, @ClosureParams(value=SimpleType.class, options="java.lang.String") Closure closure) throws IOException {
+    public static void filterLine(File self, Writer writer, String charset, @ClosureParams(value = SimpleType.class, options = "java.lang.String") Closure closure) throws IOException {
         IOGroovyMethods.filterLine(newReader(self, charset), writer, closure);
     }
 
@@ -2469,7 +2434,7 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
      * @see IOGroovyMethods#filterLine(java.io.Reader, groovy.lang.Closure)
      * @since 1.6.8
      */
-    public static Writable filterLine(URL self, @ClosureParams(value=SimpleType.class, options="java.lang.String") Closure predicate) throws IOException {
+    public static Writable filterLine(URL self, @ClosureParams(value = SimpleType.class, options = "java.lang.String") Closure predicate) throws IOException {
         return IOGroovyMethods.filterLine(newReader(self), predicate);
     }
 
@@ -2486,7 +2451,7 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
      * @see IOGroovyMethods#filterLine(java.io.Reader, groovy.lang.Closure)
      * @since 1.6.8
      */
-    public static Writable filterLine(URL self, String charset, @ClosureParams(value=SimpleType.class, options="java.lang.String") Closure predicate) throws IOException {
+    public static Writable filterLine(URL self, String charset, @ClosureParams(value = SimpleType.class, options = "java.lang.String") Closure predicate) throws IOException {
         return IOGroovyMethods.filterLine(newReader(self, charset), predicate);
     }
 
@@ -2503,7 +2468,7 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
      * @see IOGroovyMethods#filterLine(java.io.Reader, java.io.Writer, groovy.lang.Closure)
      * @since 1.6.8
      */
-    public static void filterLine(URL self, Writer writer, @ClosureParams(value=SimpleType.class, options="java.lang.String") Closure predicate) throws IOException {
+    public static void filterLine(URL self, Writer writer, @ClosureParams(value = SimpleType.class, options = "java.lang.String") Closure predicate) throws IOException {
         IOGroovyMethods.filterLine(newReader(self), writer, predicate);
     }
 
@@ -2521,7 +2486,7 @@ public class ResourceGroovyMethods extends DefaultGroovyMethodsSupport {
      * @see IOGroovyMethods#filterLine(java.io.Reader, java.io.Writer, groovy.lang.Closure)
      * @since 1.6.8
      */
-    public static void filterLine(URL self, Writer writer, String charset, @ClosureParams(value=SimpleType.class, options="java.lang.String") Closure predicate) throws IOException {
+    public static void filterLine(URL self, Writer writer, String charset, @ClosureParams(value = SimpleType.class, options = "java.lang.String") Closure predicate) throws IOException {
         IOGroovyMethods.filterLine(newReader(self, charset), writer, predicate);
     }
 
diff --git a/src/main/java/org/codehaus/groovy/runtime/ReverseListIterator.java b/src/main/java/org/codehaus/groovy/runtime/ReverseListIterator.java
index 4313397..6f312b8 100644
--- a/src/main/java/org/codehaus/groovy/runtime/ReverseListIterator.java
+++ b/src/main/java/org/codehaus/groovy/runtime/ReverseListIterator.java
@@ -28,8 +28,6 @@ import java.util.ListIterator;
  * {@link Iterator} that efficiently traverses the <code>List</code> in
  * reverse. The fail-fast semantics of this iterator are the same as the
  * semantics of the underlying <code>ListIterator</code>.
- *
- * @author Mike Dillon
  */
 public class ReverseListIterator<T> implements Iterator<T> {
     private final ListIterator<T> delegate;
diff --git a/src/main/java/org/codehaus/groovy/runtime/ScriptBytecodeAdapter.java b/src/main/java/org/codehaus/groovy/runtime/ScriptBytecodeAdapter.java
index 9c7909a..d1c83d8 100644
--- a/src/main/java/org/codehaus/groovy/runtime/ScriptBytecodeAdapter.java
+++ b/src/main/java/org/codehaus/groovy/runtime/ScriptBytecodeAdapter.java
@@ -48,8 +48,6 @@ import java.util.regex.Pattern;
 
 /**
  * A static helper class to interface bytecode and runtime
- *
- * @author Jochen Theodorou
  */
 public class ScriptBytecodeAdapter {
     public static final Object[] EMPTY_ARGS = {};
diff --git a/src/main/java/org/codehaus/groovy/runtime/StackTraceUtils.java b/src/main/java/org/codehaus/groovy/runtime/StackTraceUtils.java
index fc34ccd..65b53a1 100644
--- a/src/main/java/org/codehaus/groovy/runtime/StackTraceUtils.java
+++ b/src/main/java/org/codehaus/groovy/runtime/StackTraceUtils.java
@@ -1,195 +1,194 @@
-/*
- *  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.Closure;
-import org.apache.groovy.util.SystemUtil;
-import org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation;
-
-import java.io.PrintWriter;
-import java.util.ArrayList;
-import java.util.Enumeration;
-import java.util.List;
-import java.util.logging.Level;
-import java.util.logging.LogManager;
-import java.util.logging.Logger;
-
-/**
- * Originally was grails.utils.GrailsUtils, removed some grails specific stuff.
- * Utility methods removing internal lines from stack traces
- *
- * @author Graeme Rocher
- * @since 1.5
- */
-public class StackTraceUtils {
-
-    public static final String STACK_LOG_NAME = "StackTrace";
-    private static final Logger STACK_LOG;
-    // set log to consume traces by default, end user can override later
-
-    static {
-        outer:
-        do {
-            Enumeration existingLogs = LogManager.getLogManager().getLoggerNames();
-            while (existingLogs.hasMoreElements()) {
-                if (STACK_LOG_NAME.equals(existingLogs.nextElement())) {
-                    STACK_LOG = Logger.getLogger(STACK_LOG_NAME);
-                    break outer;
-                }
-            }
-            STACK_LOG = Logger.getLogger(STACK_LOG_NAME);
-            STACK_LOG.setUseParentHandlers(false);
-        } while (false);
-    }
-
-    private static final String[] GROOVY_PACKAGES =
-            System.getProperty("groovy.sanitized.stacktraces",
-                    "groovy.," +
-                            "org.codehaus.groovy.," +
-                            "java.," +
-                            "javax.," +
-                            "sun.," +
-                            "gjdk.groovy.,"
-            ).split("(\\s|,)+");
-
-    private static final List<Closure> tests = new ArrayList<Closure>();
-
-    /**
-     * Adds a groovy.lang.Closure to test whether the stack trace
-     * element should be added or not.
-     * <p>
-     * The groovy.lang.Closure will be given the class name as parameter.
-     * the return value decides if the element will be added or not.
-     * <ul>
-     * <li><b>true</b>  - trace element will be added to the trace
-     * <li><b>false</b> - trace element will <b>not</b> be added to the trace
-     * <li><b>null</b>  - continue with next test
-     * </ul>
-     * Groovy truth will be used to determine true and false, null is excluded from
-     * defaulting to false here. If all tests have been executed and all of them skipped, then
-     * the groovy standard filtering will take place.
-     *
-     * @param test the testing groovy.lang.Closure
-     */
-    public static void addClassTest(Closure test) {
-        tests.add(test);
-    }
-
-    /**
-     * Remove all apparently groovy-internal trace entries from the exception instance
-     * <p>
-     * This modifies the original instance and returns it, it does not clone
-     *
-     * @param t the Throwable whose stack trace we want to sanitize
-     * @return The original Throwable but with a sanitized stack trace
-     */
-    public static Throwable sanitize(Throwable t) {
-        // Note that this getBoolean access may well be synced...
-        if (!SystemUtil.getBooleanSafe("groovy.full.stacktrace")) {
-            StackTraceElement[] trace = t.getStackTrace();
-            List<StackTraceElement> newTrace = new ArrayList<StackTraceElement>();
-            for (StackTraceElement stackTraceElement : trace) {
-                if (isApplicationClass(stackTraceElement.getClassName())) {
-                    newTrace.add(stackTraceElement);
-                }
-            }
-
-            // We don't want to lose anything, so log it
-            STACK_LOG.log(Level.WARNING, "Sanitizing stacktrace:", t);
-
-            StackTraceElement[] clean = new StackTraceElement[newTrace.size()];
-            newTrace.toArray(clean);
-            t.setStackTrace(clean);
-        }
-        return t;
-    }
-
-    public static void printSanitizedStackTrace(Throwable t, PrintWriter p) {
-        t = StackTraceUtils.sanitize(t);
-
-        StackTraceElement[] trace = t.getStackTrace();
-        for (StackTraceElement stackTraceElement : trace) {
-            p.println("at " + stackTraceElement.getClassName()
-                    + "(" + stackTraceElement.getMethodName()
-                    + ":" + stackTraceElement.getLineNumber() + ")");
-        }
-    }
-
-    public static void printSanitizedStackTrace(Throwable t) {
-        printSanitizedStackTrace(t, new PrintWriter(System.err));
-    }
-
-    public static boolean isApplicationClass(String className) {
-        for (Closure test : tests) {
-            Object result = test.call(className);
-            if (result != null) {
-                return DefaultTypeTransformation.castToBoolean(result);
-            }
-        }
-
-        for (String groovyPackage : GROOVY_PACKAGES) {
-            if (className.startsWith(groovyPackage)) {
-                return false;
-            }
-        }
-        return true;
-    }
-
-    /**
-     * Extracts the root cause of the exception, no matter how nested it is
-     *
-     * @param t a Throwable
-     * @return The deepest cause of the exception that can be found
-     */
-    public static Throwable extractRootCause(Throwable t) {
-        Throwable result = t;
-        while (result.getCause() != null) {
-            result = result.getCause();
-        }
-        return result;
-    }
-
-    /**
-     * Get the root cause of an exception and sanitize it for display to the user
-     * <p>
-     * This will MODIFY the stacktrace of the root cause exception object and return it
-     *
-     * @param t a throwable
-     * @return The root cause exception instance, with its stace trace modified to filter out groovy runtime classes
-     */
-    public static Throwable sanitizeRootCause(Throwable t) {
-        return StackTraceUtils.sanitize(StackTraceUtils.extractRootCause(t));
-    }
-
-    /**
-     * Sanitize the exception and ALL nested causes
-     * <p>
-     * This will MODIFY the stacktrace of the exception instance and all its causes irreversibly
-     *
-     * @param t a throwable
-     * @return The root cause exception instances, with stack trace modified to filter out groovy runtime classes
-     */
-    public static Throwable deepSanitize(Throwable t) {
-        Throwable current = t;
-        while (current.getCause() != null) {
-            current = StackTraceUtils.sanitize(current.getCause());
-        }
-        return StackTraceUtils.sanitize(t);
-    }
-}
+/*
+ *  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.Closure;
+import org.apache.groovy.util.SystemUtil;
+import org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation;
+
+import java.io.PrintWriter;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.LogManager;
+import java.util.logging.Logger;
+
+/**
+ * Originally was grails.utils.GrailsUtils, removed some grails specific stuff.
+ * Utility methods removing internal lines from stack traces
+ *
+ * @since 1.5
+ */
+public class StackTraceUtils {
+
+    public static final String STACK_LOG_NAME = "StackTrace";
+    private static final Logger STACK_LOG;
+    // set log to consume traces by default, end user can override later
+
+    static {
+        outer:
+        do {
+            Enumeration existingLogs = LogManager.getLogManager().getLoggerNames();
+            while (existingLogs.hasMoreElements()) {
+                if (STACK_LOG_NAME.equals(existingLogs.nextElement())) {
+                    STACK_LOG = Logger.getLogger(STACK_LOG_NAME);
+                    break outer;
+                }
+            }
+            STACK_LOG = Logger.getLogger(STACK_LOG_NAME);
+            STACK_LOG.setUseParentHandlers(false);
+        } while (false);
+    }
+
+    private static final String[] GROOVY_PACKAGES =
+            System.getProperty("groovy.sanitized.stacktraces",
+                    "groovy.," +
+                            "org.codehaus.groovy.," +
+                            "java.," +
+                            "javax.," +
+                            "sun.," +
+                            "gjdk.groovy.,"
+            ).split("(\\s|,)+");
+
+    private static final List<Closure> tests = new ArrayList<Closure>();
+
+    /**
+     * Adds a groovy.lang.Closure to test whether the stack trace
+     * element should be added or not.
+     * <p>
+     * The groovy.lang.Closure will be given the class name as parameter.
+     * the return value decides if the element will be added or not.
+     * <ul>
+     * <li><b>true</b>  - trace element will be added to the trace
+     * <li><b>false</b> - trace element will <b>not</b> be added to the trace
+     * <li><b>null</b>  - continue with next test
+     * </ul>
+     * Groovy truth will be used to determine true and false, null is excluded from
+     * defaulting to false here. If all tests have been executed and all of them skipped, then
+     * the groovy standard filtering will take place.
+     *
+     * @param test the testing groovy.lang.Closure
+     */
+    public static void addClassTest(Closure test) {
+        tests.add(test);
+    }
+
+    /**
+     * Remove all apparently groovy-internal trace entries from the exception instance
+     * <p>
+     * This modifies the original instance and returns it, it does not clone
+     *
+     * @param t the Throwable whose stack trace we want to sanitize
+     * @return The original Throwable but with a sanitized stack trace
+     */
+    public static Throwable sanitize(Throwable t) {
+        // Note that this getBoolean access may well be synced...
+        if (!SystemUtil.getBooleanSafe("groovy.full.stacktrace")) {
+            StackTraceElement[] trace = t.getStackTrace();
+            List<StackTraceElement> newTrace = new ArrayList<StackTraceElement>();
+            for (StackTraceElement stackTraceElement : trace) {
+                if (isApplicationClass(stackTraceElement.getClassName())) {
+                    newTrace.add(stackTraceElement);
+                }
+            }
+
+            // We don't want to lose anything, so log it
+            STACK_LOG.log(Level.WARNING, "Sanitizing stacktrace:", t);
+
+            StackTraceElement[] clean = new StackTraceElement[newTrace.size()];
+            newTrace.toArray(clean);
+            t.setStackTrace(clean);
+        }
+        return t;
+    }
+
+    public static void printSanitizedStackTrace(Throwable t, PrintWriter p) {
+        t = StackTraceUtils.sanitize(t);
+
+        StackTraceElement[] trace = t.getStackTrace();
+        for (StackTraceElement stackTraceElement : trace) {
+            p.println("at " + stackTraceElement.getClassName()
+                    + "(" + stackTraceElement.getMethodName()
+                    + ":" + stackTraceElement.getLineNumber() + ")");
+        }
+    }
+
+    public static void printSanitizedStackTrace(Throwable t) {
+        printSanitizedStackTrace(t, new PrintWriter(System.err));
+    }
+
+    public static boolean isApplicationClass(String className) {
+        for (Closure test : tests) {
+            Object result = test.call(className);
+            if (result != null) {
+                return DefaultTypeTransformation.castToBoolean(result);
+            }
+        }
+
+        for (String groovyPackage : GROOVY_PACKAGES) {
+            if (className.startsWith(groovyPackage)) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    /**
+     * Extracts the root cause of the exception, no matter how nested it is
+     *
+     * @param t a Throwable
+     * @return The deepest cause of the exception that can be found
+     */
+    public static Throwable extractRootCause(Throwable t) {
+        Throwable result = t;
+        while (result.getCause() != null) {
+            result = result.getCause();
+        }
+        return result;
+    }
+
+    /**
+     * Get the root cause of an exception and sanitize it for display to the user
+     * <p>
+     * This will MODIFY the stacktrace of the root cause exception object and return it
+     *
+     * @param t a throwable
+     * @return The root cause exception instance, with its stace trace modified to filter out groovy runtime classes
+     */
+    public static Throwable sanitizeRootCause(Throwable t) {
+        return StackTraceUtils.sanitize(StackTraceUtils.extractRootCause(t));
+    }
+
+    /**
+     * Sanitize the exception and ALL nested causes
+     * <p>
+     * This will MODIFY the stacktrace of the exception instance and all its causes irreversibly
+     *
+     * @param t a throwable
+     * @return The root cause exception instances, with stack trace modified to filter out groovy runtime classes
+     */
+    public static Throwable deepSanitize(Throwable t) {
+        Throwable current = t;
+        while (current.getCause() != null) {
+            current = StackTraceUtils.sanitize(current.getCause());
+        }
+        return StackTraceUtils.sanitize(t);
+    }
+}
diff --git a/src/main/java/org/codehaus/groovy/runtime/StringBufferWriter.java b/src/main/java/org/codehaus/groovy/runtime/StringBufferWriter.java
index 5bdcbe0..d25398e 100644
--- a/src/main/java/org/codehaus/groovy/runtime/StringBufferWriter.java
+++ b/src/main/java/org/codehaus/groovy/runtime/StringBufferWriter.java
@@ -25,8 +25,6 @@ import java.io.Writer;
  * This class codes around a silly limitation of StringWriter which doesn't allow a StringBuffer
  * to be passed in as a constructor for some bizarre reason.
  * So we replicate the behaviour of StringWriter here but allow a StringBuffer to be passed in.
- * 
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public class StringBufferWriter extends Writer {
 
diff --git a/src/main/java/org/codehaus/groovy/runtime/callsite/BooleanClosureWrapper.java b/src/main/java/org/codehaus/groovy/runtime/callsite/BooleanClosureWrapper.java
index 28d0f0a..68abc48 100644
--- a/src/main/java/org/codehaus/groovy/runtime/callsite/BooleanClosureWrapper.java
+++ b/src/main/java/org/codehaus/groovy/runtime/callsite/BooleanClosureWrapper.java
@@ -32,7 +32,6 @@ import java.util.Map.Entry;
  * in {@link org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation#castToBoolean(Object)}. The purpose of
  * this class is to avoid the slow "asBoolean" call in that method.
  * {@link BooleanReturningMethodInvoker} is used for caching.
- * @author <a href="mailto:blackdrag@gmx.org">Jochen "blackdrag" Theodorou</a>
  *
  */
 public class BooleanClosureWrapper {
diff --git a/src/main/java/org/codehaus/groovy/runtime/callsite/BooleanReturningMethodInvoker.java b/src/main/java/org/codehaus/groovy/runtime/callsite/BooleanReturningMethodInvoker.java
index 428b8ce..7865f05 100644
--- a/src/main/java/org/codehaus/groovy/runtime/callsite/BooleanReturningMethodInvoker.java
+++ b/src/main/java/org/codehaus/groovy/runtime/callsite/BooleanReturningMethodInvoker.java
@@ -31,8 +31,6 @@ import org.apache.groovy.internal.util.UncheckedThrow;
  * 
  * The nature of this class allows a per instance caching instead of a per class
  * caching like the normal {@link CallSiteArray} logic.
- * 
- * @author <a href="mailto:blackdrag@gmx.org">Jochen "blackdrag" Theodorou</a>
  */
 public class BooleanReturningMethodInvoker {
     private final CallSiteArray csa;
diff --git a/src/main/java/org/codehaus/groovy/runtime/callsite/ConstructorMetaMethodSite.java b/src/main/java/org/codehaus/groovy/runtime/callsite/ConstructorMetaMethodSite.java
index aa6e7f5..0b98ca8 100644
--- a/src/main/java/org/codehaus/groovy/runtime/callsite/ConstructorMetaMethodSite.java
+++ b/src/main/java/org/codehaus/groovy/runtime/callsite/ConstructorMetaMethodSite.java
@@ -28,8 +28,6 @@ import org.codehaus.groovy.runtime.ScriptBytecodeAdapter;
  * Call site for invoking static methods
 *   meta class  - cached
 *   method - not cached
-*
-* @author Alex Tkachman
 */
 public class ConstructorMetaMethodSite extends MetaMethodSite {
 
diff --git a/src/main/java/org/codehaus/groovy/runtime/callsite/MetaClassConstructorSite.java b/src/main/java/org/codehaus/groovy/runtime/callsite/MetaClassConstructorSite.java
index edbe3b9..fd1498a 100644
--- a/src/main/java/org/codehaus/groovy/runtime/callsite/MetaClassConstructorSite.java
+++ b/src/main/java/org/codehaus/groovy/runtime/callsite/MetaClassConstructorSite.java
@@ -27,8 +27,6 @@ import org.codehaus.groovy.runtime.ScriptBytecodeAdapter;
  * Call site for constructor
  *   meta class - cached
  *   method - not cached
- *
- * @author Alex Tkachman
 */
 public class MetaClassConstructorSite extends MetaClassSite {
 
diff --git a/src/main/java/org/codehaus/groovy/runtime/callsite/MetaClassSite.java b/src/main/java/org/codehaus/groovy/runtime/callsite/MetaClassSite.java
index 50f09de..f9fb77b 100644
--- a/src/main/java/org/codehaus/groovy/runtime/callsite/MetaClassSite.java
+++ b/src/main/java/org/codehaus/groovy/runtime/callsite/MetaClassSite.java
@@ -22,8 +22,6 @@ import groovy.lang.MetaClass;
 
 /**
  * Call site which holds reference to meta class
- *
- * @author Alex Tkachman
 */
 public abstract class MetaClassSite extends AbstractCallSite {
     protected final MetaClass metaClass;
diff --git a/src/main/java/org/codehaus/groovy/runtime/callsite/MetaMethodSite.java b/src/main/java/org/codehaus/groovy/runtime/callsite/MetaMethodSite.java
index dc15145..12ef33d 100644
--- a/src/main/java/org/codehaus/groovy/runtime/callsite/MetaMethodSite.java
+++ b/src/main/java/org/codehaus/groovy/runtime/callsite/MetaMethodSite.java
@@ -23,8 +23,6 @@ import groovy.lang.MetaMethod;
 
 /**
  * Call site which caches meta method
- * 
- * @author Alex Tkachman
  */
 public abstract class MetaMethodSite extends MetaClassSite {
     final MetaMethod metaMethod;
diff --git a/src/main/java/org/codehaus/groovy/runtime/callsite/PogoInterceptableSite.java b/src/main/java/org/codehaus/groovy/runtime/callsite/PogoInterceptableSite.java
index 7f0f251..77ffab9 100644
--- a/src/main/java/org/codehaus/groovy/runtime/callsite/PogoInterceptableSite.java
+++ b/src/main/java/org/codehaus/groovy/runtime/callsite/PogoInterceptableSite.java
@@ -25,8 +25,6 @@ import org.codehaus.groovy.runtime.ScriptBytecodeAdapter;
 
 /**
  * Call site for GroovyInterceptable
- *
- * @author Alex Tkachman
 */
 public class PogoInterceptableSite extends AbstractCallSite {
     public PogoInterceptableSite(CallSite site) {
diff --git a/src/main/java/org/codehaus/groovy/runtime/callsite/PogoMetaClassSite.java b/src/main/java/org/codehaus/groovy/runtime/callsite/PogoMetaClassSite.java
index 1e7c9ad..4b16fcb 100644
--- a/src/main/java/org/codehaus/groovy/runtime/callsite/PogoMetaClassSite.java
+++ b/src/main/java/org/codehaus/groovy/runtime/callsite/PogoMetaClassSite.java
@@ -25,10 +25,6 @@ import groovy.lang.MissingMethodException;
 import org.codehaus.groovy.runtime.ScriptBytecodeAdapter;
 import org.codehaus.groovy.runtime.metaclass.MissingMethodExecutionFailed;
 
-/**
- *
- * @author Alex Tkachman
- */
 public class PogoMetaClassSite extends MetaClassSite {
     public PogoMetaClassSite(CallSite site, MetaClass metaClass) {
         super(site, metaClass);
diff --git a/src/main/java/org/codehaus/groovy/runtime/callsite/PojoMetaClassSite.java b/src/main/java/org/codehaus/groovy/runtime/callsite/PojoMetaClassSite.java
index 9f96b7d..c1fae7f 100644
--- a/src/main/java/org/codehaus/groovy/runtime/callsite/PojoMetaClassSite.java
+++ b/src/main/java/org/codehaus/groovy/runtime/callsite/PojoMetaClassSite.java
@@ -27,8 +27,6 @@ import org.codehaus.groovy.runtime.ScriptBytecodeAdapter;
  * POJO call site
  *   meta class - cached
  *   method - not cached
- *
- * @author Alex Tkachman
 */
 public class PojoMetaClassSite extends MetaClassSite{
     private final ClassInfo classInfo;
diff --git a/src/main/java/org/codehaus/groovy/runtime/callsite/PojoMetaMethodSite.java b/src/main/java/org/codehaus/groovy/runtime/callsite/PojoMetaMethodSite.java
index fb52e1f..ae06074 100644
--- a/src/main/java/org/codehaus/groovy/runtime/callsite/PojoMetaMethodSite.java
+++ b/src/main/java/org/codehaus/groovy/runtime/callsite/PojoMetaMethodSite.java
@@ -33,8 +33,6 @@ import java.lang.reflect.Method;
  * POJO call site
  *   meta class - cached
  *   method - cached
- *
- * @author Alex Tkachman
 */
 public class PojoMetaMethodSite extends PlainObjectMetaMethodSite {
 
diff --git a/src/main/java/org/codehaus/groovy/runtime/callsite/StaticMetaClassSite.java b/src/main/java/org/codehaus/groovy/runtime/callsite/StaticMetaClassSite.java
index 8399796..a97fe92 100644
--- a/src/main/java/org/codehaus/groovy/runtime/callsite/StaticMetaClassSite.java
+++ b/src/main/java/org/codehaus/groovy/runtime/callsite/StaticMetaClassSite.java
@@ -27,8 +27,6 @@ import org.codehaus.groovy.runtime.ScriptBytecodeAdapter;
  * Call site for invoking static methods
  *   meta class  - cached
  *   method - not cached
- *
- * @author Alex Tkachman
  */
 public class StaticMetaClassSite extends MetaClassSite {
 
diff --git a/src/main/java/org/codehaus/groovy/runtime/callsite/StaticMetaMethodSite.java b/src/main/java/org/codehaus/groovy/runtime/callsite/StaticMetaMethodSite.java
index cc49a55..2758478 100644
--- a/src/main/java/org/codehaus/groovy/runtime/callsite/StaticMetaMethodSite.java
+++ b/src/main/java/org/codehaus/groovy/runtime/callsite/StaticMetaMethodSite.java
@@ -29,8 +29,6 @@ import org.codehaus.groovy.runtime.ScriptBytecodeAdapter;
  * POJO call site
  *   meta class - cached
  *   method - cached
- *
- * @author Alex Tkachman
 */
 public class StaticMetaMethodSite extends MetaMethodSite {
     private final int version;
diff --git a/src/main/java/org/codehaus/groovy/runtime/m12n/ExtensionModule.java b/src/main/java/org/codehaus/groovy/runtime/m12n/ExtensionModule.java
index 0c30a3b..887ba30 100644
--- a/src/main/java/org/codehaus/groovy/runtime/m12n/ExtensionModule.java
+++ b/src/main/java/org/codehaus/groovy/runtime/m12n/ExtensionModule.java
@@ -28,8 +28,6 @@ import java.util.List;
  * existing classes.
  *
  * @since 2.0.0
- *
- * @author Cedric Champeau
  */
 public abstract class ExtensionModule {
     private final String name;
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 01161ce..77d53d3 100644
--- a/src/main/java/org/codehaus/groovy/runtime/m12n/ExtensionModuleRegistry.java
+++ b/src/main/java/org/codehaus/groovy/runtime/m12n/ExtensionModuleRegistry.java
@@ -29,7 +29,6 @@ import java.util.List;
  * In previous Groovy versions, such methods could only be defined in a single class called {@link org.codehaus.groovy.runtime.DefaultGroovyMethods}
  * for instance methods, and {@link org.codehaus.groovy.runtime.DefaultGroovyStaticMethods} for static methods.
  *
- * @author Cedric Champeau
  * @since 2.0.0
  */
 public class ExtensionModuleRegistry {
diff --git a/src/main/java/org/codehaus/groovy/runtime/m12n/MetaInfExtensionModule.java b/src/main/java/org/codehaus/groovy/runtime/m12n/MetaInfExtensionModule.java
index 10c1fd3..2891ee4 100644
--- a/src/main/java/org/codehaus/groovy/runtime/m12n/MetaInfExtensionModule.java
+++ b/src/main/java/org/codehaus/groovy/runtime/m12n/MetaInfExtensionModule.java
@@ -31,8 +31,6 @@ import java.util.logging.Logger;
  * metadata from META-INF.
  *
  * @since 2.0.0
- *
- * @author Cedric Champeau
  */
 public class MetaInfExtensionModule extends SimpleExtensionModule {
     private static final Logger LOG = Logger.getLogger(MetaInfExtensionModule.class.getName());
diff --git a/src/main/java/org/codehaus/groovy/runtime/m12n/PropertiesModuleFactory.java b/src/main/java/org/codehaus/groovy/runtime/m12n/PropertiesModuleFactory.java
index 6946db7..e59f53b 100644
--- a/src/main/java/org/codehaus/groovy/runtime/m12n/PropertiesModuleFactory.java
+++ b/src/main/java/org/codehaus/groovy/runtime/m12n/PropertiesModuleFactory.java
@@ -25,8 +25,6 @@ import java.util.Properties;
  * using properties.
  *
  * @since 2.0.0
- *
- * @author Cedric Champeau
  */
 public abstract class PropertiesModuleFactory {
     public static final String MODULE_NAME_KEY = "moduleName";
diff --git a/src/main/java/org/codehaus/groovy/runtime/m12n/SimpleExtensionModule.java b/src/main/java/org/codehaus/groovy/runtime/m12n/SimpleExtensionModule.java
index af5df54..4ed4e59 100644
--- a/src/main/java/org/codehaus/groovy/runtime/m12n/SimpleExtensionModule.java
+++ b/src/main/java/org/codehaus/groovy/runtime/m12n/SimpleExtensionModule.java
@@ -81,7 +81,6 @@ import java.util.logging.Logger;
  * }
  * </pre>
  *
- * @author Cedric Champeau
  * @since 2.0.0
  */
 public abstract class SimpleExtensionModule extends ExtensionModule {
diff --git a/src/main/java/org/codehaus/groovy/runtime/metaclass/ClosureMetaClass.java b/src/main/java/org/codehaus/groovy/runtime/metaclass/ClosureMetaClass.java
index 1a59c0b..bdf8c8d 100644
--- a/src/main/java/org/codehaus/groovy/runtime/metaclass/ClosureMetaClass.java
+++ b/src/main/java/org/codehaus/groovy/runtime/metaclass/ClosureMetaClass.java
@@ -1,713 +1,712 @@
-/*
- *  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.metaclass;
-
-import groovy.lang.Closure;
-import groovy.lang.ExpandoMetaClass;
-import groovy.lang.GroovyObject;
-import groovy.lang.GroovyRuntimeException;
-import groovy.lang.MetaBeanProperty;
-import groovy.lang.MetaClass;
-import groovy.lang.MetaClassImpl;
-import groovy.lang.MetaClassRegistry;
-import groovy.lang.MetaMethod;
-import groovy.lang.MetaProperty;
-import groovy.lang.MissingMethodException;
-import groovy.lang.MissingPropertyException;
-import groovy.lang.ProxyMetaClass;
-import org.codehaus.groovy.reflection.CachedClass;
-import org.codehaus.groovy.reflection.CachedField;
-import org.codehaus.groovy.reflection.CachedMethod;
-import org.codehaus.groovy.reflection.ParameterTypes;
-import org.codehaus.groovy.runtime.InvokerHelper;
-import org.codehaus.groovy.runtime.MetaClassHelper;
-import org.codehaus.groovy.runtime.callsite.CallSite;
-import org.codehaus.groovy.runtime.callsite.PogoMetaClassSite;
-import org.codehaus.groovy.runtime.wrappers.Wrapper;
-import org.codehaus.groovy.util.FastArray;
-
-import java.beans.PropertyDescriptor;
-import java.lang.reflect.Constructor;
-import java.lang.reflect.Method;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Map;
-
-/**
- * A meta class for closures generated by the Groovy compiler. These classes
- * have special characteristics this MetaClass uses. One of these is that a
- * generated Closure has only additional doCall methods, all other methods
- * are in the Closure class as well. To use this fact this MetaClass uses
- * a MetaClass for Closure as static field And delegates calls to this
- * MetaClass if needed. This allows a lean implementation for this MetaClass.
- * Multiple generated closures will then use the same MetaClass for Closure.
- * For static dispatching this class uses the MetaClass of Class, again
- * all instances of this class will share that MetaClass. The Class MetaClass
- * is initialized lazy, because most operations do not need this MetaClass.
- * <p>
- * The Closure and Class MetaClasses are not replaceable.
- * <p>
- * This MetaClass is for internal usage only!
- *
- * @author Jochen Theodorou
- * @since 1.5
- */
-public final class ClosureMetaClass extends MetaClassImpl {
-    private volatile boolean initialized;
-    private final FastArray closureMethods = new FastArray(3);
-    private Map<String, CachedField> attributes = new HashMap<String, CachedField>();
-    private MethodChooser chooser;
-    private volatile boolean attributeInitDone = false;
-
-    private static MetaClassImpl CLOSURE_METACLASS;
-    private static MetaClassImpl classMetaClass;
-    private static final Object[] EMPTY_ARGUMENTS = {};
-    private static final String CLOSURE_CALL_METHOD = "call";
-    private static final String CLOSURE_DO_CALL_METHOD = "doCall";
-
-    static {
-        resetCachedMetaClasses();
-    }
-
-    public static void resetCachedMetaClasses() {
-        MetaClassImpl temp = new MetaClassImpl(Closure.class);
-        temp.initialize();
-        synchronized (ClosureMetaClass.class) {
-            CLOSURE_METACLASS = temp;
-        }
-        if (classMetaClass!=null) {
-            temp = new MetaClassImpl(Class.class);
-            temp.initialize();
-            synchronized (ClosureMetaClass.class) {
-                classMetaClass = temp;
-            }
-        }
-    }
-
-    private static synchronized MetaClass getStaticMetaClass() {
-        if (classMetaClass == null) {
-            classMetaClass = new MetaClassImpl(Class.class);
-            classMetaClass.initialize();
-        }
-        return classMetaClass;
-    }
-
-    private interface MethodChooser {
-        Object chooseMethod(Class[] arguments, boolean coerce);
-    }
-
-    private static class StandardClosureChooser implements MethodChooser {
-        private final MetaMethod doCall0;
-        private final MetaMethod doCall1;
-
-        StandardClosureChooser(MetaMethod m0, MetaMethod m1) {
-            doCall0 = m0;
-            doCall1 = m1;
-        }
-
-        public Object chooseMethod(Class[] arguments, boolean coerce) {
-            if (arguments.length == 0) return doCall0;
-            if (arguments.length == 1) return doCall1;
-            return null;
-        }
-    }
-
-    private static class NormalMethodChooser implements MethodChooser {
-        private final FastArray methods;
-        final Class theClass;
-
-        NormalMethodChooser(Class theClass, FastArray methods) {
-            this.theClass = theClass;
-            this.methods = methods;
-        }
-
-        public Object chooseMethod(Class[] arguments, boolean coerce) {
-            if (arguments.length == 0) {
-                return MetaClassHelper.chooseEmptyMethodParams(methods);
-            } else if (arguments.length == 1 && arguments[0] == null) {
-                return MetaClassHelper.chooseMostGeneralMethodWith1NullParam(methods);
-            } else {
-                List matchingMethods = new ArrayList();
-                final Object[] data = methods.getArray();
-                for (int i = 0, len = methods.size(); i != len; ++i) {
-                    Object method = data[i];
-
-                    // making this false helps find matches
-                    if (((ParameterTypes) method).isValidMethod(arguments)) {
-                        matchingMethods.add(method);
-                    }
-                }
-
-                int size = matchingMethods.size();
-                if (0 == size) {
-                    return null;
-                } else if (1 == size) {
-                    return matchingMethods.get(0);
-                }
-
-                return chooseMostSpecificParams(CLOSURE_DO_CALL_METHOD, matchingMethods, arguments);
-            }
-        }
-
-        private Object chooseMostSpecificParams(String name, List matchingMethods, Class[] arguments) {
-            return doChooseMostSpecificParams(theClass.getName(), name, matchingMethods, arguments, true);
-        }
-    }
-
-    public ClosureMetaClass(MetaClassRegistry registry, Class theClass) {
-        super(registry, theClass);
-    }
-
-    public MetaProperty getMetaProperty(String name) {
-        return CLOSURE_METACLASS.getMetaProperty(name);
-    }
-
-    private static void unwrap(Object[] arguments) {
-        for (int i = 0; i != arguments.length; i++) {
-            if (arguments[i] instanceof Wrapper) {
-                arguments[i] = ((Wrapper) arguments[i]).unwrap();
-            }
-        }
-    }
-
-    private MetaMethod pickClosureMethod(Class[] argClasses) {
-        Object answer = chooser.chooseMethod(argClasses, false);
-        return (MetaMethod) answer;
-    }
-
-    private MetaMethod getDelegateMethod(Closure closure, Object delegate, String methodName, Class[] argClasses) {
-        if (delegate == closure || delegate == null) return null;
-        if (delegate instanceof Class) {
-            for (Class superClass = (Class) delegate;
-                 superClass != Object.class && superClass != null;
-                 superClass = superClass.getSuperclass())
-            {
-                MetaClass mc = registry.getMetaClass(superClass);
-                MetaMethod method = mc.getStaticMetaMethod(methodName, argClasses);
-                if (method != null) return method;
-            }
-            return null;
-        } else {
-            MetaClass delegateMetaClass = lookupObjectMetaClass(delegate);
-            MetaMethod method = delegateMetaClass.pickMethod(methodName, argClasses);
-            if (method != null) {
-                return method;
-            }
-
-            if (delegateMetaClass instanceof ExpandoMetaClass) {
-                method = ((ExpandoMetaClass) delegateMetaClass).findMixinMethod(methodName, argClasses);
-
-                if (method != null) {
-                    onMixinMethodFound(method);
-                    return method;
-                }
-            }
-
-            if (delegateMetaClass instanceof MetaClassImpl) {
-                method = MetaClassImpl.findMethodInClassHierarchy(getTheClass(), methodName, argClasses, this);
-                if (method != null) {
-                    onSuperMethodFoundInHierarchy(method);
-                    return method;
-                }
-            }
-
-            return method;
-        }
-    }
-
-    public Object invokeMethod(Class sender, Object object, String methodName, Object[] originalArguments, boolean isCallToSuper, boolean fromInsideClass) {
-        checkInitalised();
-        if (object == null) {
-            throw new NullPointerException("Cannot invoke method: " + methodName + " on null object");
-        }
-
-        final Object[] arguments = makeArguments(originalArguments, methodName);
-        final Class[] argClasses = MetaClassHelper.convertToTypeArray(arguments);
-        unwrap(arguments);
-
-        MetaMethod method = null;
-        final Closure closure = (Closure) object;
-
-        if (CLOSURE_DO_CALL_METHOD.equals(methodName) || CLOSURE_CALL_METHOD.equals(methodName)) {
-            method = pickClosureMethod(argClasses);
-            if (method == null && arguments.length == 1 && arguments[0] instanceof List) {
-                Object[] newArguments = ((List) arguments[0]).toArray();
-                Class[] newArgClasses = MetaClassHelper.convertToTypeArray(newArguments);
-                method = createTransformMetaMethod(pickClosureMethod(newArgClasses));
-            }
-            if (method == null) throw new MissingMethodException(methodName, theClass, arguments, false);
-        }
-
-        boolean shouldDefer = closure.getResolveStrategy() == Closure.DELEGATE_ONLY && isInternalMethod(methodName);
-        if (method == null && !shouldDefer) {
-            method = CLOSURE_METACLASS.pickMethod(methodName, argClasses);
-        }
-
-        if (method != null) return method.doMethodInvoke(object, arguments);
-
-        MissingMethodException last = null;
-        Object callObject = object;
-        final Object owner = closure.getOwner();
-        final Object delegate = closure.getDelegate();
-        final Object thisObject = closure.getThisObject();
-        final int resolveStrategy = closure.getResolveStrategy();
-        boolean invokeOnDelegate = false;
-        boolean invokeOnOwner = false;
-        boolean ownerFirst = true;
-
-        switch (resolveStrategy) {
-            case Closure.TO_SELF:
-                break;
-            case Closure.DELEGATE_ONLY:
-                method = getDelegateMethod(closure, delegate, methodName, argClasses);
-                callObject = delegate;
-                if (method == null) {
-                    invokeOnDelegate = delegate != closure && (delegate instanceof GroovyObject);
-                }
-                break;
-            case Closure.OWNER_ONLY:
-                method = getDelegateMethod(closure, owner, methodName, argClasses);
-                callObject = owner;
-                if (method == null) {
-                    invokeOnOwner = owner != closure && (owner instanceof GroovyObject);
-                }
-
-                break;
-            case Closure.DELEGATE_FIRST:
-                method = getDelegateMethod(closure, delegate, methodName, argClasses);
-                callObject = delegate;
-                if (method == null) {
-                    method = getDelegateMethod(closure, owner, methodName, argClasses);
-                    callObject = owner;
-                }
-                if (method == null) {
-                    invokeOnDelegate = delegate != closure && (delegate instanceof GroovyObject);
-                    invokeOnOwner = owner != closure && (owner instanceof GroovyObject);
-                    ownerFirst = false;
-                }
-                break;
-            default: // owner first
-                // owner first means we start with the outer most owner that is not a generated closure
-                // this owner is equal to the this object, so we check that one first.
-                method = getDelegateMethod(closure, thisObject, methodName, argClasses);
-                callObject = thisObject;
-                if (method == null) {
-                    // try finding a delegate that has that method... we start from
-                    // outside building a stack and try each delegate
-                    LinkedList list = new LinkedList();
-                    for (Object current = closure; current != thisObject;) {
-                        if (!(current instanceof Closure)) break;
-                        Closure currentClosure = (Closure) current;
-                        if (currentClosure.getDelegate() != null) list.add(current);
-                        current = currentClosure.getOwner();
-                    }
-
-                    while (!list.isEmpty() && method == null) {
-                        Closure closureWithDelegate = (Closure) list.removeLast();
-                        Object currentDelegate = closureWithDelegate.getDelegate();
-                        method = getDelegateMethod(closureWithDelegate, currentDelegate, methodName, argClasses);
-                        callObject = currentDelegate;
-                    }
-                }
-                if (method == null) {
-                    invokeOnDelegate = delegate != closure && (delegate instanceof GroovyObject);
-                    invokeOnOwner = owner != closure && (owner instanceof GroovyObject);
-                }
-        }
-        if (method == null && (invokeOnOwner || invokeOnDelegate)) {
-            try {
-                if (ownerFirst) {
-                    return invokeOnDelegationObjects(invokeOnOwner, owner, invokeOnDelegate, delegate, methodName, arguments);
-                } else {
-                    return invokeOnDelegationObjects(invokeOnDelegate, delegate, invokeOnOwner, owner, methodName, arguments);
-                }
-            } catch (MissingMethodException mme) {
-                last = mme;
-            }
-        }
-
-        if (method != null) {
-            MetaClass metaClass = registry.getMetaClass(callObject.getClass());
-            if (metaClass instanceof ProxyMetaClass) {
-                return metaClass.invokeMethod(callObject, methodName, arguments);
-            } else {
-                return method.doMethodInvoke(callObject, arguments);
-            }
-        } else {
-            // if no method was found, try to find a closure defined as a field of the class and run it
-            Object value = null;
-            try {
-                value = this.getProperty(object, methodName);
-            } catch (MissingPropertyException mpe) {
-                // ignore
-            }
-            if (value instanceof Closure) {  // This test ensures that value != this If you ever change this ensure that value != this
-                Closure cl = (Closure) value;
-                MetaClass delegateMetaClass = cl.getMetaClass();
-                return delegateMetaClass.invokeMethod(cl.getClass(), closure, CLOSURE_DO_CALL_METHOD, originalArguments, false, fromInsideClass);
-            }
-        }
-
-        if (last != null) throw last;
-        throw new MissingMethodException(methodName, theClass, arguments, false);
-    }
-
-    private static boolean isInternalMethod(String methodName) {
-        return methodName.equals("curry") || methodName.equals("ncurry") || methodName.equals("rcurry") ||
-                methodName.equals("leftShift") || methodName.equals("rightShift");
-    }
-
-    private static Object[] makeArguments(Object[] arguments, String methodName) {
-        if (arguments == null) return EMPTY_ARGUMENTS;
-        return arguments;
-    }
-
-    private static Throwable unwrap(GroovyRuntimeException gre) {
-        Throwable th = gre;
-        if (th.getCause() != null && th.getCause() != gre) th = th.getCause();
-        if (th != gre && (th instanceof GroovyRuntimeException)) return unwrap((GroovyRuntimeException) th);
-        return th;
-    }
-
-    private static Object invokeOnDelegationObjects(
-            boolean invoke1, Object o1,
-            boolean invoke2, Object o2,
-            String methodName, Object[] args) {
-        MissingMethodException first = null;
-        if (invoke1) {
-            GroovyObject go = (GroovyObject) o1;
-            try {
-                return go.invokeMethod(methodName, args);
-            } catch (MissingMethodException mme) {
-                first = mme;
-            } catch (GroovyRuntimeException gre) {
-                Throwable th = unwrap(gre);
-                if ((th instanceof MissingMethodException)
-                        && (methodName.equals(((MissingMethodException) th).getMethod()))) {
-                    first = (MissingMethodException) th;
-                } else {
-                    throw gre;
-                }
-            }
-        }
-        if (invoke2 && (!invoke1 || o1 != o2)) {
-            GroovyObject go = (GroovyObject) o2;
-            try {
-                return go.invokeMethod(methodName, args);
-            } catch (MissingMethodException mme) {
-                // patch needed here too, but we need a test case to trip it first
-                if (first == null) first = mme;
-            } catch (GroovyRuntimeException gre) {
-                Throwable th = unwrap(gre);
-                if (th instanceof MissingMethodException) {
-                    first = (MissingMethodException) th;
-                } else {
-                    throw gre;
-                }
-            }
-        }
-        throw first;
-    }
-
-    private synchronized void initAttributes() {
-        if (!attributes.isEmpty()) return;
-        attributes.put("!", null); // just a dummy for later
-        CachedField[] fieldArray = theCachedClass.getFields();
-        for (CachedField aFieldArray : fieldArray) {
-            attributes.put(aFieldArray.getName(), aFieldArray);
-        }
-        attributeInitDone = !attributes.isEmpty();
-    }
-
-    public synchronized void initialize() {
-        if (!isInitialized()) {
-            CachedMethod[] methodArray = theCachedClass.getMethods();
-            synchronized (theCachedClass) {
-                for (final CachedMethod cachedMethod : methodArray) {
-                    if (!cachedMethod.getName().equals(CLOSURE_DO_CALL_METHOD)) continue;
-                    closureMethods.add(cachedMethod);
-                }
-            }
-            assignMethodChooser();
-
-            initialized = true;
-        }
-    }
-
-    private void assignMethodChooser() {
-        if (closureMethods.size() == 1) {
-            final MetaMethod doCall = (MetaMethod) closureMethods.get(0);
-            final CachedClass[] c = doCall.getParameterTypes();
-            int length = c.length;
-            if (length == 0) {
-                // no arg method
-                chooser = new MethodChooser() {
-                    public Object chooseMethod(Class[] arguments, boolean coerce) {
-                        if (arguments.length == 0) return doCall;
-                        return null;
-                    }
-                };
-            } else {
-                if (length == 1 && c[0].getTheClass() == Object.class) {
-                    // Object fits all, so simple dispatch rule here
-                    chooser = new MethodChooser() {
-                        public Object chooseMethod(Class[] arguments, boolean coerce) {
-                            // <2, because foo() is same as foo(null)
-                            if (arguments.length < 2) return doCall;
-                            return null;
-                        }
-                    };
-                } else {
-                    boolean allObject = true;
-                    for (int i = 0; i < c.length - 1; i++) {
-                        if (c[i].getTheClass() != Object.class) {
-                            allObject = false;
-                            break;
-                        }
-                    }
-                    if (allObject && c[c.length - 1].getTheClass() == Object.class) {
-                        // all arguments are object, so test only if argument number is correct
-                        chooser = new MethodChooser() {
-                            public Object chooseMethod(Class[] arguments, boolean coerce) {
-                                if (arguments.length == c.length) return doCall;
-                                return null;
-                            }
-                        };
-                    } else {
-                        if (allObject && c[c.length - 1].getTheClass() == Object[].class) {
-                            // all arguments are Object but last, which is a vargs argument, that
-                            // will fit all, so just test if the number of argument is equal or
-                            // more than the parameters we have.
-                            final int minimumLength = c.length - 2;
-                            chooser = new MethodChooser() {
-                                public Object chooseMethod(Class[] arguments, boolean coerce) {
-                                    if (arguments.length > minimumLength) return doCall;
-                                    return null;
-                                }
-                            };
-                        } else {
-                            // general case for single method
-                            chooser = new MethodChooser() {
-                                public Object chooseMethod(Class[] arguments, boolean coerce) {
-                                    if (doCall.isValidMethod(arguments)) {
-                                        return doCall;
-                                    }
-                                    return null;
-                                }
-                            };
-                        }
-                    }
-                }
-            }
-        } else if (closureMethods.size() == 2) {
-            MetaMethod m0 = null, m1 = null;
-            for (int i = 0; i != closureMethods.size(); ++i) {
-                MetaMethod m = (MetaMethod) closureMethods.get(i);
-                CachedClass[] c = m.getParameterTypes();
-                if (c.length == 0) {
-                    m0 = m;
-                } else {
-                    if (c.length == 1 && c[0].getTheClass() == Object.class) {
-                        m1 = m;
-                    }
-                }
-            }
-            if (m0 != null && m1 != null) {
-                // standard closure (2 methods because "it" is with default null)
-                chooser = new StandardClosureChooser(m0, m1);
-            }
-        }
-        if (chooser == null) {
-            // standard chooser for cases if it is not a single method and if it is
-            // not the standard closure.
-            chooser = new NormalMethodChooser(theClass, closureMethods);
-        }
-    }
-
-    private MetaClass lookupObjectMetaClass(Object object) {
-        if (object instanceof GroovyObject) {
-            GroovyObject go = (GroovyObject) object;
-            return go.getMetaClass();
-        }
-        Class ownerClass = object.getClass();
-        if (ownerClass == Class.class) {
-            ownerClass = (Class) object;
-            return registry.getMetaClass(ownerClass);
-        }
-        MetaClass metaClass = InvokerHelper.getMetaClass(object);
-        return metaClass;
-    }
-
-    @Override
-    public List<MetaMethod> getMethods() {
-        List<MetaMethod> answer = CLOSURE_METACLASS.getMetaMethods();
-        answer.addAll(closureMethods.toList());
-        return answer;
-    }
-
-    @Override
-    public List<MetaMethod> getMetaMethods() {
-        return CLOSURE_METACLASS.getMetaMethods();
-    }
-
-    @Override
-    public List<MetaProperty> getProperties() {
-        return CLOSURE_METACLASS.getProperties();
-    }
-
-    @Override
-    public MetaMethod pickMethod(String name, Class[] argTypes) {
-        if (argTypes == null) argTypes = MetaClassHelper.EMPTY_CLASS_ARRAY;
-        if (name.equals(CLOSURE_CALL_METHOD) || name.equals(CLOSURE_DO_CALL_METHOD)) {
-            return pickClosureMethod(argTypes);
-        }
-        return CLOSURE_METACLASS.getMetaMethod(name, argTypes);
-    }
-
-    public MetaMethod retrieveStaticMethod(String methodName, Class[] arguments) {
-        return null;
-    }
-
-    protected boolean isInitialized() {
-        return initialized;
-    }
-
-    public MetaMethod getStaticMetaMethod(String name, Object[] args) {
-        return CLOSURE_METACLASS.getStaticMetaMethod(name, args);
-    }
-
-    public MetaMethod getStaticMetaMethod(String name, Class[] argTypes) {
-        return CLOSURE_METACLASS.getStaticMetaMethod(name, argTypes);
-    }
-
-    public Object getProperty(Class sender, Object object, String name, boolean useSuper, boolean fromInsideClass) {
-        if (object instanceof Class) {
-            return getStaticMetaClass().getProperty(sender, object, name, useSuper, fromInsideClass);
-        } else {
-            return CLOSURE_METACLASS.getProperty(sender, object, name, useSuper, fromInsideClass);
-        }
-    }
-
-    @Override
-    public Object getAttribute(Class sender, Object object, String attribute, boolean useSuper, boolean fromInsideClass) {
-        if (object instanceof Class) {
-            return getStaticMetaClass().getAttribute(sender, object, attribute, useSuper);
-        } else {
-            if (!attributeInitDone) initAttributes();
-            CachedField mfp = attributes.get(attribute);
-            if (mfp == null) {
-                return CLOSURE_METACLASS.getAttribute(sender, object, attribute, useSuper);
-            } else {
-                return mfp.getProperty(object);
-            }
-        }
-    }
-
-    @Override
-    public void setAttribute(Class sender, Object object, String attribute,
-                             Object newValue, boolean useSuper, boolean fromInsideClass) {
-        if (object instanceof Class) {
-            getStaticMetaClass().setAttribute(sender, object, attribute, newValue, useSuper, fromInsideClass);
-        } else {
-            if (!attributeInitDone) initAttributes();
-            CachedField mfp = attributes.get(attribute);
-            if (mfp == null) {
-                CLOSURE_METACLASS.setAttribute(sender, object, attribute, newValue, useSuper, fromInsideClass);
-            } else {
-                mfp.setProperty(object, newValue);
-            }
-        }
-    }
-
-    public Object invokeStaticMethod(Object object, String methodName, Object[] arguments) {
-        return getStaticMetaClass().invokeMethod(Class.class, object, methodName, arguments, false, false);
-    }
-
-    public void setProperty(Class sender, Object object, String name, Object newValue, boolean useSuper, boolean fromInsideClass) {
-        if (object instanceof Class) {
-            getStaticMetaClass().setProperty(sender, object, name, newValue, useSuper, fromInsideClass);
-        } else {
-            CLOSURE_METACLASS.setProperty(sender, object, name, newValue, useSuper, fromInsideClass);
-        }
-    }
-
-    public MetaMethod getMethodWithoutCaching(int index, Class sender, String methodName, Class[] arguments, boolean isCallToSuper) {
-        throw new UnsupportedOperationException();
-    }
-
-    public void setProperties(Object bean, Map map) {
-        throw new UnsupportedOperationException();
-    }
-
-    public void addMetaBeanProperty(MetaBeanProperty mp) {
-        throw new UnsupportedOperationException();
-    }
-
-    public void addMetaMethod(MetaMethod method) {
-        throw new UnsupportedOperationException();
-    }
-
-    public void addNewInstanceMethod(Method method) {
-        throw new UnsupportedOperationException();
-    }
-
-    public void addNewStaticMethod(Method method) {
-        throw new UnsupportedOperationException();
-    }
-
-    public Constructor retrieveConstructor(Class[] arguments) {
-        throw new UnsupportedOperationException();
-    }
-
-    public CallSite createPojoCallSite(CallSite site, Object receiver, Object[] args) {
-        throw new UnsupportedOperationException();
-    }
-
-    public CallSite createPogoCallSite(CallSite site, Object[] args) {
-        return new PogoMetaClassSite(site, this);
-    }
-
-    public CallSite createPogoCallCurrentSite(CallSite site, Class sender, Object[] args) {
-        return new PogoMetaClassSite(site, this);
-    }
-
-    public List respondsTo(Object obj, String name, Object[] argTypes) {
-        loadMetaInfo();
-        return super.respondsTo(obj, name, argTypes);
-    }
-
-    public List respondsTo(final Object obj, final String name) {
-        loadMetaInfo();
-        return super.respondsTo(obj, name);
-    }
-
-    private synchronized void loadMetaInfo() {
-        if (metaMethodIndex.isEmpty()) {
-            initialized = false;
-            super.initialize();
-            initialized = true;
-        }
-    }
-
-    protected void applyPropertyDescriptors(PropertyDescriptor[] propertyDescriptors) {
-        // do nothing
-    }
-}
+/*
+ *  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.metaclass;
+
+import groovy.lang.Closure;
+import groovy.lang.ExpandoMetaClass;
+import groovy.lang.GroovyObject;
+import groovy.lang.GroovyRuntimeException;
+import groovy.lang.MetaBeanProperty;
+import groovy.lang.MetaClass;
+import groovy.lang.MetaClassImpl;
+import groovy.lang.MetaClassRegistry;
+import groovy.lang.MetaMethod;
+import groovy.lang.MetaProperty;
+import groovy.lang.MissingMethodException;
+import groovy.lang.MissingPropertyException;
+import groovy.lang.ProxyMetaClass;
+import org.codehaus.groovy.reflection.CachedClass;
+import org.codehaus.groovy.reflection.CachedField;
+import org.codehaus.groovy.reflection.CachedMethod;
+import org.codehaus.groovy.reflection.ParameterTypes;
+import org.codehaus.groovy.runtime.InvokerHelper;
+import org.codehaus.groovy.runtime.MetaClassHelper;
+import org.codehaus.groovy.runtime.callsite.CallSite;
+import org.codehaus.groovy.runtime.callsite.PogoMetaClassSite;
+import org.codehaus.groovy.runtime.wrappers.Wrapper;
+import org.codehaus.groovy.util.FastArray;
+
+import java.beans.PropertyDescriptor;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * A meta class for closures generated by the Groovy compiler. These classes
+ * have special characteristics this MetaClass uses. One of these is that a
+ * generated Closure has only additional doCall methods, all other methods
+ * are in the Closure class as well. To use this fact this MetaClass uses
+ * a MetaClass for Closure as static field And delegates calls to this
+ * MetaClass if needed. This allows a lean implementation for this MetaClass.
+ * Multiple generated closures will then use the same MetaClass for Closure.
+ * For static dispatching this class uses the MetaClass of Class, again
+ * all instances of this class will share that MetaClass. The Class MetaClass
+ * is initialized lazy, because most operations do not need this MetaClass.
+ * <p>
+ * The Closure and Class MetaClasses are not replaceable.
+ * <p>
+ * This MetaClass is for internal usage only!
+ *
+ * @since 1.5
+ */
+public final class ClosureMetaClass extends MetaClassImpl {
+    private volatile boolean initialized;
+    private final FastArray closureMethods = new FastArray(3);
+    private Map<String, CachedField> attributes = new HashMap<String, CachedField>();
+    private MethodChooser chooser;
+    private volatile boolean attributeInitDone = false;
+
+    private static MetaClassImpl CLOSURE_METACLASS;
+    private static MetaClassImpl classMetaClass;
+    private static final Object[] EMPTY_ARGUMENTS = {};
+    private static final String CLOSURE_CALL_METHOD = "call";
+    private static final String CLOSURE_DO_CALL_METHOD = "doCall";
+
+    static {
+        resetCachedMetaClasses();
+    }
+
+    public static void resetCachedMetaClasses() {
+        MetaClassImpl temp = new MetaClassImpl(Closure.class);
+        temp.initialize();
+        synchronized (ClosureMetaClass.class) {
+            CLOSURE_METACLASS = temp;
+        }
+        if (classMetaClass!=null) {
+            temp = new MetaClassImpl(Class.class);
+            temp.initialize();
+            synchronized (ClosureMetaClass.class) {
+                classMetaClass = temp;
+            }
+        }
+    }
+
+    private static synchronized MetaClass getStaticMetaClass() {
+        if (classMetaClass == null) {
+            classMetaClass = new MetaClassImpl(Class.class);
+            classMetaClass.initialize();
+        }
+        return classMetaClass;
+    }
+
+    private interface MethodChooser {
+        Object chooseMethod(Class[] arguments, boolean coerce);
+    }
+
+    private static class StandardClosureChooser implements MethodChooser {
+        private final MetaMethod doCall0;
+        private final MetaMethod doCall1;
+
+        StandardClosureChooser(MetaMethod m0, MetaMethod m1) {
+            doCall0 = m0;
+            doCall1 = m1;
+        }
+
+        public Object chooseMethod(Class[] arguments, boolean coerce) {
+            if (arguments.length == 0) return doCall0;
+            if (arguments.length == 1) return doCall1;
+            return null;
+        }
+    }
+
+    private static class NormalMethodChooser implements MethodChooser {
+        private final FastArray methods;
+        final Class theClass;
+
+        NormalMethodChooser(Class theClass, FastArray methods) {
+            this.theClass = theClass;
+            this.methods = methods;
+        }
+
+        public Object chooseMethod(Class[] arguments, boolean coerce) {
+            if (arguments.length == 0) {
+                return MetaClassHelper.chooseEmptyMethodParams(methods);
+            } else if (arguments.length == 1 && arguments[0] == null) {
+                return MetaClassHelper.chooseMostGeneralMethodWith1NullParam(methods);
+            } else {
+                List matchingMethods = new ArrayList();
+                final Object[] data = methods.getArray();
+                for (int i = 0, len = methods.size(); i != len; ++i) {
+                    Object method = data[i];
+
+                    // making this false helps find matches
+                    if (((ParameterTypes) method).isValidMethod(arguments)) {
+                        matchingMethods.add(method);
+                    }
+                }
+
+                int size = matchingMethods.size();
+                if (0 == size) {
+                    return null;
+                } else if (1 == size) {
+                    return matchingMethods.get(0);
+                }
+
+                return chooseMostSpecificParams(CLOSURE_DO_CALL_METHOD, matchingMethods, arguments);
+            }
+        }
+
+        private Object chooseMostSpecificParams(String name, List matchingMethods, Class[] arguments) {
+            return doChooseMostSpecificParams(theClass.getName(), name, matchingMethods, arguments, true);
+        }
+    }
+
+    public ClosureMetaClass(MetaClassRegistry registry, Class theClass) {
+        super(registry, theClass);
+    }
+
+    public MetaProperty getMetaProperty(String name) {
+        return CLOSURE_METACLASS.getMetaProperty(name);
+    }
+
+    private static void unwrap(Object[] arguments) {
+        for (int i = 0; i != arguments.length; i++) {
+            if (arguments[i] instanceof Wrapper) {
+                arguments[i] = ((Wrapper) arguments[i]).unwrap();
+            }
+        }
+    }
+
+    private MetaMethod pickClosureMethod(Class[] argClasses) {
+        Object answer = chooser.chooseMethod(argClasses, false);
+        return (MetaMethod) answer;
+    }
+
+    private MetaMethod getDelegateMethod(Closure closure, Object delegate, String methodName, Class[] argClasses) {
+        if (delegate == closure || delegate == null) return null;
+        if (delegate instanceof Class) {
+            for (Class superClass = (Class) delegate;
+                 superClass != Object.class && superClass != null;
+                 superClass = superClass.getSuperclass())
+            {
+                MetaClass mc = registry.getMetaClass(superClass);
+                MetaMethod method = mc.getStaticMetaMethod(methodName, argClasses);
+                if (method != null) return method;
+            }
+            return null;
+        } else {
+            MetaClass delegateMetaClass = lookupObjectMetaClass(delegate);
+            MetaMethod method = delegateMetaClass.pickMethod(methodName, argClasses);
+            if (method != null) {
+                return method;
+            }
+
+            if (delegateMetaClass instanceof ExpandoMetaClass) {
+                method = ((ExpandoMetaClass) delegateMetaClass).findMixinMethod(methodName, argClasses);
+
+                if (method != null) {
+                    onMixinMethodFound(method);
+                    return method;
+                }
+            }
+
+            if (delegateMetaClass instanceof MetaClassImpl) {
+                method = MetaClassImpl.findMethodInClassHierarchy(getTheClass(), methodName, argClasses, this);
+                if (method != null) {
+                    onSuperMethodFoundInHierarchy(method);
+                    return method;
+                }
+            }
+
+            return method;
+        }
+    }
+
+    public Object invokeMethod(Class sender, Object object, String methodName, Object[] originalArguments, boolean isCallToSuper, boolean fromInsideClass) {
+        checkInitalised();
+        if (object == null) {
+            throw new NullPointerException("Cannot invoke method: " + methodName + " on null object");
+        }
+
+        final Object[] arguments = makeArguments(originalArguments, methodName);
+        final Class[] argClasses = MetaClassHelper.convertToTypeArray(arguments);
+        unwrap(arguments);
+
+        MetaMethod method = null;
+        final Closure closure = (Closure) object;
+
+        if (CLOSURE_DO_CALL_METHOD.equals(methodName) || CLOSURE_CALL_METHOD.equals(methodName)) {
+            method = pickClosureMethod(argClasses);
+            if (method == null && arguments.length == 1 && arguments[0] instanceof List) {
+                Object[] newArguments = ((List) arguments[0]).toArray();
+                Class[] newArgClasses = MetaClassHelper.convertToTypeArray(newArguments);
+                method = createTransformMetaMethod(pickClosureMethod(newArgClasses));
+            }
+            if (method == null) throw new MissingMethodException(methodName, theClass, arguments, false);
+        }
+
+        boolean shouldDefer = closure.getResolveStrategy() == Closure.DELEGATE_ONLY && isInternalMethod(methodName);
+        if (method == null && !shouldDefer) {
+            method = CLOSURE_METACLASS.pickMethod(methodName, argClasses);
+        }
+
+        if (method != null) return method.doMethodInvoke(object, arguments);
+
+        MissingMethodException last = null;
+        Object callObject = object;
+        final Object owner = closure.getOwner();
+        final Object delegate = closure.getDelegate();
+        final Object thisObject = closure.getThisObject();
+        final int resolveStrategy = closure.getResolveStrategy();
+        boolean invokeOnDelegate = false;
+        boolean invokeOnOwner = false;
+        boolean ownerFirst = true;
+
+        switch (resolveStrategy) {
+            case Closure.TO_SELF:
+                break;
+            case Closure.DELEGATE_ONLY:
+                method = getDelegateMethod(closure, delegate, methodName, argClasses);
+                callObject = delegate;
+                if (method == null) {
+                    invokeOnDelegate = delegate != closure && (delegate instanceof GroovyObject);
+                }
+                break;
+            case Closure.OWNER_ONLY:
+                method = getDelegateMethod(closure, owner, methodName, argClasses);
+                callObject = owner;
+                if (method == null) {
+                    invokeOnOwner = owner != closure && (owner instanceof GroovyObject);
+                }
+
+                break;
+            case Closure.DELEGATE_FIRST:
+                method = getDelegateMethod(closure, delegate, methodName, argClasses);
+                callObject = delegate;
+                if (method == null) {
+                    method = getDelegateMethod(closure, owner, methodName, argClasses);
+                    callObject = owner;
+                }
+                if (method == null) {
+                    invokeOnDelegate = delegate != closure && (delegate instanceof GroovyObject);
+                    invokeOnOwner = owner != closure && (owner instanceof GroovyObject);
+                    ownerFirst = false;
+                }
+                break;
... 10397 lines suppressed ...


[groovy] 01/06: GROOVY-8959: Avoid NPE in StaticVerifier

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

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

commit 6f2131091d80d3394e64cdacd846b4ef4c12f6ca
Author: Paul King <pa...@asert.com.au>
AuthorDate: Fri Feb 1 14:43:30 2019 +1000

    GROOVY-8959: Avoid NPE in StaticVerifier
---
 .../codehaus/groovy/control/StaticVerifier.java    | 407 ++++++++++-----------
 1 file changed, 203 insertions(+), 204 deletions(-)

diff --git a/src/main/java/org/codehaus/groovy/control/StaticVerifier.java b/src/main/java/org/codehaus/groovy/control/StaticVerifier.java
index 6bf3908..a0442a4 100644
--- a/src/main/java/org/codehaus/groovy/control/StaticVerifier.java
+++ b/src/main/java/org/codehaus/groovy/control/StaticVerifier.java
@@ -1,204 +1,203 @@
-/*
- *  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.control;
-
-import org.codehaus.groovy.ast.ClassCodeVisitorSupport;
-import org.codehaus.groovy.ast.ClassNode;
-import org.codehaus.groovy.ast.CodeVisitorSupport;
-import org.codehaus.groovy.ast.DynamicVariable;
-import org.codehaus.groovy.ast.FieldNode;
-import org.codehaus.groovy.ast.MethodNode;
-import org.codehaus.groovy.ast.Parameter;
-import org.codehaus.groovy.ast.Variable;
-import org.codehaus.groovy.ast.expr.ClosureExpression;
-import org.codehaus.groovy.ast.expr.ConstructorCallExpression;
-import org.codehaus.groovy.ast.expr.Expression;
-import org.codehaus.groovy.ast.expr.MethodCallExpression;
-import org.codehaus.groovy.ast.expr.PropertyExpression;
-import org.codehaus.groovy.ast.expr.VariableExpression;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-import static org.apache.groovy.ast.tools.ClassNodeUtils.isInnerClass;
-
-/**
- * Verifier to check non-static access in static contexts
- */
-public class StaticVerifier extends ClassCodeVisitorSupport {
-    private boolean inSpecialConstructorCall;
-    private boolean inPropertyExpression; // TODO use it or lose it
-    private boolean inClosure;
-    private MethodNode currentMethod;
-    private SourceUnit source;
-
-    public void visitClass(ClassNode node, SourceUnit source) {
-        this.source = source;
-        super.visitClass(node);
-    }
-
-    @Override
-    public void visitVariableExpression(VariableExpression ve) {
-        Variable v = ve.getAccessedVariable();
-        if (v instanceof DynamicVariable) {
-            if (!inPropertyExpression || inSpecialConstructorCall) addStaticVariableError(ve);
-        }
-    }
-
-    @Override
-    public void visitClosureExpression(ClosureExpression ce) {
-        boolean oldInClosure = inClosure;
-        inClosure = true;
-        super.visitClosureExpression(ce);
-        inClosure = oldInClosure;
-    }
-
-    @Override
-    public void visitConstructorCallExpression(ConstructorCallExpression cce) {
-        boolean oldIsSpecialConstructorCall = inSpecialConstructorCall;
-        inSpecialConstructorCall = cce.isSpecialCall();
-        super.visitConstructorCallExpression(cce);
-        inSpecialConstructorCall = oldIsSpecialConstructorCall;
-    }
-
-    @Override
-    public void visitConstructorOrMethod(MethodNode node, boolean isConstructor) {
-        MethodNode oldCurrentMethod = currentMethod;
-        currentMethod = node;
-        super.visitConstructorOrMethod(node, isConstructor);
-        if (isConstructor) {
-            final Set<String> exceptions = new HashSet<String>();
-            for (final Parameter param : node.getParameters()) {
-                exceptions.add(param.getName());
-                if (param.hasInitialExpression()) {
-                    param.getInitialExpression().visit(new CodeVisitorSupport() {
-                        @Override
-                        public void visitVariableExpression(VariableExpression ve) {
-                            if (exceptions.contains(ve.getName())) return;
-                            Variable av = ve.getAccessedVariable();
-                            if (av instanceof DynamicVariable || !av.isInStaticContext()) {
-                                addVariableError(ve);
-                            }
-                        }
-
-                        @Override
-                        public void visitMethodCallExpression(MethodCallExpression call) {
-                            Expression objectExpression = call.getObjectExpression();
-                            if (objectExpression instanceof VariableExpression) {
-                                VariableExpression ve = (VariableExpression) objectExpression;
-                                if (ve.isThisExpression()) {
-                                    addError("Can't access instance method '" + call.getMethodAsString() + "' for a constructor parameter default value", param);
-                                    return;
-                                }
-                            }
-                            super.visitMethodCallExpression(call);
-                        }
-
-                        @Override
-                        public void visitClosureExpression(ClosureExpression expression) {
-                            //skip contents, because of dynamic scope
-                        }
-                    });
-                }
-            }
-        }
-        currentMethod = oldCurrentMethod;
-    }
-
-    @Override
-    public void visitMethodCallExpression(MethodCallExpression mce) {
-        if (inSpecialConstructorCall && !isInnerClass(currentMethod.getDeclaringClass())) {
-            Expression objectExpression = mce.getObjectExpression();
-            if (objectExpression instanceof VariableExpression) {
-                VariableExpression ve = (VariableExpression) objectExpression;
-                if (ve.isThisExpression()) {
-                    addError("Can't access instance method '" + mce.getMethodAsString() + "' before the class is constructed", mce);
-                    return;
-                }
-            }
-        }
-        super.visitMethodCallExpression(mce);
-    }
-
-    @Override
-    public void visitPropertyExpression(PropertyExpression pe) {
-        if (!inSpecialConstructorCall) checkStaticScope(pe);
-    }
-
-    @Override
-    protected SourceUnit getSourceUnit() {
-        return source;
-    }
-
-
-    private void checkStaticScope(PropertyExpression pe) {
-        if (inClosure) return;
-        for (Expression it = pe; it != null; it = ((PropertyExpression) it).getObjectExpression()) {
-            if (it instanceof PropertyExpression) continue;
-            if (it instanceof VariableExpression) {
-                addStaticVariableError((VariableExpression) it);
-            }
-            return;
-        }
-    }
-
-    private void addStaticVariableError(VariableExpression ve) {
-        // closures are always dynamic
-        // propertyExpressions will handle the error a bit differently
-        if (!inSpecialConstructorCall && (inClosure || !ve.isInStaticContext())) return;
-        if (ve.isThisExpression() || ve.isSuperExpression()) return;
-        Variable v = ve.getAccessedVariable();
-        if (currentMethod != null && currentMethod.isStatic()) {
-            FieldNode fieldNode = getDeclaredOrInheritedField(currentMethod.getDeclaringClass(), ve.getName());
-            if (fieldNode != null && fieldNode.isStatic()) return;
-        }
-        if (v != null && !(v instanceof DynamicVariable) && v.isInStaticContext()) return;
-        addVariableError(ve);
-    }
-
-    private void addVariableError(VariableExpression ve) {
-        addError("Apparent variable '" + ve.getName() + "' was found in a static scope but doesn't refer" +
-                " to a local variable, static field or class. Possible causes:\n" +
-                "You attempted to reference a variable in the binding or an instance variable from a static context.\n" +
-                "You misspelled a classname or statically imported field. Please check the spelling.\n" +
-                "You attempted to use a method '" + ve.getName() +
-                "' but left out brackets in a place not allowed by the grammar.", ve);
-    }
-
-    private static FieldNode getDeclaredOrInheritedField(ClassNode cn, String fieldName) {
-        ClassNode node = cn;
-        while (node != null) {
-            FieldNode fn = node.getDeclaredField(fieldName);
-            if (fn != null) return fn;
-            List<ClassNode> interfacesToCheck = new ArrayList<ClassNode>(Arrays.asList(node.getInterfaces()));
-            while (!interfacesToCheck.isEmpty()) {
-                ClassNode nextInterface = interfacesToCheck.remove(0);
-                fn = nextInterface.getDeclaredField(fieldName);
-                if (fn != null) return fn;
-                interfacesToCheck.addAll(Arrays.asList(nextInterface.getInterfaces()));
-            }
-            node = node.getSuperClass();
-        }
-        return null;
-    }
-
-}
+/*
+ *  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.control;
+
+import org.codehaus.groovy.ast.ClassCodeVisitorSupport;
+import org.codehaus.groovy.ast.ClassNode;
+import org.codehaus.groovy.ast.CodeVisitorSupport;
+import org.codehaus.groovy.ast.DynamicVariable;
+import org.codehaus.groovy.ast.FieldNode;
+import org.codehaus.groovy.ast.MethodNode;
+import org.codehaus.groovy.ast.Parameter;
+import org.codehaus.groovy.ast.Variable;
+import org.codehaus.groovy.ast.expr.ClosureExpression;
+import org.codehaus.groovy.ast.expr.ConstructorCallExpression;
+import org.codehaus.groovy.ast.expr.Expression;
+import org.codehaus.groovy.ast.expr.MethodCallExpression;
+import org.codehaus.groovy.ast.expr.PropertyExpression;
+import org.codehaus.groovy.ast.expr.VariableExpression;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+import static org.apache.groovy.ast.tools.ClassNodeUtils.isInnerClass;
+
+/**
+ * Verifier to check non-static access in static contexts
+ */
+public class StaticVerifier extends ClassCodeVisitorSupport {
+    private boolean inSpecialConstructorCall;
+    private boolean inPropertyExpression; // TODO use it or lose it
+    private boolean inClosure;
+    private MethodNode currentMethod;
+    private SourceUnit source;
+
+    public void visitClass(ClassNode node, SourceUnit source) {
+        this.source = source;
+        super.visitClass(node);
+    }
+
+    @Override
+    public void visitVariableExpression(VariableExpression ve) {
+        Variable v = ve.getAccessedVariable();
+        if (v instanceof DynamicVariable) {
+            if (!inPropertyExpression || inSpecialConstructorCall) addStaticVariableError(ve);
+        }
+    }
+
+    @Override
+    public void visitClosureExpression(ClosureExpression ce) {
+        boolean oldInClosure = inClosure;
+        inClosure = true;
+        super.visitClosureExpression(ce);
+        inClosure = oldInClosure;
+    }
+
+    @Override
+    public void visitConstructorCallExpression(ConstructorCallExpression cce) {
+        boolean oldIsSpecialConstructorCall = inSpecialConstructorCall;
+        inSpecialConstructorCall = cce.isSpecialCall();
+        super.visitConstructorCallExpression(cce);
+        inSpecialConstructorCall = oldIsSpecialConstructorCall;
+    }
+
+    @Override
+    public void visitConstructorOrMethod(MethodNode node, boolean isConstructor) {
+        MethodNode oldCurrentMethod = currentMethod;
+        currentMethod = node;
+        super.visitConstructorOrMethod(node, isConstructor);
+        if (isConstructor) {
+            final Set<String> exceptions = new HashSet<String>();
+            for (final Parameter param : node.getParameters()) {
+                exceptions.add(param.getName());
+                if (param.hasInitialExpression()) {
+                    param.getInitialExpression().visit(new CodeVisitorSupport() {
+                        @Override
+                        public void visitVariableExpression(VariableExpression ve) {
+                            if (exceptions.contains(ve.getName())) return;
+                            if (ve.getAccessedVariable() instanceof DynamicVariable || !ve.isInStaticContext()) {
+                                addVariableError(ve);
+                            }
+                        }
+
+                        @Override
+                        public void visitMethodCallExpression(MethodCallExpression call) {
+                            Expression objectExpression = call.getObjectExpression();
+                            if (objectExpression instanceof VariableExpression) {
+                                VariableExpression ve = (VariableExpression) objectExpression;
+                                if (ve.isThisExpression()) {
+                                    addError("Can't access instance method '" + call.getMethodAsString() + "' for a constructor parameter default value", param);
+                                    return;
+                                }
+                            }
+                            super.visitMethodCallExpression(call);
+                        }
+
+                        @Override
+                        public void visitClosureExpression(ClosureExpression expression) {
+                            //skip contents, because of dynamic scope
+                        }
+                    });
+                }
+            }
+        }
+        currentMethod = oldCurrentMethod;
+    }
+
+    @Override
+    public void visitMethodCallExpression(MethodCallExpression mce) {
+        if (inSpecialConstructorCall && !isInnerClass(currentMethod.getDeclaringClass())) {
+            Expression objectExpression = mce.getObjectExpression();
+            if (objectExpression instanceof VariableExpression) {
+                VariableExpression ve = (VariableExpression) objectExpression;
+                if (ve.isThisExpression()) {
+                    addError("Can't access instance method '" + mce.getMethodAsString() + "' before the class is constructed", mce);
+                    return;
+                }
+            }
+        }
+        super.visitMethodCallExpression(mce);
+    }
+
+    @Override
+    public void visitPropertyExpression(PropertyExpression pe) {
+        if (!inSpecialConstructorCall) checkStaticScope(pe);
+    }
+
+    @Override
+    protected SourceUnit getSourceUnit() {
+        return source;
+    }
+
+
+    private void checkStaticScope(PropertyExpression pe) {
+        if (inClosure) return;
+        for (Expression it = pe; it != null; it = ((PropertyExpression) it).getObjectExpression()) {
+            if (it instanceof PropertyExpression) continue;
+            if (it instanceof VariableExpression) {
+                addStaticVariableError((VariableExpression) it);
+            }
+            return;
+        }
+    }
+
+    private void addStaticVariableError(VariableExpression ve) {
+        // closures are always dynamic
+        // propertyExpressions will handle the error a bit differently
+        if (!inSpecialConstructorCall && (inClosure || !ve.isInStaticContext())) return;
+        if (ve.isThisExpression() || ve.isSuperExpression()) return;
+        Variable v = ve.getAccessedVariable();
+        if (currentMethod != null && currentMethod.isStatic()) {
+            FieldNode fieldNode = getDeclaredOrInheritedField(currentMethod.getDeclaringClass(), ve.getName());
+            if (fieldNode != null && fieldNode.isStatic()) return;
+        }
+        if (v != null && !(v instanceof DynamicVariable) && v.isInStaticContext()) return;
+        addVariableError(ve);
+    }
+
+    private void addVariableError(VariableExpression ve) {
+        addError("Apparent variable '" + ve.getName() + "' was found in a static scope but doesn't refer" +
+                " to a local variable, static field or class. Possible causes:\n" +
+                "You attempted to reference a variable in the binding or an instance variable from a static context.\n" +
+                "You misspelled a classname or statically imported field. Please check the spelling.\n" +
+                "You attempted to use a method '" + ve.getName() +
+                "' but left out brackets in a place not allowed by the grammar.", ve);
+    }
+
+    private static FieldNode getDeclaredOrInheritedField(ClassNode cn, String fieldName) {
+        ClassNode node = cn;
+        while (node != null) {
+            FieldNode fn = node.getDeclaredField(fieldName);
+            if (fn != null) return fn;
+            List<ClassNode> interfacesToCheck = new ArrayList<ClassNode>(Arrays.asList(node.getInterfaces()));
+            while (!interfacesToCheck.isEmpty()) {
+                ClassNode nextInterface = interfacesToCheck.remove(0);
+                fn = nextInterface.getDeclaredField(fieldName);
+                if (fn != null) return fn;
+                interfacesToCheck.addAll(Arrays.asList(nextInterface.getInterfaces()));
+            }
+            node = node.getSuperClass();
+        }
+        return null;
+    }
+
+}


[groovy] 02/06: GROOVY-8719: Add DelegatesTo annotation to CompilerCustomizationBuilder.withConfig

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

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

commit f23a40353b5ad4738c939ff30332c7a151f3e045
Author: Paul King <pa...@asert.com.au>
AuthorDate: Fri Feb 1 14:47:48 2019 +1000

    GROOVY-8719: Add DelegatesTo annotation to CompilerCustomizationBuilder.withConfig
---
 .../customizers/builder/CompilerCustomizationBuilder.groovy       | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)

diff --git a/src/main/groovy/org/codehaus/groovy/control/customizers/builder/CompilerCustomizationBuilder.groovy b/src/main/groovy/org/codehaus/groovy/control/customizers/builder/CompilerCustomizationBuilder.groovy
index 59b8cc5..babc545 100644
--- a/src/main/groovy/org/codehaus/groovy/control/customizers/builder/CompilerCustomizationBuilder.groovy
+++ b/src/main/groovy/org/codehaus/groovy/control/customizers/builder/CompilerCustomizationBuilder.groovy
@@ -26,18 +26,17 @@ import org.codehaus.groovy.control.CompilerConfiguration
  * <p>A builder which allows easy configuration of compilation customizers. Instead of creating
  * various compilation customizers by hand, you may use this builder instead, which provides a
  * shorter syntax and removes most of the verbosity.
- *
  */
 @CompileStatic
 class CompilerCustomizationBuilder extends FactoryBuilderSupport {
-    public CompilerCustomizationBuilder() {
+    CompilerCustomizationBuilder() {
         registerFactories()
     }
 
-    public static CompilerConfiguration withConfig(CompilerConfiguration config, Closure code) {
+    static CompilerConfiguration withConfig(CompilerConfiguration config,
+                                            @DelegatesTo(type = "org.codehaus.groovy.control.customizers.builder.CompilerCustomizationBuilder") Closure code) {
         CompilerCustomizationBuilder builder = new CompilerCustomizationBuilder()
         config.invokeMethod('addCompilationCustomizers', builder.invokeMethod('customizers', code))
-
         config
     }
 
@@ -49,7 +48,6 @@ class CompilerCustomizationBuilder extends FactoryBuilderSupport {
             value = factory.postCompleteNode(this, parent, value)
             setParent(parent, value)
         }
-
         value
     }
 


[groovy] 06/06: GROOVY-7160: NoSuchMethodError for varargs when type parameter extends interface (closes #869)

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

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

commit 26e43dd52e1a948af4d64593e9484b6a728b3dd5
Author: Paul King <pa...@asert.com.au>
AuthorDate: Thu Jan 31 20:25:30 2019 +1000

    GROOVY-7160: NoSuchMethodError for varargs when type parameter extends interface (closes #869)
---
 .../groovy/ast/decompiled/MemberSignatureParser.java   |  5 ++++-
 .../classgen/asm/sc/BugsStaticCompileTest.groovy       | 18 +++++++++++++++++-
 2 files changed, 21 insertions(+), 2 deletions(-)

diff --git a/src/main/java/org/codehaus/groovy/ast/decompiled/MemberSignatureParser.java b/src/main/java/org/codehaus/groovy/ast/decompiled/MemberSignatureParser.java
index 436c02c..0cefbe2 100644
--- a/src/main/java/org/codehaus/groovy/ast/decompiled/MemberSignatureParser.java
+++ b/src/main/java/org/codehaus/groovy/ast/decompiled/MemberSignatureParser.java
@@ -145,7 +145,10 @@ class MemberSignatureParser {
     }
 
     private static ClassNode applyErasure(ClassNode genericType, ClassNode erasure) {
-        if (genericType.isGenericsPlaceHolder()) {
+        if (genericType.isArray() && erasure.isArray() && genericType.getComponentType().isGenericsPlaceHolder()) {
+            genericType.setRedirect(erasure);
+            genericType.getComponentType().setRedirect(erasure.getComponentType());
+        } else if (genericType.isGenericsPlaceHolder()) {
             genericType.setRedirect(erasure);
         }
         return genericType;
diff --git a/src/test/org/codehaus/groovy/classgen/asm/sc/BugsStaticCompileTest.groovy b/src/test/org/codehaus/groovy/classgen/asm/sc/BugsStaticCompileTest.groovy
index 032f899..062054b 100644
--- a/src/test/org/codehaus/groovy/classgen/asm/sc/BugsStaticCompileTest.groovy
+++ b/src/test/org/codehaus/groovy/classgen/asm/sc/BugsStaticCompileTest.groovy
@@ -1464,5 +1464,21 @@ println someInt
             assert Groovy7784.multiVarArgs() == 'foo-bar-baz1-baz2'
         '''
     }
-}
 
+    // GROOVY-7160
+    void testGenericsArrayPlaceholder() {
+        assertScript '''
+            import static java.nio.file.AccessMode.*
+
+            @groovy.transform.CompileStatic
+            class Dummy {
+                static main() {
+                    // more than 5 to match `of(E first, E[] rest)` variant
+                    EnumSet.of(READ, WRITE, EXECUTE, READ, WRITE, EXECUTE)
+                }
+            }
+
+            assert Dummy.main() == [READ, WRITE, EXECUTE].toSet()
+        '''
+    }
+}


[groovy] 03/06: GROOVY-8535: FieldNode constructor appears to call setType incorrectly

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

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

commit 86ccccb443cc2bcaddd10df64306bbbd30b34cc4
Author: Paul King <pa...@asert.com.au>
AuthorDate: Fri Feb 1 15:42:45 2019 +1000

    GROOVY-8535: FieldNode constructor appears to call setType incorrectly
---
 src/main/java/org/codehaus/groovy/ast/FieldNode.java | 11 +++--------
 1 file changed, 3 insertions(+), 8 deletions(-)

diff --git a/src/main/java/org/codehaus/groovy/ast/FieldNode.java b/src/main/java/org/codehaus/groovy/ast/FieldNode.java
index 6799a14..cae3dcf 100644
--- a/src/main/java/org/codehaus/groovy/ast/FieldNode.java
+++ b/src/main/java/org/codehaus/groovy/ast/FieldNode.java
@@ -25,8 +25,6 @@ import java.lang.reflect.Field;
 
 /**
  * Represents a field (member variable)
- *
- * @author <a href="mailto:james@coredevelopers.net">James Strachan</a>
  */
 public class FieldNode extends AnnotatedNode implements Opcodes, Variable {
 
@@ -37,7 +35,7 @@ public class FieldNode extends AnnotatedNode implements Opcodes, Variable {
     private Expression initialValueExpression;
     private boolean dynamicTyped;
     private boolean holder;
-    private ClassNode originType = ClassHelper.DYNAMIC_TYPE;
+    private ClassNode originType;
 
     public static FieldNode newStatic(Class theClass, String name) throws SecurityException, NoSuchFieldException {
         Field field = theClass.getField(name);
@@ -48,11 +46,7 @@ public class FieldNode extends AnnotatedNode implements Opcodes, Variable {
     public FieldNode(String name, int modifiers, ClassNode type, ClassNode owner, Expression initialValueExpression) {
         this.name = name;
         this.modifiers = modifiers;
-        this.type = type;
-        if (this.type == ClassHelper.DYNAMIC_TYPE && initialValueExpression != null)
-            this.setType(initialValueExpression.getType());
         this.setType(type);
-        this.originType = type;
         this.owner = owner;
         this.initialValueExpression = initialValueExpression;
     }
@@ -179,6 +173,7 @@ public class FieldNode extends AnnotatedNode implements Opcodes, Variable {
     public boolean isClosureSharedVariable() {
         return false;
     }
+
     /**
      * @deprecated
      */
@@ -189,7 +184,7 @@ public class FieldNode extends AnnotatedNode implements Opcodes, Variable {
     public ClassNode getOriginType() {
         return originType;
     }
-    
+
     public void setOriginType(ClassNode cn) {
         originType = cn;
     }