Changelog for Groovy 2.3.0

Bug

  • [GROOVY-4754] - Error in implements statement
  • [GROOVY-5249] - Avoid unnecessary locking in ClassInfo.getMetaClass
  • [GROOVY-5413] - groovyc should emit errors when @Override is not respected
  • [GROOVY-5459] - grape command and help is wrong command line structure
  • [GROOVY-5842] - Runtimer error when types down match with Map and Map.Entry when using @CompileStatic
  • [GROOVY-5864] - @AutoExternalize doesn't create no-argument constructor
  • [GROOVY-5899] - withObject[Output|Input]Stream - auto detect 'it' type
  • [GROOVY-6135] - Groovy classes with @CompileStatic can't infer generic types in some cases
  • [GROOVY-6254] - groovydoc fails when java files start with single line comments
  • [GROOVY-6255] - XMLSlurper accessing xml:id
  • [GROOVY-6314] - ResourceGroovyMethods uses BufferedWriter/BufferedOutputStream
  • [GROOVY-6329] - @Delegate should support including/excluding which methods are delegated to (and optionally complain if multiple exist) - advanced use cases
  • [GROOVY-6330] - Groovy not checking generics information correctly for covariant methods implementing interfaces
  • [GROOVY-6337] - weird verify error with TupleConstructor and Lazy
  • [GROOVY-6356] - Working with namespaced attributes awkward with XmlSlurper
  • [GROOVY-6415] - @CompileStatic complains when trying to call generic methods with different generic type parameter names
  • [GROOVY-6440] - Upgrade to Gradle 1.9
  • [GROOVY-6451] - Support repository roots in @GrabResolver should work correctly for relative hrefs
  • [GROOVY-6456] - AbstractHttpServlet.applyResourceNameMatcher race condition *
  • [GROOVY-6463] - Incorrect error implementing method
  • [GROOVY-6465] - List#sort(Comparable) conflict with jdk8 *
  • [GROOVY-6471] - AccessControlException when compiling scripts on the fly with Google App Engine dev server
  • [GROOVY-6501] - Decouple AST transformation from its interface via ASTTransformationCustomizer
  • [GROOVY-6511] - Illegal use of non virtual function call when compiling with JDK 8
  • [GROOVY-6524] - Implicit closure coercion conflicts with DGM methods in type checked mode
  • [GROOVY-6548] - groovysh: Import command is vulnerable and ugly
  • [GROOVY-6550] - VerifyError when instantiating class that has Java 8 default method in its ancestry
  • [GROOVY-6559] - JsonOutput does not escape single char (char/Character)
  • [GROOVY-6560] - JsonOutput does not escape URL (windows path)
  • [GROOVY-6561] - Implementation for running a script from a URL in GroovyMain is flawed.
  • [GROOVY-6573] - TailRecursive creates compilation error
  • [GROOVY-6576] - list literal constructor misses direct constructor call
  • [GROOVY-6577] - misleading error message for boolean assignment
  • [GROOVY-6580] - InnerClassCompletionVisitor does not overwrite existing propertyMissing/methodMissing impls completely
  • [GROOVY-6582] - Script.invokeMethod bypasses getProperty when looking for closure-valued properties.
  • [GROOVY-6593] - Operators other than dot do not support carriage returns
  • [GROOVY-6596] - New template engine: MarkupTemplateEngine with optional type checking
  • [GROOVY-6597] - GroovyClassLoader.addClasspath should respect URI paths and not use URL.equals
  • [GROOVY-6601] - Groovy 2.2.2 regression in the typechecker's handling of generics
  • [GROOVY-6605] - Object ranges should be inferred as Range<Object> for improved fluency
  • [GROOVY-6621] - groovy.util.Node#text incorrect when value is a NodeList *
  • [GROOVY-6625] - Sql failed to process query unterminated ' character - legal statement containing quotes
  • [GROOVY-6627] - Problem With CompileStatic And Class.newInstance()
  • [GROOVY-6630] - Static compilation confused by factory methods, map initializers and generics
  • [GROOVY-6640] - Compilation warning when using @AutoClone on an object with collection properties
  • [GROOVY-6641] - Compiling a source with a URL pointing to the current working directory produces incorrectly named classes for top-level closures
  • [GROOVY-6646] - vararg method resolution with static compilation selects wrong candidate between (String...) and (Class<?> ...)
  • [GROOVY-6647] - static compilation fails at runtime for calling private constructor
  • [GROOVY-6654] - Can't @Override method with generic argument type in parameterized subclass
  • [GROOVY-6657] - Type checker doesn't find constructor if generic placeholder name doesn't match
  • [GROOVY-6662] - indy caching bug for static method invocations
  • [GROOVY-6666] - Unexpected NullPointerException
  • [GROOVY-6670] - Cannot coerce closure to SAM type when calling method of generic type
  • [GROOVY-6671] - Types not inferred when coercing closures of generic method return type
  • [GROOVY-6672] - ClassFormatError if trait (accidentally) "extends" interface
  • [GROOVY-6674] - The JsonSlurper returns the wrong value type for floating point numbers.
  • [GROOVY-6676] - Closure parameter type inference error if the receiver is a delegate type
  • [GROOVY-6683] - XmlParser trims text by default *
  • [GROOVY-6686] - Initial expressions are not transformed in traits
  • [GROOVY-6687] - Traits aren't detected as implementing abstract methods
  • [GROOVY-6688] - Traits cannot modify their internal variables
  • [GROOVY-6691] - Cannot extend trait with generic parameter
  • [GROOVY-6692] - trait's groovyProxy class doesn't dispatch String#toString()
  • [GROOVY-6694] - Static method call within trait is not transformed properly
  • [GROOVY-6700] - Deprecate old groovy.util.GroovyAssert class in favor of the new Groovy 2.3 groovy.test.GroovyAssert class
  • [GROOVY-6701] - index entries of same method name are missing in index-all.html
  • [GROOVY-6702] - Trait, public fields & as-operator
  • [GROOVY-6706] - Custom base script abstract method throws NPE with the @BaseScript annotation on imports
  • [GROOVY-6708] - Instantiating traits with generics that extend traits with generics does not compile
  • [GROOVY-6714] - GroovyDoc omits and/or misplaces documentation for methods in .java files.
  • [GROOVY-6722] - Compiler doesn't recognize covariant array of generics
  • [GROOVY-6723] - Type checking generic types on static methods incorrectly fails for trivial cases
  • [GROOVY-6724] - Missing temporary type information check if a receiver has a property with generics
  • [GROOVY-6725] - XML parsing error during grape uninstall
  • [GROOVY-6726] - index entries of classes are missing in index-all.html
  • [GROOVY-6729] - FirstParam.FirstGenericType don't works whe the method returns generic type
  • [GROOVY-6733] - VerifyError with CompileStatic
  • [GROOVY-6734] - StringGM#findAll(CharSequence, CharSequence, Closure) variant missing @CP hint
  • [GROOVY-6735] - regression in varargs treatment for static compilation
  • [GROOVY-6737] - @Delegate triggers BUG! exception in phase 'class generation'
  • [GROOVY-6818] - StackOverflow Exception when calling super.method, which returns an instance of the corresponding class.

Improvement

  • [GROOVY-3048] - Groovy Sql API should support stored procedures that have output parameters and return a result set
  • [GROOVY-3328] - Automatic imports for selected text execution
  • [GROOVY-4464] - Loosen white space restrictions
  • [GROOVY-4639] - Add isSet()/hasValue()/similar method to ConfigObject
  • [GROOVY-5159] - Grammar could accept nls! before SPREAD_DOT
  • [GROOVY-5461] - Make MarkupBuilder.getMkp() return MarkupBuilderHelper instead of Object
  • [GROOVY-5924] - Provide a mechanism to allow the type checker to know what are the expected argument types of a closure
  • [GROOVY-6159] - JsonBuilder list handling improvement
  • [GROOVY-6303] - Add ability to use a different font for the input/output area of Groovy Console
  • [GROOVY-6383] - Allow more conditional blocks other than "environments" in ConfigSlurper
  • [GROOVY-6393] - groovysh: suggest reducing startup time by loading commands from code
  • [GROOVY-6395] - groovysh tab-complete properties of Map/Node instances
  • [GROOVY-6397] - groovysh: prefix commands with ":" to avoid namespace overlap *
  • [GROOVY-6399] - groovysh: Completion of standalone default methods and infix keywords
  • [GROOVY-6448] - Add @DelegatesTo to AstSpecificationCompiler for better IDE autocomplete
  • [GROOVY-6459] - Add comment/uncomment function to groovy-console
  • [GROOVY-6466] - indy DTT#castToType usage
  • [GROOVY-6467] - usage of DTT#castToBoolean in indy
  • [GROOVY-6479] - Closure to SAM interface coercion doesn't handle contravariant types correctly
  • [GROOVY-6499] - groovysh: do not offer GroovyObject Default methods on tab completion
  • [GROOVY-6544] - SourceAwareCustomizer should combine SourceUnit+ClassNode
  • [GROOVY-6546] - Improve parser speeds of Groovy JSON parser while maintaining backward compatability
  • [GROOVY-6553] - jarjar should be used with the "normal" groovy.jar too
  • [GROOVY-6554] - Improve serialization speeds of JsonOutput while maintaining backward compatibility
  • [GROOVY-6572] - Add faster invocation path for closures in static compilation mode
  • [GROOVY-6585] - Extend @BaseScript so that script bodies can be implemented in a method named something other than run.
  • [GROOVY-6588] - Enhance GroovyAssert for JUnit 4 Support
  • [GROOVY-6592] - Allow @BaseScript on import or package definition
  • [GROOVY-6615] - Support custom abstract method for configured Script base class like @BaseScript does
  • [GROOVY-6645] - AstSpecificationCompiler and his methods should be public
  • [GROOVY-6652] - Upgrade to ASM 5.0.1
  • [GROOVY-6665] - maxRows in Groovy.sql.Sql goes one too far
  • [GROOVY-6677] - ForceOverride produces stack overflow
  • [GROOVY-6678] - XmlParser should provide a trimIgnorableWhitespace setting *
  • [GROOVY-6682] - DOMCategory should not trim whitespace by default *
  • [GROOVY-6685] - Align naming for XmlParser/XmlSlurper/DOMCategory whitespace handling *
  • [GROOVY-6698] - Cleanup Gradle build in preparation for Gradle 2

New Feature

  • [GROOVY-1642] - Script needs to be able to retrieve the full path of "its" file
  • [GROOVY-2115] - text() method on NodeChild with XmlSlurper returns composite. Need just local text.
  • [GROOVY-6377] - New Groovy NIO module
  • [GROOVY-6484] - Provide an AST that creates a "fluent builder" for an immutable class
  • [GROOVY-6570] - Add @TailRecursive AST transformation
  • [GROOVY-6604] - PojoBuilder New Feature Proposal
  • [GROOVY-6649] - Support a Sortable annotation and transform
  • [GROOVY-6661] - Support the concept of "traits"
  • [GROOVY-6673] - Reflection API for Traits
  • [GROOVY-6709] - withCloseable{} DGM method for Closeable

Sub-task

  • [GROOVY-5923] - CompileStatic: closure dispatch is sometimes not type checked

Task

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