Changelog for Groovy 2.1.0

Bug

  • [GROOVY-3153] - groovy, groovysh, groovyconsole, etc Cannot use spaces in supplied classpath -cp
  • [GROOVY-3258] - groovy.xml.QName uses string interning of volatile data and the trim antipattern
  • [GROOVY-3326] - Obscure method getTimeZone(java.util.Date) in org.codehaus.groovy.runtime.TimeCategory *
  • [GROOVY-3419] - Groovy fails to launch scripts from Cygwin
  • [GROOVY-4637] - XmlSlurper Unable to Access Attributes with Same Name but in Different Namespaces
  • [GROOVY-4648] - Pasting into groovy console using shift+insert turns overwrite mode on.
  • [GROOVY-4670] - groovy.ui.Console cannot be extended
  • [GROOVY-4950] - ConfigSlurper broken on AppEngine
  • [GROOVY-5009] - Problem dispatching array as argument to a closure
  • [GROOVY-5074] - SwingBuilder never shuts down the default executor service
  • [GROOVY-5191] - Running script with '--enoding' param and some script parameters
  • [GROOVY-5366] - unable to add assertions via compile time transform
  • [GROOVY-5394] - Grape's Grab ignores 'ext' when classifier is not set
  • [GROOVY-5433] - Node is missing documentation
  • [GROOVY-5439] - error: incompatible types on Java stubs returning generics
  • [GROOVY-5468] - Documentation error for ExpandoMetaClass
  • [GROOVY-5473] - groovysh 2.0.0-beta-3 ERROR java.lang.ClassCastException: required class java.lang.Class but encountered class org.fusesource.jansi.AnsiRenderer
  • [GROOVY-5583] - Parsing problem of number literal 0x8000000000000000L
  • [GROOVY-5590] - Caused by: org.codehaus.groovy.runtime.InvokerInvocationException: java.io.IOException: Cannot run program "find": java.io.IOException: error=24, Too many open files
  • [GROOVY-5591] - groovy-all-2.0.0-sources.jar is missing lots of source files
  • [GROOVY-5598] - Cannot use @CompileStatic with Thread.start method
  • [GROOVY-5607] - @Compile static Sql.newInstance
  • [GROOVY-5608] - @CompileStatic casting problem
  • [GROOVY-5630] - Java stub generator generates wrong cast for return value of generic method
  • [GROOVY-5632] - Closure default params can cause BUG! exception in phase 'class generation'
  • [GROOVY-5635] - SyntaxException.getEndColumn() returns "getStartColumn() + 1"
  • [GROOVY-5636] - java.lang.ArrayIndexOutOfBoundsException: size==0
  • [GROOVY-5660] - JsonOutput Date formatting is not threadsafe
  • [GROOVY-5665] - Groovyc ant task fails with nested javac when using generics
  • [GROOVY-5666] - Incorrectly finding "where" in query string
  • [GROOVY-5668] - Input stream not closed
  • [GROOVY-5669] - DOMCategory should provide name() convenience method for Node's not just Element's
  • [GROOVY-5673] - groovy does not detect correct Java version on Mac
  • [GROOVY-5675] - Stub compiler expands generic-inner-class variable declaration incorrectly
  • [GROOVY-5687] - Constants defined in an interface not visible to implementing subclass in a static context
  • [GROOVY-5691] - TimeoutException immediately thrown when using both TimedInterrupt and with {} closure on a Map
  • [GROOVY-5695] - jarsigner fails because two duplicate objects exists in groovy-2.0.1.jar
  • [GROOVY-5705] - STC: calling a closure stored in a property yields an NPE
  • [GROOVY-5710] - Stub generator should not use raw types when casting default return values
  • [GROOVY-5712] - @TypeChecked and "Charset ISO_8859_1_CHARSET = Charset.forName("ISO-8859-1")": Cannot assign value of type java.lang.Class to variable of type java.nio.charset.Charset
  • [GROOVY-5723] - Problem with cached calls with GroovyServlet
  • [GROOVY-5729] - Delegation to an interface with deprecated methods shows a compile error
  • [GROOVY-5732] - Delegating to an abstract class hierarchy doesn't implement interfaces at a higher level
  • [GROOVY-5733] - JsonBuilder toPrettyString gen "\"\"" for emtyString it should be ""
  • [GROOVY-5737] - @Log won't compile with @CompileStatic if "log" is used in a Closure
  • [GROOVY-5738] - The if(instanceof) block is not inferring type in a Closure
  • [GROOVY-5739] - performance problem in DefaultGroovyMethods.removeAll()
  • [GROOVY-5751] - Adding milliseconds with TimeCategory gives incorrect toString
  • [GROOVY-5762] - Static compilation runtime error when using mapped constructor
  • [GROOVY-5766] - Changes in groovy.json.JsonOutput require extensive permissions that aren't compatible with some web frameworks.
  • [GROOVY-5775] - XmlTemplateEngine does not escape expression values (part 1)
  • [GROOVY-5779] - Static type checking - Color.red recognized as int
  • [GROOVY-5792] - XmlNodePrinter uses quote variables for more than just attributes
  • [GROOVY-5803] - wasted work in "ClassNode.addMixin"
  • [GROOVY-5811] - InvokerInvocationException not being unwrapped *
  • [GROOVY-5812] - Java code behaves wrong on 2.0.5 but not on 1.8.8
  • [GROOVY-5828] - No way to tell @Immutable that you're using an Immutable List structure already
  • [GROOVY-5838] - groovydoc not working (ClassNotFoundException)
  • [GROOVY-5844] - Copy/paste error in EmptyBorderFactory
  • [GROOVY-5849] - wasted work in "ClassCompletionVerifier.checkMethodForWeakerAccessPrivileges"
  • [GROOVY-5850] - wasted work in "StaticTypeCheckingVisitor.inferReturnTypeGenerics"
  • [GROOVY-5851] - wasted work in "SimpleGroovyClassDocAssembler.extractName"
  • [GROOVY-5853] - wasted work in "DefaultGrailsDomainClassInjector.implementsMethod"
  • [GROOVY-5854] - wasted work in the "ClassNode" constructor
  • [GROOVY-5858] - "string".count('') fails
  • [GROOVY-5863] - ImportCustomizer for CompilerCustomizationBuilder is not added to configscript CompilerConfiguration
  • [GROOVY-5865] - getAt(EmptyRange) not called when passing an EmptyRange to getAt(Collection)
  • [GROOVY-5867] - xml:lang attribute appears to break StreamingMarkupBuilder >= 2.0.6
  • [GROOVY-5868] - ConfigObject is unexpectedly no longer Cloneable
  • [GROOVY-5870] - Groovy:[Static type checking] - Inconvertible types: cannot cast javax.script.ScriptEngine to javax.script.Invocable
  • [GROOVY-5872] - null initial value can't be inferred with generic field of a class
  • [GROOVY-5874] - Groovyc: BUG! exception in phase 'class generation' in source unit
  • [GROOVY-5878] - startGroovy breaks one-liners containing double quotes
  • [GROOVY-5879] - combining the default namespace and normal namespaces with StreamingMarkupBuilder causes issues
  • [GROOVY-5880] - @CompileStatic does not infer the type of caught exception
  • [GROOVY-5884] - @CompileStatic(SKIP) does not work for constructors
  • [GROOVY-5887] - The spread-call syntax is statically compiled for collections, but not for arrays
  • [GROOVY-5888] - Compiler wrongly tries only static resolution when calling spread operator on a collection of strings
  • [GROOVY-5889] - Compiler hangs on this code
  • [GROOVY-5890] - @CompileStatic resolves the 'in' operator wrongly
  • [GROOVY-5892] - @CompileStatic VerifyError
  • [GROOVY-5897] - Multiple problems with static method invocations and @CompileStatic
  • [GROOVY-5901] - @AutoClone excludes param works correctly only for COPY_CONSTRUCTOR AutoCloneStyle
  • [GROOVY-5906] - StackOverflow with CompileStatic
  • [GROOVY-5907] - Object.with seems to lose typing when generics are used
  • [GROOVY-5910] - Non found static type checking extensions throw unexplicit NPE
  • [GROOVY-5915] - TokenException returns wrong endColumn value
  • [GROOVY-5917] - -configscript option for groovy command.
  • [GROOVY-5918] - JsonBuilder.toString() fails with StackOverflowError when using Expando
  • [GROOVY-5919] - Multiple problems with @CompileStatic and abstract inheritance
  • [GROOVY-5922] - CompileStatic: long loses type when bitwise OR applied to it
  • [GROOVY-5925] - Casting map as Random results in java.lang.VerifyError
  • [GROOVY-5926] - ArrayIndexOutOfBounds when calling super method in SKIP @CompileStatic section
  • [GROOVY-5927] - JsonBuilder.toPrettyString() incorrect for zero-length String
  • [GROOVY-5930] - -baseScript option for groovy command
  • [GROOVY-5932] - covariant method addition causing call to abstract method
  • [GROOVY-5933] - @TypeChecked$TypeCheckingInfo is added to constructors
  • [GROOVY-5934] - java.lang.OutOfMemoryError through Iterator.collectEntries and others (part 1: handle collectEntries)
  • [GROOVY-5941] - CompileStatic: VerifierError calling method within findAll closure
  • [GROOVY-5943] - TypeChecker: Fails with NPE when use generics in inheritance tree?
  • [GROOVY-5951] - Compile static: Groovyc reports error after instanceof check
  • [GROOVY-6006] - CLONE - ConfigObject is unexpectedly no longer Cloneable

Improvement

  • [GROOVY-4432] - Provide a way to see generated stub code
  • [GROOVY-4572] - Provide File method to get directory size
  • [GROOVY-4714] - @EqualsAndHashCode should allow caching of hashCode values
  • [GROOVY-4879] - Add createTempDir() to File
  • [GROOVY-5242] - groovy.lang.Closure javadoc should mention method resolution in resolve strategy constants
  • [GROOVY-5370] - ConfigSlurper - multiple environment blocks broken
  • [GROOVY-5391] - Add ClassNode lookup abstraction for compiler
  • [GROOVY-5446] - Make @Delegate carry over method annotations
  • [GROOVY-5452] - Process should have a method called closeStreams()
  • [GROOVY-5472] - remove $getCallSiteArray for indy compilation
  • [GROOVY-5509] - Add base script option to groovyc and its ant task
  • [GROOVY-5553] - Provide a builder for compilation customizers
  • [GROOVY-5554] - AST customizer working as a guard for another
  • [GROOVY-5560] - Add DGM leftShift and other appropriate methods for java.lang.Appendable interface
  • [GROOVY-5563] - Option to default to Static Compilation
  • [GROOVY-5626] - Remove buildSrc's target and .gradle directories from the source distribution
  • [GROOVY-5646] - Allow customization of @Singleton's instance getter name
  • [GROOVY-5667] - upgrade to gradle 1.1
  • [GROOVY-5680] - collectMany should have a map variant
  • [GROOVY-5716] - @Immutable annotation should allow Cloneable fields
  • [GROOVY-5745] - DGM should have a getAt method for Iterable
  • [GROOVY-5761] - getBytes for GString
  • [GROOVY-5767] - Support for DSL type checking
  • [GROOVY-5794] - Upgrade junit to 4.11
  • [GROOVY-5795] - Upgrade testng to 6.8
  • [GROOVY-5796] - upgrade qdox to 1.12.1
  • [GROOVY-5813] - array coercion missing for subarray assignment
  • [GROOVY-5815] - The range interface should return the generic type T from getTo() and getFrom()
  • [GROOVY-5816] - Add an "encoding" option for Groovydoc tool and Ant task
  • [GROOVY-5840] - support jar: in addition to file: and http: for urls when running scripts on the command line
  • [GROOVY-5845] - Add an includePackage attribute for the ToString AST transform
  • [GROOVY-5862] - Pretty toString() for AnnotationConstantExpression
  • [GROOVY-5905] - NP when AST implementation class lacks @GroovyASTTransformation
  • [GROOVY-5911] - @CompileDynamic annotation
  • [GROOVY-5916] - Provide a way to lookup class nodes from static type checking extension scripts
  • [GROOVY-5928] - @ToString should allow caching of toString values

New Feature

  • [GROOVY-3689] - Element.serialize
  • [GROOVY-5503] - Compiler flag for type checking most classes, and TypeUnchecked annotation override
  • [GROOVY-5549] - add DGM variant for Map#subMap supporting an array of keys
  • [GROOVY-5682] - Add clone or copy constructor to XML Node
  • [GROOVY-5714] - @DelegatesTo annotation for IDEs/TypeChecker
  • [GROOVY-5877] - Provide a flag for the groovyc ant task to control whether it searches the classpath for source files
  • [GROOVY-5886] - Support an Observable version of Set

Sub-task

  • [GROOVY-3394] - public api documentation for entire groovy.util.slurpersupport package - especially GPathResult

Task

Wish

  • [GROOVY-5821] - Provide a way to assemble an annoation consisting of several other
  • [GROOVY-5904] - Create/Distribute an archive containing source, binary and documentation

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