Fork me on GitHub

Changelog for Groovy 1.8.7


  • [GROOVY-3388] - GroovyASTTransformation phase must be SEMANTIC_ANALYSIS or later for usage
  • [GROOVY-4016] - Single super constructor argument is casted to array if super constructor has vararg parameter
  • [GROOVY-4269] - metaClosure not called when using named parameters in Sql.rows
  • [GROOVY-4292] - ClassHelper.ClassHelperCache#classCache is not thread-safe
  • [GROOVY-4803] - out of memory error when running groovydoc when there are java files in packages
  • [GROOVY-4922] - StackOverflowError when calling super and overriding a package protected java method
  • [GROOVY-4946] - Groovy getAt cannot be used with lazily initialized lists
  • [GROOVY-5044] - Ant Groovyc compilation error in Gradle
  • [GROOVY-5087] - Variables from a static import scope used in GStrings resolve to null under certain conditions
  • [GROOVY-5111] - Named parameter support breaks with postgres casting syntax
  • [GROOVY-5119] - Node.depthFirst() 'forgets' text nodes
  • [GROOVY-5158] - Encoding issue with groovy.xml.XmlUtil.serialize()
  • [GROOVY-5208] - Incorrect line numbers in code using optimized primitive operations
  • [GROOVY-5256] - Wrong generation of stubs with Generics
  • [GROOVY-5292] - Stub generation doesn't handle 'protected' multi-line String correctly.
  • [GROOVY-5293] - ASTTransformationVisitor not closing URL streams
  • [GROOVY-5303] - page title on groovydoc index page is "{todo.title}"
  • [GROOVY-5304] - groovydoc output html does not specify character encoding
  • [GROOVY-5316] - @Lazy (LazyASTTransformation) not multi-thread safe
  • [GROOVY-5323] - JsonOutput.prettyPrint breaks escaped special characters
  • [GROOVY-5330] - Typo in exception message at JsonSlurper.parseObject()
  • [GROOVY-5339] - groovy.sql.Sql.executeQuery(String) should be non-final for extension
  • [GROOVY-5340] - AbstractQueryCommand constructor should be protected for subclassing
  • [GROOVY-5371] - Sql DataSet fails to work with non-literals in queries (fix error message/doco)
  • [GROOVY-5377] - CLONE - Incomprehensible Error Message Passing Partial Evaluated Lambda Function (improved error message for normal closure not on classpath case)
  • [GROOVY-5383] - @ListenerList changes the ArrayList classnode generics
  • [GROOVY-5416] - Transform loaded by wrong class loader when @GroovyASTTransformationClass(classes = ...) is used
  • [GROOVY-5428] - Performance problem: ClassCastExceptions are created in normal execution flow which kills performance
  • [GROOVY-5457] - The example code in the docs of Closure class regarding OWNER_ONLY resolution strategy is wrong
  • [GROOVY-5466] - Invalid code crashes the compiler
  • [GROOVY-5475] - Consistently get IncompatibleClassChangeError in OpenJDK6
  • [GROOVY-5494] - JsonOutput.toJson(def) fails with MissingMethodException if the object defines getProperties()
  • [GROOVY-5500] - GroovyBugError thrown when it shouldn't be
  • [GROOVY-5507] - rcurry for overloaded MethodClosure throws an exception
  • [GROOVY-5508] - Verifier fails to check property types with covariant override
  • [GROOVY-5552] - Stackoverflow in JsonSlurper.parseText
  • [GROOVY-5588] - Multidimensional Arrays: Incompatible argument to function
  • [GROOVY-5628] - new JsonBuilder('<complex xml string>').toPrettyPrint() throws StackOverflowException
  • [GROOVY-5972] - String returned by JsonOutput.prettyPrint() isn't valid JSON


  • [GROOVY-2528] - Provide optional attribute to groovy task to specify Java executable to use, similar to the executable attribute used in the javac task
  • [GROOVY-3916] - Implement ranges for Calendar
  • [GROOVY-5024] - Reduce groovyc command line length
  • [GROOVY-5307] - "Null key for a Map not allowed" is a bad error description in JsonOutput
  • [GROOVY-5315] - Inject could take the initialValue from the first item in the Collection/Array
  • [GROOVY-5324] - Provide a hook for FactoryBuilderSupport subclasses/decorators for handling methodMissing
  • [GROOVY-5325] - Provide a hook for FactoryBuilderSupport subclasses/decorators for handling propertyMissing
  • [GROOVY-5326] - FactorBuilderSupport's resolve* methods could be extension friendly
  • [GROOVY-5338] - GroovyDoc doesn't create package-list
  • [GROOVY-5387] - Support for Iterable.collectEntries
  • [GROOVY-5401] - Extend groovy.sql.DataSet with paging capabilities
  • [GROOVY-5402] - Provide a plus() method for arrays
  • [GROOVY-5407] - Make DGM.first() and DGM.last() work with any Iterable
  • [GROOVY-5408] - JavaAwareCompilationUnit should have a constructor that allows to set transformLoader
  • [GROOVY-5409] - Improve error message for shouldFailWithCause
  • [GROOVY-5414] - Groovy could benefit from DGM takeWhile and dropWhile methods
  • [GROOVY-5429] - Add excludes to @EqualsAndHashCode
  • [GROOVY-5432] - GroovyDoc error for @EqualsAndHashCode

New Feature

  • [GROOVY-4835] - provide a @NotYetImplemented AST transform for test cases of not yet implemented features (@Hackergarten contribution)
  • [GROOVY-5096] - @Immutable should have an extensible way to be informed of classes that are "deemed" Immutable
  • [GROOVY-5341] - json implicit object of type JsonBuilder added to groovlets
  • [GROOVY-5375] - Sql has newInstance methods which create connections but doesn't manage them
  • [GROOVY-5405] - Named parameters for groovy.sql.Sql
  • [GROOVY-5460] - HTML Builder changes & between URL parameters to &amp; when building an <a> tag


  • [GROOVY-4483] - Constants resolving doesn't work in map.put()



  • [GROOVY-5381] - Can't have an abstract method in a non-abstract class