Changelog for Groovy 4.0.0

Bug

  • [GROOVY-10002] - STC: inconsistent support for assignment of list literals
  • [GROOVY-10006] - @CompileStatic fails to unify types
  • [GROOVY-10009] - TracingInterceptor throws NullPointerException if arguments contains a null argument
  • [GROOVY-10010] - STC: method call with GString elements in list/array has different error from assignment
  • [GROOVY-10011] - Combining flow typing and type argument inference does not work as expected
  • [GROOVY-10024] - Dollar slashy /$ string ending in backslash "breaks" the parser
  • [GROOVY-10027] - STC: NamedParams error for method call argument
  • [GROOVY-10033] - Compiler crash when encountering function reference on nested class
  • [GROOVY-10046] - NPE in static compiler
  • [GROOVY-10047] - STC infers Closure instead of SAM for method references
  • [GROOVY-10049] - STC fails when calling a generic method from another generic method
  • [GROOVY-10051] - STC: return type for unresolved placeholder with bound resolved to Object
  • [GROOVY-10053] - STC: Wrong type inferred for lambda parameter in a generic method
  • [GROOVY-10055] - STC does not support self bounded types
  • [GROOVY-10056] - Inferred parameter type of lambda expression for multi-dimensions array is not correct
  • [GROOVY-10057] - MissingMethodException for pointer/reference from Class instance to Class method
  • [GROOVY-10062] - STC: no type parameter inference for variadic method called with fewer arguments than parameters
  • [GROOVY-10063] - STC: multiple-assignment from tuple-bearing static method
  • [GROOVY-10067] - STC: Wrong return value type inferred for generic method with upper bound without parameters
  • [GROOVY-10071] - SC: closure with variadic parameter
  • [GROOVY-10072] - SC: closure with default argument(s)
  • [GROOVY-10075] - Static compiler incorrectly typechecks extension modules
  • [GROOVY-10079] - groovyc does not perform unboxing on Character type
  • [GROOVY-10080] - Closure with type argument inference does not work as expected
  • [GROOVY-10082] - Incompatible generic argument types when combining subtyping and closures
  • [GROOVY-10085] - Class.isCase() documentation does not clarify that Class.isCase(SomeClass) is false, or why
  • [GROOVY-10086] - STC misses type error when calling a vararg method
  • [GROOVY-10087] - STC does not perform boxing on chars when encountering assignment and function call
  • [GROOVY-10088] - STC: type argument not applied to error message
  • [GROOVY-10089] - SC: GroovyCastException for map value as constructor for Collection
  • [GROOVY-10091] - Incompatible generic argument types on closure's return type
  • [GROOVY-10094] - STC misses type checks on default arguments
  • [GROOVY-10097] - CLONE - Better propagation of InterruptedException (additional cases)
  • [GROOVY-10098] - Unexpected behaviour when the return type of a closure is a type parameter
  • [GROOVY-10102] - Type checking fails when calling trait method using indirect SelfType relation
  • [GROOVY-10103] - Lambda with command method call fails with cast exception
  • [GROOVY-10104] - SC: runtime error for default argument call expression
  • [GROOVY-10106] - STC error for call to static trait method from closure
  • [GROOVY-10107] - Cannot assign null to a variable with a bounded generic type
  • [GROOVY-10111] - compiler crash during canonicalization
  • [GROOVY-10113] - StackOverflowError in STC
  • [GROOVY-10121] - @AnnotationCollector does not work with JUnit 5
  • [GROOVY-10122] - Wrong cast in stubs generated
  • [GROOVY-10125] - FP Cycle detected in type parameter that extends another type parameter
  • [GROOVY-10128] - Cannot assign closure with long as return type to java.util.function.Function<X, Number>
  • [GROOVY-10132] - XmlUtil.serialize() Emoji bug
  • [GROOVY-10133] - Inconsistent method selection for [Bb]oolean properties *
  • [GROOVY-10134] - Groovy console can not highlight token properly sometimes
  • [GROOVY-10136] - [JDK16] Failed to find `public` method derived from `package` super class
  • [GROOVY-10141] - NPE in InnerClassVisitor for non-static inner class CCE within two AICs
  • [GROOVY-10144] - Calling method on specific trait fails when on different files
  • [GROOVY-10145] - Support JDK16
  • [GROOVY-10159] - Compilation failure: ClassCastException
  • [GROOVY-10164] - RootLoader cannot be set as system class loader in Java 12+
  • [GROOVY-10166] - Cannot call T#method(arg) with arguments <arg>
  • [GROOVY-10176] - @NamedVariant with primitives can't find method
  • [GROOVY-10178] - @CompileStatic and @NullCheck make compiler fail
  • [GROOVY-10179] - STC: instanceof and for-in variable type
  • [GROOVY-10180] - STC: instanceof and DGM each(Map,Closure)
  • [GROOVY-10181] - Groovy 3 AST for annotated fields reports wrong lastLineNumber if field not initialized
  • [GROOVY-10184] - NPE in SecureASTCustomizer with indirectImportCheckEnabled
  • [GROOVY-10188] - Different treatment of property expressions in closures from 2.4 to 2.5
  • [GROOVY-10189] - File.withWriter and Path.withWriter are inconsistent
  • [GROOVY-10191] - NoSuchMethodError during static field inlining is not caught, unlike NoSuchFieldException
  • [GROOVY-10199] - ASTTest cannot reference types from transform classpath
  • [GROOVY-10200] - Static scope error for variable in non-static method of static inner class
  • [GROOVY-10217] - Type inference does not work with GDK class enhancements
  • [GROOVY-10218] - BUG! exception in phase 'instruction selection' when non-existent method called
  • [GROOVY-10220] - Unexpected type mismatch when having conflicting type parameter names
  • [GROOVY-10222] - Unable to infer the type parameter of a parameterized function
  • [GROOVY-10225] - Unexpected NullPointerException during the "instruction selection" phase
  • [GROOVY-10228] - STC fails to substitute type variable in the presence of the diamond operator and a function call
  • [GROOVY-10229] - Question mark in the attribute for a class name
  • [GROOVY-10230] - Unexpected generics parameter arity mismatch in the "instruction selection" phase
  • [GROOVY-10232] - Massive increase in memory usage due to CacheableCallSite
  • [GROOVY-10234] - Groovyc throws Stackoverflow error on generic class with lower bound
  • [GROOVY-10235] - STC: Generic type of Set not correctly resolved when calling ConcurrentHashMap.newKeySet()
  • [GROOVY-10236] - Parser fails to parse a single-statement lambda when omitting parentheses for method call
  • [GROOVY-10238] - @CompileStatic @Canonical inner class throws RTE: NoSuchMethodError: java.util.Map.withDefault
  • [GROOVY-10239] - GroovyCastException when @CompileStatic and !in keyword are used together
  • [GROOVY-10243] - IOOBE thrown when parsing switch-expression without branches
  • [GROOVY-10248] - Groovy ResolveVisitor runs twice
  • [GROOVY-10249] - Generated stubs missing method from traits with array parameter
  • [GROOVY-10250] - Erroneous type inference of closure in STC
  • [GROOVY-10254] - STC: cannot return closure from method without casting
  • [GROOVY-10256] - STC: no error for incompatible type bounds on return value
  • [GROOVY-10261] - @NamedVariant: Default parameters on ctor/method are ignored when passing some named parameters
  • [GROOVY-10262] - MethodNode#getText can output incorrect modifiers
  • [GROOVY-10269] - STC: Stackoverflow Error when passing function reference to closure
  • [GROOVY-10277] - STC fails to catch type error on the return type of lambdas
  • [GROOVY-10280] - Type variable substitution does not work well when running into chain of field accesses
  • [GROOVY-10282] - STC: false positive for BiFunction and BinaryOperator with same type parameter
  • [GROOVY-10283] - Cannot assign type parameter whose bound is a parameterized type that takes a wildcard
  • [GROOVY-10289] - Regression with static and non static class mixing
  • [GROOVY-10291] - STC fails to substitute type variable when using the diamond operator and calling a closure
  • [GROOVY-10294] - Variable's inferred type is upcasted to an Object
  • [GROOVY-10299] - Groovy compiler generates invalid Java stubs
  • [GROOVY-10302] - StackOverflowError on Java 16+ for override method that delegates to super
  • [GROOVY-10303] - Compiler NPE within CompileStack#clear
  • [GROOVY-10306] - STC rejects program when assigning a closure that returns a class field
  • [GROOVY-10308] - SC incorrectly reports "access to Object#field" is forbidden
  • [GROOVY-10309] - Improper type variable substitution when involving type parameters with conficting names
  • [GROOVY-10310] - STC is unable to call parameterized function
  • [GROOVY-10311] - MetaClassImpl creates static meta property for non-static field and getter (no setter)
  • [GROOVY-10312] - MissingMethodException in method with default parameter in trait - regression in 3.0.9
  • [GROOVY-10314] - finally block produces long sequence of nop instructions
  • [GROOVY-10315] - Unable to infer type variable of parameterized function that expects two parameters
  • [GROOVY-10317] - Type variable substitution does not work properly on parameterized function's return type
  • [GROOVY-10318] - Weird behavior of !in operator
  • [GROOVY-10319] - Groovy3 CompileStatic bug: Method clone is protected in java.lang.Object
  • [GROOVY-10320] - Generics failed to compile with Groovy 3.0.9 when overriding plus operator
  • [GROOVY-10322] - Type variable of function does not shadow the corresponding type variable of class
  • [GROOVY-10323] - Compiler crashes on parameterized function with duplicate type variables
  • [GROOVY-10324] - STC is unable to infer type variable when combining parameterized types and the diamond operator
  • [GROOVY-10325] - STC: error for map*.value assignment
  • [GROOVY-10326] - STC: missing error for map*.key assignment
  • [GROOVY-10328] - STC: incorrect type inference for list, map, etc. with lower bound generics
  • [GROOVY-10329] - import static star: add support for static callable property
  • [GROOVY-10330] - STC instantiates type variable with a wrong type when calling an instance method of the same class
  • [GROOVY-10336] - STC crashes when passing method reference to an inner closure
  • [GROOVY-10337] - STC rejects program on compiling constructor initialization with a wildcard type
  • [GROOVY-10339] - STC instantiates parameterized function with a wrong type leading to unsoundness
  • [GROOVY-10344] - STC crashes when bound has two wildcard types as type arguments
  • [GROOVY-10347] - STC: lowed bound wildcard inference produces false positives
  • [GROOVY-10351] - Wrong type argument is inferred on combining use-site variance and diamond operator
  • [GROOVY-10375] - SC: cast exception for private property access from lambda
  • [GROOVY-10379] - Error for super class and super interface methods of same name
  • [GROOVY-10380] - SC: IncompatibleClassChangeError when calling interface default method from non-public interface
  • [GROOVY-10391] - Default interface methods causing problems with java 17 and groovy 3.0.9
  • [GROOVY-10394] - SC: operands evaluated multiple times for <=> operator on reference types
  • [GROOVY-10396] - Static import is not applied for custom println method since 2.5.1
  • [GROOVY-10398] - LazyFieldNode never equals itself
  • [GROOVY-10405] - @AutoClone breaks in Java17 for File properties
  • [GROOVY-10406] - Dollar slashy string is too greedy
  • [GROOVY-10407] - unchecked method invocation warning in generated stubs
  • [GROOVY-10413] - IllegalAccessException when using closures for functional interfaces with default methods
  • [GROOVY-10414] - STC: cannot set non-static outer class property via setter method
  • [GROOVY-10419] - STC: stack overflow for elvis assignment with explicit setter
  • [GROOVY-10424] - SC: stack overflow for optimized boolean on private inner class with inner class(es)
  • [GROOVY-10429] - StringBuilder misses setLength method in Java17
  • [GROOVY-10433] - "sealed" not usable as a restricted identifier
  • [GROOVY-10434] - ClassNode isRecord and isSealed not useful before AST transformation
  • [GROOVY-10439] - No error/warning for @Delegate introducing conflicting interface generics
  • [GROOVY-10449] - Include public fields in the list of properties returned by MetaClassImpl#getProperties() *
  • [GROOVY-10451] - Sealed classes incorrectly allow a self-reference in the permitted subclasses
  • [GROOVY-10456] - Inconsistent exception upon accessing empty property
  • [GROOVY-10457] - Compilation of constructor calls inside CompileDynamic constructors fails with ArrayIndexOutOfBoundsException
  • [GROOVY-10462] - Groovy should not generate both `getFlag` and `isFlag` for a Boolean field.
  • [GROOVY-10516] - Script @groovy.transform.Field AST transformation generics handling with fully qualified types
  • [GROOVY-10746] - Calling method in Super class causes java.lang.StackOverflowError with Java 1.8
  • [GROOVY-11242] - Stackoverflow error when calling super from overridden method
  • [GROOVY-3015] - Seems like ClosureMetaClass#invokeMethod does not respect the interceptable nature of the owner/delegate
  • [GROOVY-3421] - Expression underlying a spread map expression is evaluated twice
  • [GROOVY-3422] - unable to reference one static closure from another without class name prefix
  • [GROOVY-3493] - Cannot override methods via metaclass that are part of an interface implementation
  • [GROOVY-3708] - Intercepting an indirectly called method doesn't work.
  • [GROOVY-4266] - CLONE -Wrong generation of import statements in stubs
  • [GROOVY-4320] - Joint compiler + @Delegate fail to recognize method signature with default value
  • [GROOVY-4610] - GroovyInterceptable (AOP) not working with closures
  • [GROOVY-4727] - Adding "return" automatically in nested switch statements
  • [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-5106] - Same interface can be implemented with two different generic types
  • [GROOVY-5169] - JsonOutput.toJson(object) is not returning expected results
  • [GROOVY-5204] - @Delegate to a method with optional params
  • [GROOVY-5239] - Statically imported method vs other methods with the same name
  • [GROOVY-5245] - Inconsistency with accessing issers as properties
  • [GROOVY-5358] - Different ways of extending a class functionality esp. adding getProperty inconsistent
  • [GROOVY-5364] - Static property reference from static context in script does not compile
  • [GROOVY-5367] - Closure property in Binding used as Closure delegate cannot be called
  • [GROOVY-5453] - Incorrect resolve of category property for String
  • [GROOVY-5728] - Accessing private constructor from a static factory
  • [GROOVY-5736] - Log4j, Commons, Slf4j ast transforms are broken in Groovy-Eclipse
  • [GROOVY-5746] - Array assignment with operator does double call for index expression and array part
  • [GROOVY-6097] - Using super.propertyName gives a MissingMethodException when the property is a boolean and uses the "isPropertyName" naming convention.
  • [GROOVY-6282] - groovyc ant task generates invalid stub (picks wrong constructor) and fails in Java 1.7 compilation
  • [GROOVY-6328] - onMethodSelection() doesn't fire when setter is called with property syntax
  • [GROOVY-6408] - Problem With @CompileStatic And Typed Collections
  • [GROOVY-6453] - groovysh in Windows 7/8/10 doesn't support arrow keys and Del
  • [GROOVY-6586] - Read vs Write to members of base script supplied by @BaseScript is inconsistent
  • [GROOVY-6610] - "Expecting to find object/array on stack" VerifyError when passing static member as argument to chained ctor call
  • [GROOVY-6653] - StackOverflow Exception when calling super.method when extending java class
  • [GROOVY-6747] - Problem With Anonymous Inner Enum
  • [GROOVY-6802] - CompileStatic: ListAssignment takes precedence over Coercion when statically compiling
  • [GROOVY-6803] - CompileStatic: ListAssignment for String takes precendence over Coercion when statically compiling
  • [GROOVY-6837] - String[] + String[] gives Object[] *
  • [GROOVY-6882] - STC: AIC cannot resolve overridden method of outer class
  • [GROOVY-6912] - @CompileStatic not recognising Literal list when LHS is a concrete list type
  • [GROOVY-6919] - Static compilation fails with multiple bounds generics
  • [GROOVY-7024] - Reference to static member of parent class in enum constructor fails at runtime
  • [GROOVY-7033] - Bug with annotation with closure on method of anonymous class
  • [GROOVY-7094] - Semantic of access super fields is not consistent: super.@field == super.field
  • [GROOVY-7128] - Generic method declaration should see the super class
  • [GROOVY-7142] - type inference problem with List of Interface and List of the class which implements the interface
  • [GROOVY-7208] - Script.getProperty vs Script.setProperty asymmetry
  • [GROOVY-7232] - Delegation inconsistent between methods and properties in nested closures *
  • [GROOVY-7293] - @Memoized ignored in trait methods
  • [GROOVY-7304] - Cannot mutate private field from within an AIC or a closure
  • [GROOVY-7306] - Invalid stub generated for a constructor using a generic bounded parameter
  • [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-7419] - Static Compilation with Diamond of local EnumMap<>
  • [GROOVY-7468] - type checker should use superclass bound when expected by generics
  • [GROOVY-7473] - inefficient code generation
  • [GROOVY-7490] - CompileStatic confuses statically importing an instance and statically importing a method
  • [GROOVY-7494] - ArrayStoreException assigning GStringImpl to String[] when using Indy
  • [GROOVY-7500] - Problem With Runtime Metaprogramming Over A Trait Method
  • [GROOVY-7507] - Cannot assign value of type java.lang.Object in ternary operator with null
  • [GROOVY-7510] - Static import of a static property causes joint compilation to fail
  • [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-7582] - Closure to SAM coercion doesn't handle overloads with different SAM signatures
  • [GROOVY-7682] - JsonBuilder or JsonOutput incompatible with JodaTime
  • [GROOVY-7686] - Can not see local variable from overriden method called from the constructor of an anonymous class instance
  • [GROOVY-7690] - TypeChecked Groovy does not throw illegal assignment error at compile time when using raw generic type
  • [GROOVY-7701] - org.codehaus.groovy.runtime.typehandling.GroovyCastException in Groovy ".with { ... }" - Block
  • [GROOVY-7759] - @Lazy does not work when used in a Trait
  • [GROOVY-7799] - Extended generic types with var args isn't compiled if they contains in different files
  • [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-7867] - asType(Collection col, Class clazz) ingnores exceptions in clazz constructor
  • [GROOVY-7890] - Lack of compilation error while statically compiled the closure.
  • [GROOVY-7945] - Expect compilation error while resolving generic types
  • [GROOVY-7968] - A field and a property with the same name and both having an initial value leads to an ambiguity over what the initial value should be, so should fail compilation *
  • [GROOVY-8000] - Problem With Trait Generics
  • [GROOVY-8001] - Static compiling fails type checking with generics
  • [GROOVY-8034] - Compile error when using generic type with lower bound
  • [GROOVY-8049] - Trait properties with 'with'
  • [GROOVY-8050] - Reference outer class property via inner class
  • [GROOVY-8100] - MarkupBuilder cant yield before first tag
  • [GROOVY-8104] - Could not call constructor of inner class from anonimous class inside closure
  • [GROOVY-8111] - Stack overflow between WideningCategories lowestUpperBound and parameterizeLowestUpperBound
  • [GROOVY-8164] - Groovy allows a Java class to inherit static methods from its interface *
  • [GROOVY-8179] - Map-style constructor call, inner class and static compilation
  • [GROOVY-8202] - void tail calls in closures break @CompileStatic type inference
  • [GROOVY-8270] - Bug in @AutoImplement
  • [GROOVY-8274] - methodMissing not executed when the delegate is an inner class
  • [GROOVY-8284] - getMetaClass should be annotated as (JavaBeans) transient
  • [GROOVY-8409] - Static compilation with generic function wrapping BiFunction causes GroovyCastException
  • [GROOVY-8427] - Issue With Static Compiler And Generics
  • [GROOVY-8433] - Anonymous inner class results in cast exception with @Category applied
  • [GROOVY-8452] - @CompileStatic, generic with 'extends' bug: Expected parameter of type ? but got A
  • [GROOVY-8633] - MME on Class receiver via method closure
  • [GROOVY-8638] - CompileStatic fails with Guava Multimap#asMap
  • [GROOVY-8652] - Putting key on generic Map fails when using CompileStatic
  • [GROOVY-8678] - Groovy Script execution fails when comparing decimal values against decimal constant without leading 0
  • [GROOVY-8693] - Calling indirect default interface methods fails both dynamic/static compiled
  • [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-8850] - StreamingMarkupBuilder adds namespace on elements not expected
  • [GROOVY-8909] - List literal type inference does not take its context into account
  • [GROOVY-8946] - @CompileStatic ignores declared type and forces a cast when inside a closure
  • [GROOVY-8960] - Can not call a java parameterized type method from groovy with java enum. Compile error
  • [GROOVY-8961] - Cannot pass generic list into explicit setter
  • [GROOVY-8974] - STC ignores declaration type
  • [GROOVY-8983] - Cannot assign Collection to Array
  • [GROOVY-8984] - Can assign Collection with super wildcard to Array
  • [GROOVY-8999] - Access to private fields and methods from subclass exhibits strange behavior
  • [GROOVY-9006] - Static type checking fails on java.sql.Timestamp when compared to null
  • [GROOVY-9033] - Bad code green: empty list literal with each method
  • [GROOVY-9064] - STC: explicit declared variable type ignored in favor of assigned value type(s)
  • [GROOVY-9076] - Debugger Step Into doesn't work in Groovy-compiled classes
  • [GROOVY-9093] - SC: subclass access to package-private or private field is not indicated as an error
  • [GROOVY-9146] - Seems to be a gap in method reference support
  • [GROOVY-9158] - @NamedParam arguments don't get their default value when only named parameters are used in the method call
  • [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-9373] - ASM: rework line numbers for blocks with fast-path, try/catch or return statement insertion
  • [GROOVY-9382] - Inconsistent support for [Bb]oolean properties *
  • [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-9391] - Casting the superclass object and calling it stack overflows
  • [GROOVY-9392] - GroovyClassLoader as system class loader fails in Groovy 3
  • [GROOVY-9396] - Captured arguments in closures are not annotated with @Generated
  • [GROOVY-9397] - CLONE - Closures are maybe not Threadsafe
  • [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-9472] - Static import causes unresolved reference to become resolved
  • [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-9524] - VerifyError when referencing a private enum method
  • [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-9609] - ScriptBytecodeAdapter.getPropertyOnSuper fails with method missing for getProperty
  • [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-9632] - Java 8 Type Param Annotation Not Generated in Byte Code
  • [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-9662] - Groovy 3.0.5: Closure delegate is not working properly
  • [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-9681] - Groovy2 indy not backward compatible missingMethod with Groovy3
  • [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-9707] - TypeChecked: NoSuchMethodError: DefaultGroovyMethods.plus(java.lang.String, java.lang.Object)
  • [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-9737] - VerifyError if superclass has static and non-static overloads
  • [GROOVY-9739] - NPE in ClassNode.isDerivedFrom while compiling trait with Groovy 3.0.5
  • [GROOVY-9751] - STC: error for addAll with collect argument
  • [GROOVY-9757] - ASTTest is run for every SourceUnit in a CompilationUnit
  • [GROOVY-9758] - groovsh import of non existing class throws null pointer instead of syntax error
  • [GROOVY-9760] - NPE when trait with type parameter is implemented as raw type
  • [GROOVY-9762] - Wrong type resolved if method reference used with typed method
  • [GROOVY-9763] - Regression in groovyc 3.0 and 4.0 and Compile static with generic static method in trait
  • [GROOVY-9769] - STC: UnionTypeClassNode created for simple instanceof scenarios
  • [GROOVY-9770] - Groovy 3 generated lambda classes are marked as synthetic
  • [GROOVY-9771] - STC: "putAt" shortcut notation to outer class private field from Closure leads to GroovyCastException
  • [GROOVY-9772] - AnnotationCollectorTransform generates code not marked with @Generated
  • [GROOVY-9777] - Stub missing cast, depending on constructor order
  • [GROOVY-9779] - Inconsistency with callable properties in static context
  • [GROOVY-9784] - GroovyRowResult not assignable to Map<String, Object> with static type checker
  • [GROOVY-9786] - SC: cast exception for variable assigned within conditional blocks
  • [GROOVY-9790] - bootstrap method initialization exception raised when lambda parameter type is wrong
  • [GROOVY-9791] - SC: cross-package protected field access uses dynamic property methods
  • [GROOVY-9797] - println(-0.0f) does not comply with IEEE754
  • [GROOVY-9799] - Using a method reference causes a compiler error
  • [GROOVY-9803] - Static type checker forgets nested generic types
  • [GROOVY-9807] - Static compile of dynamically generated code produces different output in a top-level class and a nested class
  • [GROOVY-9814] - Method reference doesn't accept subtypes of argument
  • [GROOVY-9815] - Object not bound with Groovy (but works fine in Java)
  • [GROOVY-9816] - @AutoImplement does not consider declared properties
  • [GROOVY-9821] - STC: spread-safe and list property access error for CollType<? extends ItemType>
  • [GROOVY-9822] - StackOverflowError in STC
  • [GROOVY-9824] - CVE-2020-17521 Apache Groovy Information Disclosure
  • [GROOVY-9825] - interface constants from super interfaces lost in some contexts
  • [GROOVY-9826] - Better propagation of InterruptedException
  • [GROOVY-9828] - Migrate from Codehouse to Apache Groovy 4.0.0-alpha
  • [GROOVY-9842] - Static inner class of a static inner class is missing inner class table attribute
  • [GROOVY-9844] - STC infers too-narrow bounds for inline map
  • [GROOVY-9851] - Private field and method use from subclass is inconsistent
  • [GROOVY-9852] - Result is already complete (IllegalStateException) *
  • [GROOVY-9855] - Compiler does not resolve compile-time constants in string concatenation
  • [GROOVY-9859] - Groovy3 doesn't parse a function property when there's a new line between return value and function name
  • [GROOVY-9860] - compilation error when passing a closure's genericized parameters to a constructor under static compilation
  • [GROOVY-9861] - parsing bug when inner class references top level class fields in groovy 3
  • [GROOVY-9862] - General error during instruction selection: ClassCastException
  • [GROOVY-9863] - arithmetic using an implicit getter fails to compile with "BUG! exception in phase 'class generation'" under static compilation
  • [GROOVY-9867] - docgenerator not displaying array types correctly
  • [GROOVY-9875] - backspace does not work in the groovysh under SecureCRT connecting Linux
  • [GROOVY-9880] - Switch incorrectly falls through default case
  • [GROOVY-9881] - STC can't distinguish SAMs based on arity
  • [GROOVY-9882] - STC: field or property with parameterized SAM-type and closure initializer
  • [GROOVY-9884] - groovy3: setProperty does not work in sub classes
  • [GROOVY-9885] - STC doesn't coerce GString in certain ternary expressions
  • [GROOVY-9890] - Static type checking can't find default method overload on interface
  • [GROOVY-9891] - Wrongly detected incompatible generic arguments for Java collections
  • [GROOVY-9892] - STC: VerifyError when embedding unary pre/postfix inc/decrement operation of outer field in GString
  • [GROOVY-9893] - Wrong overloaded method selected
  • [GROOVY-9896] - Switch return statement transformation misses last case without break
  • [GROOVY-9901] - Memoization doesn't seem to work for trait methods
  • [GROOVY-9902] - Generic typecheck in @DelegatesTo doesn't work
  • [GROOVY-9903] - STC: @DelegatesTo error for incomplete arguments linked to first line of source
  • [GROOVY-9905] - Groovy 3 bug: references to an outer class's parent class variable fails
  • [GROOVY-9906] - ArrayIndexOutOfBoundsException when compiling method call with many overloaded methods
  • [GROOVY-9907] - Type tracked from instanceof condition is not captured in closure
  • [GROOVY-9909] - Cannot call super when overriding an interface default method
  • [GROOVY-9910] - STC: no error for incorrect parameter type if not referenced in lambda
  • [GROOVY-9911] - Tuples with same collection values do not match
  • [GROOVY-9914] - map.collectEntries extension method variant returns Map<?,?>
  • [GROOVY-9915] - STC: call to static method fails with incompatible generics error
  • [GROOVY-9916] - IllegalArgumentException when set null to a boolean field into a closure
  • [GROOVY-9918] - NPE in static compiler when calling pathological method signature
  • [GROOVY-9923] - Several Sql#call variants incorrectly throw Exception rather than SqlException *
  • [GROOVY-9932] - MockFor/StubFor makes mocked internal method return null
  • [GROOVY-9934] - Bounded type parameter is not captured by closure
  • [GROOVY-9935] - int reference seems to not use its wrapper class
  • [GROOVY-9936] - Difference between Antlr2 and parrot parsers for variable declaration optimisation *
  • [GROOVY-9938] - VerifyError when instantiating class with @CompileStatic that implements a method with @DelegatesTo annotation.
  • [GROOVY-9945] - STC: Cannot find matching method when using Generics
  • [GROOVY-9948] - Cannot infer the correct type in the presence of diamond operator
  • [GROOVY-9951] - @CompileStatic @POJO annotation on static inner class with @Immutable annotation
  • [GROOVY-9953] - Type from flow typing is not propagated in variable assignments
  • [GROOVY-9954] - JsonSlurper LAX parser skips the first character after comments
  • [GROOVY-9955] - IllegalAccessError exception is raised when accessing inherited static field
  • [GROOVY-9956] - Cannot infer correct type argument when passing a subtype of the declared type argument
  • [GROOVY-9963] - Generic type of field is not instantiated
  • [GROOVY-9966] - Build Error: StringIndexOutOfBoundsException when the stars align...
  • [GROOVY-9967] - STC: Access to field/property is forbidden after instanceof.
  • [GROOVY-9968] - @TypeChecked Error: Members of Iterable<T extends Foo> are Foo, not Object
  • [GROOVY-9970] - Type argument inference does not work in closure
  • [GROOVY-9971] - @TypeChecked: Closure<String> no longer compatible with Closure<GString> argument
  • [GROOVY-9972] - LUB does not work correctly in case of ternary operator
  • [GROOVY-9973] - @CompileStatic: Binary operation with property throws ClassCastException
  • [GROOVY-9974] - @CompileStatic with Method References
  • [GROOVY-9977] - @CompileStatic does not work when a class field has a lambda initializer
  • [GROOVY-9978] - ASM reporting processing error
  • [GROOVY-9981] - CLONE - println(-0.0f) does not comply with IEEE754
  • [GROOVY-9982] - Can't assign a field with the result of a method call of the same name from a base class
  • [GROOVY-9983] - Type argument inference does not work in ternary operator
  • [GROOVY-9984] - Wrong type inference when passing null
  • [GROOVY-9985] - STC does not report type mismatches in array initializers
  • [GROOVY-9991] - STC: error for closure not matching functional interface method's parameter count
  • [GROOVY-9993] - CLONE - Field and a property with the same name: clarification of boundary cases *
  • [GROOVY-9994] - Type checking of array initializer expressions
  • [GROOVY-9995] - Wrong inference inside closure when having a bounded type parameter
  • [GROOVY-9996] - Cannot infer correct type argument when using subtyping
  • [GROOVY-9997] - STC: cast or coerce to functional interface fails to infer param types of closure/lambda
  • [GROOVY-9998] - Wildcards with a lower bound fail static type checking

Dependency upgrade

Documentation

  • [GROOVY-9925] - Groovy match operator documentation should contain real examples and slashy strings reminder
  • [GROOVY-9926] - Groovy documentation does not describe how to instantiate empty maps in section where maps are first described

Improvement

  • [GROOVY-10003] - Eliminate some ambiguities while parsing
  • [GROOVY-10004] - @Lazy transform should check for explicit getters/setters *
  • [GROOVY-10028] - Add support for type conversion from Stream to array/collection/list/set
  • [GROOVY-10029] - SC: produce direct method call for assignment of collection to array
  • [GROOVY-10031] - Compiler writes multianewarray instruction for all non-initializer array allocations
  • [GROOVY-10034] - Compiler writes extra cast for Type[] to Object[]
  • [GROOVY-10035] - Eliminate redundant type cast
  • [GROOVY-10036] - STC: unresolved generics for return type of extension method call with full type arguments
  • [GROOVY-10050] - Add additional NamedParam annotations in ResourceGroovyMethods, NioExtensions and JsonSlurper
  • [GROOVY-10052] - STC sometimes requires explicit closure to SAM cast inside of another closure
  • [GROOVY-10061] - "del" ASCII character also should be escaped
  • [GROOVY-10077] - Groovy Console: Support JDKs without macOS Runtime Support for Java
  • [GROOVY-10110] - AST browser should show additional information *
  • [GROOVY-10112] - IndexedProperty AST transform should only provide the getter for immutable fields
  • [GROOVY-10123] - Consolidate methods for collecting interfaces *
  • [GROOVY-10126] - Support parsing multiple YAML documents
  • [GROOVY-10146] - Groovy 3 compilation errors are less accurate than Groovy 2
  • [GROOVY-10148] - Groovy should support sealed classes
  • [GROOVY-10150] - Eliminate ambiguities while parsing non-static class creator
  • [GROOVY-10155] - Add JDK18 constant
  • [GROOVY-10160] - Highlight source code in the AST browser smartly
  • [GROOVY-10212] - Provide a mechanism for users to enable Antlr4's SLL (fast but only simple) mode
  • [GROOVY-10233] - Sealed classes should generate native class information for JDK17+
  • [GROOVY-10252] - @Final should have a boolean attribute to disable
  • [GROOVY-10275] - Align intersect which takes a closure/comparator ordering to be the same as other languages. *
  • [GROOVY-10279] - Support native record
  • [GROOVY-10281] - Add compiler option for logging class generation
  • [GROOVY-10284] - AnnotationCollector should not collect @Incubating which is a meta-annotation in Groovy
  • [GROOVY-10286] - Set target bytecode by JDK
  • [GROOVY-10287] - The Groovy Console About window could list Java/OS versions along with the Groovy version
  • [GROOVY-10295] - STC: cannot infer list or map type for method return
  • [GROOVY-10297] - Refine @ToString and @EqualsAndHashCode generation of fallback methods
  • [GROOVY-10298] - Refine records to not use system properties
  • [GROOVY-10321] - @ToString could provide annotation attributes to control further the format of the created toString
  • [GROOVY-10338] - Enhance records with additional helper methods
  • [GROOVY-10340] - Refine sealed classes to not use system properties
  • [GROOVY-10341] - "super" invocations of abstract methods should be caught at compile time with static compilation enabled
  • [GROOVY-10352] - Java8 does not load enum values into annotation attributes
  • [GROOVY-10353] - StaticTypeCheckingSupport#evaluateExpression can provide lightweight evaluation for simple expressions
  • [GROOVY-10361] - TupleConstructor could be improved to have a smarter mode for handling default values
  • [GROOVY-10372] - STC: check lambda or closure parameter types against target method
  • [GROOVY-10377] - SC: === and !== compiled to ScriptBytecodeAdapter#compareIdentical
  • [GROOVY-10378] - Provide a mechanism to prioritise AST transforms running at the same stage
  • [GROOVY-10383] - SC: !in compiled to ScriptBytecodeAdapter#isNotCase
  • [GROOVY-10395] - SC: <=> compiled to ScriptBytecodeAdapter#compareTo for primitives
  • [GROOVY-10401] - Prevents paging out the groovy console when minimized
  • [GROOVY-10417] - MethodNode toString() could add quotes when name contains spaces (or other non-identifier characters)
  • [GROOVY-10418] - Include `src/antlr` in the sources jar
  • [GROOVY-10463] - Add equals() and hashCode() methods to ImportNode
  • [GROOVY-4694] - Move AstBuilderTransformation Global xForm to separate module
  • [GROOVY-5441] - Type argument checking
  • [GROOVY-6360] - GString performance is slow with String's method
  • [GROOVY-6603] - Static type checks for closure parameters of methods
  • [GROOVY-6954] - map.foo = "bar" not optimized by the static compiler
  • [GROOVY-7001] - generics info can be improved for DGM methods with a collector
  • [GROOVY-7106] - Improve coercion / implicit cast of map literals for @CompileStatic
  • [GROOVY-7274] - Improve type inference for hash map -> Map<?, ?>
  • [GROOVY-8729] - Eliminate the additional resolving phase of compilation for better performance
  • [GROOVY-9132] - Improve type inference for method reference
  • [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-9628] - Initial support for reproducible builds
  • [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
  • [GROOVY-9767] - GroovyAssert should not depend on org.junit.Assert *
  • [GROOVY-9800] - Log generic mismatches extensively
  • [GROOVY-9808] - GroovyShell parse script use given context
  • [GROOVY-9832] - groovy-jmx: JmxMetaMapBuilder should support GString object names
  • [GROOVY-9849] - Show elapsed time in groovy console
  • [GROOVY-9858] - In generated closures, annotate generated call() methods with @Generated
  • [GROOVY-9865] - Add some DGM methods for primitive arrays
  • [GROOVY-9868] - DGM methods via dgminfo not enabled for int[][], long[][], double[][]
  • [GROOVY-9877] - Add DGM `asReversed` to `List`
  • [GROOVY-9878] - GroovyClassLoader#fileReallyExists is inefficient
  • [GROOVY-9921] - Replace legacy data structure with Java collection(SingleKeyHashMap) *
  • [GROOVY-9941] - Make Gradle build fully cacheable
  • [GROOVY-9946] - Add `@Pure` to mark constant result of method

New Feature

  • [GROOVY-10032] - CLONE - left-open and full-open ranges (consider adjusting containsWithinBounds behavior) *
  • [GROOVY-10193] - Support sealed type grammar
  • [GROOVY-10195] - Groovy should have a @Final AST transform
  • [GROOVY-10210] - Provide a helper factory class to assist with porting
  • [GROOVY-10240] - Support record grammar
  • [GROOVY-10274] - Improvements to DGM: provide a set union and minus which take a closure/comparator
  • [GROOVY-4990] - Ability to create missing parent directories when using File.write()
  • [GROOVY-5450] - Final field assignment check on static compilation
  • [GROOVY-7492] - Groovy should allow CompileStatic classes to not implement GroovyObject (AKA @POJO)
  • [GROOVY-8225] - Groovy support for JSR 308/JEP 104 (Annotations in more places)
  • [GROOVY-8258] - [GEP] Create a LINQ-like DSL (basic cases)
  • [GROOVY-9159] - [GEP] Support LINQ, aka GINQ
  • [GROOVY-9272] - Support switch expression
  • [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-9649] - left-open and full-open ranges
  • [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
  • [GROOVY-9804] - Support TOML
  • [GROOVY-9817] - Enhance Closure annotation value (as Closure class) to Arrays
  • [GROOVY-9922] - Add DGM `getPid`

Sub-task

  • [GROOVY-10137] - [JDK16] Illegal access to dynamic proxy
  • [GROOVY-10138] - [JDK16] Failed to invoke default method of proxy
  • [GROOVY-10393] - Funnel doPrivileged through VMPlugin (JEP-411)
  • [GROOVY-2686] - Can't call a Closure in a Closure's Delegete
  • [GROOVY-5357] - The accessor pair can't be provided from different sources
  • [GROOVY-7762] - Static inner classes not visible to child classes

Task

  • [GROOVY-10005] - Remove groovy-jaxb module from Groovy 4 *
  • [GROOVY-10023] - Remove BSF from Groovy 4 *
  • [GROOVY-10065] - Move stream-related extension methods to StreamGroovyMethods
  • [GROOVY-10259] - Groovy4 NV Macros: Rename NV* -> SV*
  • [GROOVY-10411] - Refactor org.codehaus.groovy.vmplugin.v8.Java8 *
  • [GROOVY-10412] - Refactor: split formatting methods out of InvokerHelper
  • [GROOVY-10428] - Refactor: split formatting methods out of InvokerHelper (allow separate control of escapeBackslashes) *
  • [GROOVY-6843] - Remove GroovyDoc JANSI dependency
  • [GROOVY-9380] - VMPlugin refactor: Coalesce Java5 through Java7 into Java8 *
  • [GROOVY-9773] - Rework gradle build to use modern conventions
  • [GROOVY-9774] - Rework gradle build to use modern conventions - test remediation
  • [GROOVY-9775] - Rework gradle build to use modern conventions - doc remediation
  • [GROOVY-9827] - Rework gradle build to use modern conventions - better support "provided" concept *
  • [GROOVY-9958] - Prepare for bintray/jcenter sunset
  • [GROOVY-9989] - Investigate impact of Bintray/JCenter shutdown (grape config aspects)

Technical Debt

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