Changelog for Groovy 4.0.0-alpha-1
Bug
- [GROOVY-4945] - Incorrect "Possible solutions" when calling a method on super in a non-derived class
- [GROOVY-5103] - groovy compiler ignores import * for static nested classes in java sources
- [GROOVY-7094] - Semantic of access super fields is not consistent: super.@field == super.field
- [GROOVY-7232] - Delegation inconsistent between methods and properties in nested closures *
- [GROOVY-7304] - Cannot mutate private field from within an AIC or a closure
- [GROOVY-7373] - Interact Closures withing Groovy Trait methods are not recognized by the implementing class
- [GROOVY-7399] - Method "with()" fails to call on the object reference in Trait
- [GROOVY-7512] - Cannot call Trait method from Closure when using static compilation
- [GROOVY-7549] - java.lang.IllegalAccessError occurs when attempting to run code built with CompileStatic
- [GROOVY-7701] - org.codehaus.groovy.runtime.typehandling.GroovyCastException in Groovy ".with { ... }" - Block
- [GROOVY-7759] - @Lazy does not work when used in a Trait
- [GROOVY-7843] - Trait method calling closure cannot be inherited while using CompileStatic
- [GROOVY-7848] - Closure generic parameters ignored and return types missing from collections methods
- [GROOVY-8000] - Problem With Trait Generics
- [GROOVY-8049] - Trait properties with 'with'
- [GROOVY-8100] - MarkupBuilder cant yield before first tag
- [GROOVY-8274] - methodMissing not executed when the delegate is an inner class
- [GROOVY-8284] - getMetaClass should be annotated as (JavaBeans) transient
- [GROOVY-8707] - += in CompileStatic dynamically sets property instead of using setter
- [GROOVY-8715] - Cannot resolve array of inner class from type in same package (no import)
- [GROOVY-8774] - Stub generator doesn't handle package-info
- [GROOVY-8820] - Closure inside trait cannot use Closure's delegate variables
- [GROOVY-8840] - CLONE - Compile Static causes getAt to fail (advanced cases)
- [GROOVY-8961] - Cannot pass generic list into explicit setter
- [GROOVY-8999] - Access to private fields and methods from subclass exhibits strange behavior
- [GROOVY-9146] - Seems to be a gap in method reference support
- [GROOVY-9185] - groovyc doesn't keep RetentionPolicy in generated bytecode
- [GROOVY-9194] - Groovy fails when a script starts with a #
- [GROOVY-9255] - trait property throws MissingPropertyException when read using qualified super expression
- [GROOVY-9256] - trait qualified-super expressions fail when inside closure
- [GROOVY-9310] - Groovy does not ignore second bash directive
- [GROOVY-9344] - CCE in closure shared variable assignment
- [GROOVY-9385] - Access to outer class private field from closure leads to ClassCastException (@CompileStatic)
- [GROOVY-9386] - Field initialized in a trait using tap doesn't work correctly
- [GROOVY-9387] - Using this.method() in closures inside BuilderSupport subclasses doesn't dispatch properly
- [GROOVY-9389] - STC regression using increment/decrement operators on custom bean accessors in Groovy 3.0.0
- [GROOVY-9392] - GroovyClassLoader as system class loader fails in Groovy 3
- [GROOVY-9396] - Captured arguments in closures are not annotated with @Generated
- [GROOVY-9398] - GroovyScriptEngine cannot recompile a class that uses generic parameters
- [GROOVY-9399] - Annotations on annotation methods are missing in the AST
- [GROOVY-9400] - Regression in end of line handling between 2.5.9 and 3.0.0
- [GROOVY-9405] - Junit 5 IncompatibleClassChangeError
- [GROOVY-9409] - org.codehaus.groovy.runtime.callsite.GroovySunClassLoader is unusable
- [GROOVY-9410] - Writable is not on classpath for compilation when using maven repository
- [GROOVY-9414] - Groovy 3.0.1 : @Delegate does not work with default getter
- [GROOVY-9420] - Incorrect type inference on map[key]
- [GROOVY-9422] - @CompileStatic non-static inner class instantiation in closure
- [GROOVY-9427] - Regression in GString handling
- [GROOVY-9429] - Illegal reflective access warnings occurred when getting property
- [GROOVY-9433] - grammar ambiguity with ternary expression being confused with safe indexing
- [GROOVY-9448] - Missing throws clause of constructor declaration in java stubs
- [GROOVY-9449] - Mutliple methods with the same name now fail before AST transformations can fix it
- [GROOVY-9450] - DefaultGroovyMethods findIndexOf method can't use startIndex
- [GROOVY-9452] - Multiple Repeatable Annotations Container generated if an explicit container is present and an implicit one required
- [GROOVY-9454] - STC: regression for instanceof on generic field/property
- [GROOVY-9455] - STC: no error for if (!(x instanceof T)) x.methodFromT()
- [GROOVY-9459] - Line number information for automatically inserted return statements quirky
- [GROOVY-9460] - Groovy 3 Compilation Failure with method with argument Class<?> called with Class<D>
- [GROOVY-9462] - Groovy 3 BUG! exception in phase 'conversion' in source unit Caused by NullPointerException
- [GROOVY-9463] - STC: no type check error for invalid method pointer or reference
- [GROOVY-9465] - GroovyDoc: class-header is not always displayed
- [GROOVY-9469] - Original exception during global AST transformation no longer preserved in error message
- [GROOVY-9477] - FastStringServiceFactory SPI loading in OSGi
- [GROOVY-9480] - New v9 ClassFinder throws NoSuchFileException/UnsupportedOperationException and writes it to stderr
- [GROOVY-9483] - Console exits when Cancel is clicked on the "Save changes" dialog
- [GROOVY-9485] - metaclass is not initialized
- [GROOVY-9489] - package.html files being ignored during javadoc generation when building on JDK9+
- [GROOVY-9501] - MissingPropertyException for access to private static field from inner class when subclassing
- [GROOVY-9505] - java.lang.UnsupportedOperationException: This feature requires ASM8 on JDK 14 in Spock tests
- [GROOVY-9506] - Joint compilation is broken
- [GROOVY-9507] - JSP style loop in StreamingTemplateEngine template results in TemplateParseException
- [GROOVY-9508] - groovyConsole CLI plumbing for --enable-preview command-line switch is missing one part
- [GROOVY-9511] - Annotation spanning lines is not supported by Parrot
- [GROOVY-9515] - MethodHandle with spread args should not be cached
- [GROOVY-9516] - Static compiler infers wrong type for implicitly shared variables
- [GROOVY-9517] - CompileStatic typeCasting runtime error from Class Array to Class List
- [GROOVY-9518] - Closure argument types not inferred when calling a constructor
- [GROOVY-9522] - Throwing NPE when I use ternary operator with something special
- [GROOVY-9526] - Failed to reload classes with generic parameters
- [GROOVY-9529] - Static type checking сannot choose between Map#getAt(Object) and Object#getAt(String) methods
- [GROOVY-9543] - groovydoc multiple issues with generics
- [GROOVY-9546] - Annotations on class signature are rendered incorrectly
- [GROOVY-9547] - @see tags are not working properly
- [GROOVY-9548] - groovydoc: properties claim to be "private" and don't show annotations
- [GROOVY-9554] - @Field variable access within closures broken
- [GROOVY-9556] - Stub generated without the effect of AST transformation makes joint compilation fail
- [GROOVY-9558] - Wrong code for putAt on Map that is member of closure delegate
- [GROOVY-9562] - Base class property causes CCE
- [GROOVY-9566] - Default import for Proxy is wrong
- [GROOVY-9567] - groovydoc: abstract methods do not have abstract modifier
- [GROOVY-9568] - groovydoc: extra default constructor
- [GROOVY-9569] - SC: new compiler error for access of static, non-final, outer-class field *
- [GROOVY-9570] - Class-Level Closure Definition With Generics Fails TypeChecked
- [GROOVY-9571] - groovydoc: annotation definitions, enums, interfaces, and traits have a default ctor
- [GROOVY-9573] - groovydoc: byte[] shown as [B
- [GROOVY-9574] - ConcurrentModificationException in Java9.concealedPackageList
- [GROOVY-9575] - ASTNode.hashCode violates Object.hashCode contract: does not return consistent value
- [GROOVY-9577] - Order of ModuleNode#getImports() is expected but not guaranteed
- [GROOVY-9580] - STC: return type checking for generic, covariant property gives false error
- [GROOVY-9581] - コンパイラで、クロージャから静的クラス変数を参照できない.
- [GROOVY-9584] - CLONE - Error when creation a variable named "context"
- [GROOVY-9586] - SC: calling trait method inside closure has incorrect receivers data
- [GROOVY-9587] - Scope of method call changed from non-static to static 2.4->2.5
- [GROOVY-9588] - groovyCompile 6x slower in 3.0.4 than 2.5.6
- [GROOVY-9591] - Compiler error for use of variable expression within tap closure
- [GROOVY-9597] - CompileStatic: @ClosureParams in @DelegatesTo doesn't work
- [GROOVY-9598] - CompileStatic: Runtime error: Access outer class property from static inner in @DelegatesTo
- [GROOVY-9600] - Picocli-related VersionProvider helper classes should be public to avoid access warnings
- [GROOVY-9601] - Parsing text into a class became much slower under Groovy 3.x
- [GROOVY-9603] - Assignment of Map literal to Map element fails to compile (static)
- [GROOVY-9604] - STC: method or property missing errors for Closure's getResolveStrategy(), etc.
- [GROOVY-9605] - leftShift operator does not work on BigInteger (throws UnsupportedOperationException)
- [GROOVY-9606] - Traits using generics generate incorrect stub for Methods
- [GROOVY-9607] - Class generation regression in 3.0.5-ss: This method should not have been called
- [GROOVY-9615] - super.method() can trigger method on outer class in case of missing method
- [GROOVY-9618] - Property reference resolves to field, not getter when property name is single upper-case letter *
- [GROOVY-9620] - MetaClassImpl uses findPropertyInClassHierarchy inefficiently
- [GROOVY-9634] - ClassNode hasPossibleMethod and tryFindPossibleMethod make inefficient use of getMethods(String) and getSuperClass()
- [GROOVY-9635] - Generic types get mixed up
- [GROOVY-9642] - Inner interface of parent class unresolved in anon. inner class expression
- [GROOVY-9643] - Using Spock thrown() method causes IllegalAccessError for 2.0-M2-groovy-3.0 on JDK 8 with noverify switch
- [GROOVY-9645] - Inconsistencies in JavaBean naming for property access
- [GROOVY-9647] - Module changes for Groovy 4
- [GROOVY-9648] - Bad error message when attempting to call a missing constructor
- [GROOVY-9652] - SC: ClassCastException for comparison to single-character string literal in closure
- [GROOVY-9653] - SC: ClassCastException on delegate object property set
- [GROOVY-9654] - should not consider bridge methods when determining whether an overridden method annotated with @Override is valid
- [GROOVY-9657] - JmxMetaMapBuilder.buildOperationMapFrom throw StringIndexOutOfBoundsException
- [GROOVY-9658] - Infinite recursion exists in HashCodeHelper#updateHash(int, java.lang.Character)
- [GROOVY-9661] - Since Groovy 3 ArrayExpression#sizeExpression can suddenly return null
- [GROOVY-9666] - ConcurrentModificationException with ASTTransformation
- [GROOVY-9672] - trait conflict resolution not available for static methods
- [GROOVY-9673] - GroovyCastException when using Trait.super.name = ... with multiple setters
- [GROOVY-9688] - Groovy 3.0.5 references groovyjarjaropenbeans.BeanInfo (doesn't seem to be included in the distribution) and 3.0.0.rc1 uses java.beans.BeanInfo
- [GROOVY-9691] - Method call "main" is replaced with StaticMethodCallExpression in script
- [GROOVY-9692] - Adding extension method 'call' on ArrayList with Closure as a parameter stopped working in 3.0.x
- [GROOVY-9699] - @CompileStatic does not use bridge methods for keyed map access
- [GROOVY-9700] - SC: set groovy property written for variable expression assignment that should be direct setter call
- [GROOVY-9702] - ASTTest annotation has runtime retention and transform removes required member from AST *
- [GROOVY-9703] - DefaultGroovyMethods.reverse(T[], true) performs extra copy
- [GROOVY-9704] - The '~' negate operator causes an ASM processing error when static compiled
- [GROOVY-9706] - Groovy 3.0.5 varargs [Static type checking] - Cannot find matching method
- [GROOVY-9711] - @Sortable annotation always sorts by the parent properties
- [GROOVY-9712] - groovyc fails when compiling class starting with unicode character
- [GROOVY-9717] - 3.0 stubs include packages annotations on classes other than package-info.groovy
- [GROOVY-9732] - CompareToNullExpression has empty implementation of transformExpression
- [GROOVY-9735] - STC: incorrect error for actual vs inferred closure parameter type
- [GROOVY-9739] - NPE in ClassNode.isDerivedFrom while compiling trait with Groovy 3.0.5
- [GROOVY-9751] - STC: error for addAll with collect argument
- [GROOVY-9784] - GroovyRowResult not assignable to Map<String, Object> with static type checker
- [GROOVY-11242] - Stackoverflow error when calling super from overridden method
Dependency upgrade
- [GROOVY-9403] - Bump javaparser to 3.15.12
- [GROOVY-9419] - Bump gradle to 6.2.1
- [GROOVY-9428] - Bump javaparser to 3.15.13
- [GROOVY-9437] - Bump gradle to 6.2.2
- [GROOVY-9466] - Bump javaparser to 3.15.15
- [GROOVY-9488] - Bump javaparser to 3.15.17
- [GROOVY-9490] - Bump ASM to 8.0
- [GROOVY-9497] - Bump asm to 8.0.1
- [GROOVY-9502] - Bump junit to 5.6.2
- [GROOVY-9503] - Bump javaparser to 3.15.18
- [GROOVY-9520] - Update Spotbugs/Spotbugs plugin to 4.0.2/4.0.5
- [GROOVY-9527] - Bump javaparser to 3.15.21
- [GROOVY-9536] - Bump testng to 7.2.0
- [GROOVY-9540] - Bump spotbugs plugin to 4.0.8
- [GROOVY-9544] - Bump gradle to 6.4
- [GROOVY-9551] - Bump JavaParser to 3.15.22
- [GROOVY-9552] - Bump Ant versions to address: [CVE-2020-1945] Apache Ant insecure temporary file vulnerability
- [GROOVY-9557] - Bump gradle to 6.4.1
- [GROOVY-9559] - Bump log4j2 version to 2.13.3
- [GROOVY-9560] - Update Spotbugs/Spotbugs plugin to 4.0.3/4.2.0
- [GROOVY-9583] - Bump gradle to 6.5
- [GROOVY-9590] - Bump javaparser to 3.16.1
- [GROOVY-9593] - Bump Spock to 2.0-M3-groovy-3.0
- [GROOVY-9621] - Bump gradle to 6.5.1
- [GROOVY-9622] - Bump checkstyle to 8.34
- [GROOVY-9623] - Bump Jackson version to 2.11.1
- [GROOVY-9624] - Bump Codenarc to 1.6
- [GROOVY-9625] - Bump spotbugs/plugin to 4.0.6/4.4.4
- [GROOVY-9626] - Bump rat to 0.7.0
- [GROOVY-9627] - Bump picocli to 4.4.0 *
- [GROOVY-9670] - Bump TestNG to 7.3.0
- [GROOVY-9685] - Bump gradle to 6.6
- [GROOVY-9686] - Bump spotbugs library/plugin to 4.1.1/4.5.0
- [GROOVY-9687] - Bump versions plugin to 0.29.0
- [GROOVY-9689] - Bump codenarc to 1.6.1
- [GROOVY-9690] - Bump checkstyle to 8.35
- [GROOVY-9693] - bump picocli to 4.5.0
- [GROOVY-9694] - bump jackson version to 2.11.2
- [GROOVY-9697] - Bump asciidoctor to 3.2.0
- [GROOVY-9738] - Bump xstream to 1.4.13
- [GROOVY-9740] - Bump JUnit5/platform to 5.7.0/1.7.0
- [GROOVY-9741] - Bump gradle to 6.6.1
- [GROOVY-9743] - Bump hsqldb to 2.5.1
- [GROOVY-9746] - Bump picocli to 4.5.1
- [GROOVY-9747] - Bump versions plugin to 0.33.0
- [GROOVY-9748] - Bump spotbugs to 4.1.2
- [GROOVY-9749] - Bump sonarqube plugin to 3.0
- [GROOVY-9750] - Bump checkstyle to 8.36.1
- [GROOVY-9752] - Bump ASM version to 9.0 and JDK 16 support
Improvement
- [GROOVY-4694] - Move AstBuilderTransformation Global xForm to separate module
- [GROOVY-9377] - Support JDK15
- [GROOVY-9394] - Groovy could provide some minimal methods to assist with migrating between Groovy versions
- [GROOVY-9408] - Avoid unnecessary looking up default import classes when resolving types
- [GROOVY-9417] - Make @NullCheck play nicer with @Immutable
- [GROOVY-9430] - Added support for ScriptEngine.FILENAME behaviour
- [GROOVY-9447] - Add a parse tree viewer to groovy console
- [GROOVY-9468] - Support running as Java code in the Groovy console
- [GROOVY-9473] - Support compiling as Java code in the Groovy console
- [GROOVY-9478] - Groovy Ant task could support Ant resources
- [GROOVY-9486] - Remove redundant code `Sentinel`
- [GROOVY-9487] - Update and check if initialized via same field of metaclass
- [GROOVY-9492] - Relax groovy.test.NotYetImplemented dependency on JUnit 4's AssertionFailedError *
- [GROOVY-9504] - Add support for Path to slurper classes
- [GROOVY-9509] - JavaShell should allow options to be passed
- [GROOVY-9512] - Control the fallback threshold of indy with different switch
- [GROOVY-9513] - Enable indy by default
- [GROOVY-9514] - Remove antlr2 parser
- [GROOVY-9545] - DGM: add toArray(Class) extension method for java.util.stream.Stream
- [GROOVY-9549] - groovydoc: implemented interfaces not shown in class description
- [GROOVY-9576] - groovydoc: $INIT static method shown on Groovy enums
- [GROOVY-9578] - Also output aborted tests in JUnit 5 GroovyJUnitRunnerHelper
- [GROOVY-9589] - Parse source codes in parallel
- [GROOVY-9592] - Replace "groovy.generate.stub.in.memory" with "groovy.mem.stub"
- [GROOVY-9594] - Rename whitelist/blacklist in SecureASTCustomizer to more meaningful names *
- [GROOVY-9602] - return more specific type for ifS/ifElseS helper methods in GeneralUtils
- [GROOVY-9619] - Adjust pom for groovy-test-junit5 so that junit-jupiter-api is compile time not runtime
- [GROOVY-9631] - Replace legacy data structure with Java collection *
- [GROOVY-9633] - Improve the doco on the Groovy Console
- [GROOVY-9637] - Improve the performance of GString
- [GROOVY-9644] - Add java.io.File to immutable type list
- [GROOVY-9667] - Tweak ManagedIdentityConcurrentMap for better performance
- [GROOVY-9669] - Enhance immutability check
- [GROOVY-9682] - Support coerce for @NamedVariant
- [GROOVY-9726] - Compile error needed for illegal field modifier combination
- [GROOVY-9736] - Remove org.objectweb.asm.Opcodes as implemented interface in most (all?) places *
- [GROOVY-9744] - PropertyNode should be enriched to support getter/setter names
- [GROOVY-9745] - Provide a way to filter illegal/discouraged characters when using MarkupBuilder
- [GROOVY-9753] - EqualsAndHashCode should be enhanced to be POJO aware
- [GROOVY-9756] - MapConstructor generated code should be POJO aware
New Feature
- [GROOVY-7492] - Groovy should allow CompileStatic classes to not implement GroovyObject (AKA @POJO)
- [GROOVY-9318] - SecureASTCustomizer: add support for allowing or blocking entire package trees
- [GROOVY-9365] - Implement JavaShell to run Java code
- [GROOVY-9384] - Groovy should provide a Maven BOM
- [GROOVY-9534] - Groovy could provide an AST transform to hook into platform logging (JEP 264)
- [GROOVY-9671] - Absorb GContracts project into Groovy project
- [GROOVY-9675] - There should be a mechanism to disable individual macro methods & extension methods
- [GROOVY-9677] - provide a library of pre-canned macro methods
- [GROOVY-9680] - Groovy 4 should provide some pre-canned type checker extensions
- [GROOVY-9684] - We should provide shouldFail/assertScript variants which take a shell
- [GROOVY-9754] - Provide a record-like equivalent
- [GROOVY-9755] - ToString AST transformation should be enhanced to be POJO aware
Task
- [GROOVY-6843] - Remove GroovyDoc JANSI dependency
- [GROOVY-9380] - VMPlugin refactor: Coalesce Java5 through Java7 into Java8 *
* potentially breaking change (read issue for details - even minor differences are sometimes flagged as potentially breaking changes)