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
- [GROOVY-6347] - Upgrade TestNG dependency to version 6.8.7
- [GROOVY-6366] - Update Jline to 2.11
- [GROOVY-6367] - Update JANSI to 1.11
- [GROOVY-6492] - Upgrade to Gradle 1.10
- [GROOVY-6667] - Dependency upgrades: ant to 1.9.3, xmlunit to 1.5, xstream to 1.4.7
- [GROOVY-6690] - Upgrade testng to 6.8.8
- [GROOVY-6719] - Upgrade to Log4j 2 RC1
- [GROOVY-6727] - Upgrade gpars to 1.2.0
* potentially breaking change (read issue for details - even minor differences are sometimes flagged as potentially breaking changes)