Changelog for Groovy 2.0.0-beta-3

Bug

  • [GROOVY-3388] - GroovyASTTransformation phase must be SEMANTIC_ANALYSIS or later for usage
  • [GROOVY-4231] - DOMCategory.setValue is unable to handle newly created elements
  • [GROOVY-4269] - metaClosure not called when using named parameters in Sql.rows
  • [GROOVY-4362] - Node.text() returns empty string for non-String or Collection values
  • [GROOVY-4617] - Error when running groovysh with verbose option (-v)
  • [GROOVY-4633] - @InheritConstructors does not work on inner classes *
  • [GROOVY-4660] - NPE in groovy.servlet.AbstractHttpServlet if deploy WAR to jetty
  • [GROOVY-4803] - out of memory error when running groovydoc when there are java files in packages
  • [GROOVY-4841] - Null BigDecimals converted to String with add operator *
  • [GROOVY-4922] - StackOverflowError when calling super and overriding a package protected java method
  • [GROOVY-4934] - incorrect signature attributes in class files for inner class generics
  • [GROOVY-4946] - Groovy getAt cannot be used with lazily initialized lists
  • [GROOVY-4979] - @ToString creates additional unneeded field
  • [GROOVY-4997] - @Immutable not working for inner classes *
  • [GROOVY-5044] - Ant Groovyc compilation error in Gradle
  • [GROOVY-5082] - Sometimes invalid inner class reference left in .class files produced for interfaces
  • [GROOVY-5084] - Groovydoc can't handle @link tags in package-info.java
  • [GROOVY-5087] - Variables from a static import scope used in GStrings resolve to null under certain conditions
  • [GROOVY-5119] - Node.depthFirst() 'forgets' text nodes
  • [GROOVY-5130] - Documentation: Error for one of the examples from JN0025-Starting
  • [GROOVY-5144] - JsonSlurper does not handle backslashes at the end of a String
  • [GROOVY-5158] - Encoding issue with groovy.xml.XmlUtil.serialize()
  • [GROOVY-5163] - IncompatibleClassChangeError when running groovysh
  • [GROOVY-5170] - GroovyRowResult and GroovyResultSet are Inconsistent with each other when using a postgres driver
  • [GROOVY-5197] - Source location incorrect for statement after a label
  • [GROOVY-5202] - inherited non public listener structure causing NPE
  • [GROOVY-5207] - @Field access within closure fails with 'BUG! exception in phase 'class generation' in source unit'
  • [GROOVY-5212] - Compilation problem for java enums defined as groovy classes
  • [GROOVY-5213] - Inner classes are not type checked
  • [GROOVY-5214] - Source location incorrect for enums
  • [GROOVY-5216] - groovy.sql.Sql.newInstance(Map<String, Object>) remove params
  • [GROOVY-5217] - Calls to closures declared as fields are not type checked properly
  • [GROOVY-5219] - FactoryBuilderSupport doesn't register methods in a predictable order
  • [GROOVY-5221] - Problem with @InheritConstructors with multiple level of inheritance (part 1 of 2 - document the current limitation)
  • [GROOVY-5222] - Casts to subclasses should not be caught as errors by the type checker
  • [GROOVY-5224] - groovy.util.Node plus operator assuming all children are not strings
  • [GROOVY-5226] - Variables which type is determined thanks to instanceof checks should be usable as arguments without casts
  • [GROOVY-5228] - Prefix/Postfix operations are not type checked
  • [GROOVY-5229] - Some properties are not recognized as properties by the type checker
  • [GROOVY-5231] - Problem with @TupleConstructor with static type checking
  • [GROOVY-5232] - Static type checking fails on setter call
  • [GROOVY-5233] - Static type checker has problems with args coerced to arrays
  • [GROOVY-5235] - Static compilation of method call expressions with missing default parameters
  • [GROOVY-5237] - Static type checker complains on assignment on generics fields
  • [GROOVY-5238] - Methods belonging to a different source unit get visited and report errors at the wrong place
  • [GROOVY-5240] - Static type checker confuses Class and type
  • [GROOVY-5247] - Sorting a map then passing it to JsonBuilder results in a NullPointerException only in 1.8.5
  • [GROOVY-5248] - call site caching missing null check
  • [GROOVY-5256] - Wrong generation of stubs with Generics
  • [GROOVY-5257] - Node.ReplaceNode method fails cannot remove itself
  • [GROOVY-5258] - Static type checker incorrectly handles assignments of variables used as parameters in control structures
  • [GROOVY-5259] - VerifyError - cannot access outer class static final fields from an inner class
  • [GROOVY-5260] - Groovyc stub generation doesn't handle all primitive types properly
  • [GROOVY-5262] - Problem currying null parameters
  • [GROOVY-5267] - getting java.lang.VerifyError depending on some simple method content
  • [GROOVY-5272] - Intermittant/random incorrect resolution of sub-interface constant values
  • [GROOVY-5274] - CLONE - Problem with @InheritConstructors with multiple level of inheritance
  • [GROOVY-5277] - SecureASTCustomizer doesn't check class methods
  • [GROOVY-5278] - groovy allows top-level classes be marked as private *
  • [GROOVY-5279] - groovysh holds a grudge -
  • [GROOVY-5280] - DOMCategory: NullPointerException in setValue() when element has no text
  • [GROOVY-5285] - super.setMetaClass() generates StackOverflowError when there is no base class *
  • [GROOVY-5286] - Constant pool is used for not final fields too
  • [GROOVY-5287] - invalid unboxing in compare and other operations if primopts are enabled
  • [GROOVY-5288] - invalid cast of null to int
  • [GROOVY-5292] - Stub generation doesn't handle 'protected' multi-line String correctly.
  • [GROOVY-5293] - ASTTransformationVisitor not closing URL streams
  • [GROOVY-5294] - This reference is null during construction of object of abstract class implemented as closure map
  • [GROOVY-5295] - Static type checker cannot choose between two covariant return type methods
  • [GROOVY-5303] - page title on groovydoc index page is "{todo.title}"
  • [GROOVY-5304] - groovydoc output html does not specify character encoding
  • [GROOVY-5308] - Caught: BUG! exception in phase 'conversion' in source unit '${file}' null
  • [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-5332] - Map<String,Integer> is recognized as Map<String,String> by the type checker
  • [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-5374] - @TypeChecked does not recognize @Log annotation
  • [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-5384] - Type checker doesn't infer generics properly
  • [GROOVY-5411] - Type checker doesn't seem to realise a non-static method won't satisfy a call from a static context
  • [GROOVY-5415] - Static Type checker reporting invalid error
  • [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

Improvement

  • [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-4735] - part1: patches to enable groovy-eclipse to run unpatched groovy
  • [GROOVY-4788] - The clearTime() method added to java.*.Date should return the modified Date for a more fluent API
  • [GROOVY-5024] - Reduce groovyc command line length
  • [GROOVY-5134] - @ToString optionally exclude fields with null values
  • [GROOVY-5139] - GroovyTestCase's shouldFail {...} should return the throwable and not the enclosed message
  • [GROOVY-5223] - Bytecode optimizations: make use of LDC for class literals *
  • [GROOVY-5230] - Add a <license/> block to groovy's POM
  • [GROOVY-5241] - GroovyScriptEngineImpl could use ConcurrentHashMaps
  • [GROOVY-5255] - GroovyClassLoader-aware constructor of GroovyScriptEngineImpl
  • [GROOVY-5266] - GroovyEngine not creating friendly script names for ant files
  • [GROOVY-5269] - Add hasVariable to binding
  • [GROOVY-5270] - TableSorter prints to System.out on table change
  • [GROOVY-5271] - TimeDuration should implement Comparable
  • [GROOVY-5276] - Change ProxyGenerator to use ASM based class generation instead of GroovyShell *
  • [GROOVY-5283] - Add a collate method to List
  • [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-5329] - Allow static type checking to be turned off for individual classes/methodss
  • [GROOVY-5333] - Visit properties and fields even if variable is a DynamicVariable
  • [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-5429] - Add excludes to @EqualsAndHashCode

New Feature

  • [GROOVY-3307] - Add byte[].encodeHex
  • [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-5263] - New GDK method: Object[].contains()
  • [GROOVY-5273] - Provide contains as a DGM method for primitive arrays
  • [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-5392] - @ASTTest AST transformation
  • [GROOVY-5405] - Named parameters for groovy.sql.Sql
  • [GROOVY-5412] - Implement a matchesPartially() method on Matchers
  • [GROOVY-5414] - Groovy could benefit from DGM takeWhile and dropWhile methods

Task

* potentially breaking change (read issue for details - even minor differences are sometimes flagged as potentially breaking changes)