A multi-faceted language tool for the Java platform!

Groovy

Groovy 4.0.0

  -  43.9 MB  -  Open Source

Sometimes latest versions of the software can cause issues when installed on older devices or devices running an older version of the operating system.

Software makers usually fix these issues but it can take them some time. What you can do in the meantime is to download and install an older version of Groovy 4.0.0.


For those interested in downloading the most recent release of Groovy or reading our review, simply click here.


All old versions distributed on our website are completely virus-free and available for download at no cost.


We would love to hear from you

If you have any questions or ideas that you want to share with us - head over to our Contact page and let us know. We value your feedback!

  • Groovy 4.0.0 Screenshots

    The images below have been resized. Click on them to view the screenshots in full size.

    Groovy 4.0.0 Screenshot 1

What's new in this version:

Fixed:
- STC: inconsistent support for assignment of list literals
- @CompileStatic fails to unify types
- TracingInterceptor throws NullPointerException if arguments contains a null argument
- STC: method call with GString elements in list/array has different error from assignment
- Combining flow typing and type argument inference does not work as expected
- Dollar slashy /$ string ending in backslash "breaks" the parser
- STC: NamedParams error for method call argument
- Compiler crash when encountering function reference on nested class
- NPE in static compiler
- STC infers Closure instead of SAM for method references
- STC fails when calling a generic method from another generic method
- STC: return type for unresolved placeholder with bound resolved to Object
- STC: Wrong type inferred for lambda parameter in a generic method
- STC does not support self bounded types
- Inferred parameter type of lambda expression for multi-dimensions array is not correct
- MissingMethodException for pointer/reference from Class instance to Class method
- STC: no type parameter inference for variadic method called with fewer arguments than parameters
- STC: multiple-assignment from tuple-bearing static method
- STC: Wrong return value type inferred for generic method with upper bound without parameters
- SC: closure with variadic parameter
- SC: closure with default argument(s)
- Static compiler incorrectly typechecks extension modules
- groovyc does not perform unboxing on Character type
- Closure with type argument inference does not work as expected
- Incompatible generic argument types when combining subtyping and closures
- Class.isCase() documentation does not clarify that Class.isCase(SomeClass) is false, or why
- STC misses type error when calling a vararg method
- STC does not perform boxing on chars when encountering assignment and function call
- STC: type argument not applied to error message
- SC: GroovyCastException for map value as constructor for Collection
- Incompatible generic argument types on closure's return type
- STC misses type checks on default arguments
- CLONE - Better propagation of InterruptedException (additional cases)
- Unexpected behaviour when the return type of a closure is a type parameter
- Type checking fails when calling trait method using indirect SelfType relation
- SC: runtime error for default argument call expression
- STC error for call to static trait method from closure
- Cannot assign null to a variable with a bounded generic type
- compiler crash during canonicalization
- StackOverflowError in STC
- @AnnotationCollector does not work with JUnit 5
- Wrong cast in stubs generated
- FP Cycle detected in type parameter that extends another type parameter
- Cannot assign closure with long as return type to java.util.function.Function<X, Number>
- XmlUtil.serialize() Emoji bug
- Inconsistent method selection for [Bb]oolean properties
- Groovy console can not highlight token properly sometimes
- NPE in InnerClassVisitor for non-static inner class CCE within two AICs
- Calling method on specific trait fails when on different files
- Support JDK16
- Compilation failure: ClassCastException
- RootLoader cannot be set as system class loader in Java 12+
- Cannot call T#method(arg) with arguments
- @CompileStatic and @NullCheck make compiler fail
- STC: instanceof and for-in variable type
- STC: instanceof and DGM each(Map,Closure)
- Groovy 3 AST for annotated fields reports wrong lastLineNumber if field not initialized
- NPE in SecureASTCustomizer with indirectImportCheckEnabled
- Different treatment of property expressions in closures from 2.4 to 2.5
- File.withWriter and Path.withWriter are inconsistent
- NoSuchMethodError during static field inlining is not caught, unlike NoSuchFieldException
- ASTTest cannot reference types from transform classpath
- Static scope error for variable in non-static method of static inner class
- Type inference does not work with GDK class enhancements
- BUG! exception in phase 'instruction selection' when non-existent method called
- Unexpected type mismatch when having conflicting type parameter names
- Unable to infer the type parameter of a parameterized function
- Unexpected NullPointerException during the "instruction selection" phase
- STC fails to substitute type variable in the presence of the diamond operator and a function call
- Question mark in the attribute for a class name
- Unexpected generics parameter arity mismatch in the "instruction selection" phase
- Massive increase in memory usage due to CacheableCallSite
- Groovyc throws Stackoverflow error on generic class with lower bound
- STC: Generic type of Set not correctly resolved when calling ConcurrentHashMap.newKeySet()
- Parser fails to parse a single-statement lambda when omitting parentheses for method call
- @CompileStatic @Canonical inner class throws RTE: NoSuchMethodError: java.util.Map.withDefault
- GroovyCastException when @CompileStatic and !in keyword are used together
- IOOBE thrown when parsing switch-expression without branches
- Groovy ResolveVisitor runs twice
- Generated stubs missing method from traits with array parameter
- Erroneous type inference of closure in STC
- STC: cannot return closure from method without casting
- STC: no error for incompatible type bounds on return value
- @NamedVariant: Default parameters on ctor/method are ignored when passing some named parameters
- MethodNode#getText can output incorrect modifiers
- STC: Stackoverflow Error when passing function reference to closure
- STC fails to catch type error on the return type of lambdas
- Type variable substitution does not work well when running into chain of field accesses
- STC: false positive for BiFunction and BinaryOperator with same type parameter
- Cannot assign type parameter whose bound is a parameterized type that takes a wildcard
- Regression with static and non static class mixing
- STC fails to substitute type variable when using the diamond operator and calling a closure
- Variable's inferred type is upcasted to an Object
- Groovy compiler generates invalid Java stubs
- StackOverflowError on Java 16+ for override method that delegates to super
- Compiler NPE within CompileStack#clear
- STC rejects program when assigning a closure that returns a class field
- SC incorrectly reports "access to Object#field" is forbidden
- Improper type variable substitution when involving type parameters with conficting names
- STC is unable to call parameterized function
- MetaClassImpl creates static meta property for non-static field and getter (no setter)
- MissingMethodException in method with default parameter in trait - regression in 3.0.9
- finally block produces long sequence of nop instructions
- Unable to infer type variable of parameterized function that expects two parameters
- Type variable substitution does not work properly on parameterized function's return type
- Weird behavior of !in operator
- Groovy3 CompileStatic bug: Method clone is protected in java.lang.Object
- Generics failed to compile with Groovy 3.0.9 when overriding plus operator
- Type variable of function does not shadow the corresponding type variable of class
- Compiler crashes on parameterized function with duplicate type variables
- STC is unable to infer type variable when combining parameterized types and the diamond operator
- STC: error for map*.value assignment
- STC: missing error for map*.key assignment
- STC: incorrect type inference for list, map, etc. with lower bound generics
- import static star: add support for static callable property
- STC instantiates type variable with a wrong type when calling an instance method of the same class
- STC crashes when passing method reference to an inner closure
- STC rejects program on compiling constructor initialization with a wildcard type
- STC instantiates parameterized function with a wrong type leading to unsoundness
- STC crashes when bound has two wildcard types as type arguments
- STC: lowed bound wildcard inference produces false positives
- Wrong type argument is inferred on combining use-site variance and diamond operator
- SC: cast exception for private property access from lambda
- Error for super class and super interface methods of same name
- SC: IncompatibleClassChangeError when calling interface default method from non-public interface
- SC: operands evaluated multiple times for <=> operator on reference types
- Static import is not applied for custom println method since 2.5.1
- LazyFieldNode never equals itself
- Dollar slashy string is too greedy
- unchecked method invocation warning in generated stubs
- STC: cannot set non-static outer class property via setter method
- STC: stack overflow for elvis assignment with explicit setter
- SC: stack overflow for optimized boolean on private inner class with inner class(es)
- "sealed" not usable as a restricted identifier
- ClassNode isRecord and isSealed not useful before AST transformation
- No error/warning for @Delegate introducing conflicting interface generics
- Include public fields in the list of properties returned by MetaClassImpl#getProperties() *
- Sealed classes incorrectly allow a self-reference in the permitted subclasses
- Inconsistent exception upon accessing empty property
- Compilation of constructor calls inside CompileDynamic constructors fails with ArrayIndexOutOfBoundsException
- Seems like ClosureMetaClass#invokeMethod does not respect the interceptable nature of the owner/delegate
- Expression underlying a spread map expression is evaluated twice
- unable to reference one static closure from another without class name prefix
- Cannot override methods via metaclass that are part of an interface implementation
- CLONE -Wrong generation of import statements in stubs
- Joint compiler + @Delegate fail to recognize method signature with default value
- GroovyInterceptable (AOP) not working with closures
- Adding "return" automatically in nested switch statements
- Incorrect "Possible solutions" when calling a method on super in a non-derived class
- groovy compiler ignores import * for static nested classes in java sources
- Same interface can be implemented with two different generic types
- JsonOutput.toJson(object) is not returning expected results
- @Delegate to a method with optional params
- Statically imported method vs other methods with the same name
- Inconsistency with accessing issers as properties
- Different ways of extending a class functionality esp. adding getProperty inconsistent
- Static property reference from static context in script does not compile
- Closure property in Binding used as Closure delegate cannot be called
- Incorrect resolve of category property for String
- Accessing private constructor from a static factory
- Log4j, Commons, Slf4j ast transforms are broken in Groovy-Eclipse
- Array assignment with operator does double call for index expression and array part
- Using super.propertyName gives a MissingMethodException when the property is a boolean and uses the "isPropertyName" naming convention.
- groovyc ant task generates invalid stub (picks wrong constructor) and fails in Java 1.7 compilation
- onMethodSelection() doesn't fire when setter is called with property syntax
- Problem With @CompileStatic And Typed Collections
- groovysh in Windows 7/8/10 doesn't support arrow keys and Del
- Read vs Write to members of base script supplied by @BaseScript is inconsistent
- "Expecting to find object/array on stack" VerifyError when passing static member as argument to chained ctor call
- StackOverflow Exception when calling super.method when extending java class
- Problem With Anonymous Inner Enum
- CompileStatic: ListAssignment takes precedence over Coercion when statically compiling
- CompileStatic: ListAssignment for String takes precendence over Coercion when statically compiling
- String[] + String[] gives Object[] *
- STC: AIC cannot resolve overridden method of outer class
- @CompileStatic not recognising Literal list when LHS is a concrete list type
- Static compilation fails with multiple bounds generics
- Reference to static member of parent class in enum constructor fails at runtime
- Bug with annotation with closure on method of anonymous class
- Semantic of access super fields is not consistent: super.@field == super.field
- Generic method declaration should see the super class
- type inference problem with List of Interface and List of the class which implements the interface
- Script.getProperty vs Script.setProperty asymmetry
- Delegation inconsistent between methods and properties in nested closures *
- @Memoized ignored in trait methods
- Cannot mutate private field from within an AIC or a closure
- Invalid stub generated for a constructor using a generic bounded parameter
- Interact Closures withing Groovy Trait methods are not recognized by the implementing class
- Method "with()" fails to call on the object reference in Trait
- Static Compilation with Diamond of local EnumMap<>
- type checker should use superclass bound when expected by generics
- ineffient code generation
- CompileStatic confuses statically importing an instance and statically importing a method
- ArrayStoreException assigning GStringImpl to String[] when using Indy
- Problem With Runtime Metaprogramming Over A Trait Method
- Static import of a static property causes joint compilation to fail
- Cannot call Trait method from Closure when using static compilation
- java.lang.IllegalAccessError occurs when attempting to run code built with CompileStatic
- Closure to SAM coercion doesn't handle overloads with different SAM signatures
- JsonBuilder or JsonOutput incompatible with JodaTime
- Can not see local variable from overriden method called from the constructor of an anonymous class instance
- TypeChecked Groovy does not throw illegal assignment error at compile time when using raw generic type
- org.codehaus.groovy.runtime.typehandling.GroovyCastException in Groovy ".with { ... }" - Block
- Type incompatibility of generic placeholders not detected on assignment
- @Lazy does not work when used in a Trait
- Extended generic types with var args isn't compiled if they contains in different files
- Trait method calling closure cannot be inherited while using CompileStatic
- Closure generic parameters ignored and return types missing from collections methods
- asType(Collection col, Class clazz) ingnores exceptions in clazz constructor
- Lack of compilation error while statically compiled the closure.
- Expect compilation error while resolving generic types
- 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 *
- Problem With Trait Generics
- Static compiling fails type checking with generics
- Compile error when using generic type with lower bound
- Trait properties with 'with'
- Reference outer class property via inner class
- MarkupBuilder cant yield before first tag
- Could not call constructor of inner class from anonimous class inside closure
- Stack overflow between WideningCategories lowestUpperBound and parameterizeLowestUpperBound
- Groovy allows a Java class to inherit static methods from its interface
- Map-style constructor call, inner class and static compilation
- void tail calls in closures break @CompileStatic type inference
- Bug in @AutoImplement
- methodMissing not executed when the delegate is an inner class
- getMetaClass should be annotated as (JavaBeans) transient
- Static compilation with generic function wrapping BiFunction causes GroovyCastException
- Issue With Static Compiler And Generics
- Anonymous inner class results in cast exception with @Category applied
- @CompileStatic, generic with 'extends' bug: Expected parameter of type ? but got A
- CompileStatic fails with Guava Multimap#asMap
- Putting key on generic Map fails when using CompileStatic
- Groovy Script execution fails when comparing decimal values against decimal constant without leading 0
- Calling indirect default interface methods fails both dynamic/static compiled
- += in CompileStatic dynamically sets property instead of using setter
- Cannot resolve array of inner class from type in same package (no import)
- Invalid this reference in nested class
- Stub generator doesn't handle package-info
- Closure inside trait cannot use Closure's delegate variables
- CLONE - Compile Static causes getAt to fail (advanced cases)
- StreamingMarkupBuilder adds namespace on elements not expected
- List literal type inference does not take its context into account
- @CompileStatic ignores declared type and forces a cast when inside a closure
- Can not call a java parameterized type method from groovy with java enum. Compile error
- Cannot pass generic list into explicit setter
- STC ignores declaration type
- Cannot assign Collection to Array
- Can assign Collection with super wildcard to Array
- Access to private fields and methods from subclass exhibits strange behavior
- Static type checking fails on java.sql.Timestamp when compared to null
- Bad code green: empty list literal with each method
- STC: explicit declared variable type ignored in favor of assigned value type(s)
- Debugger Step Into doesn't work in Groovy-compiled classes
- SC: subclass access to package-private or private field is not indicated as an error
- Seems to be a gap in method reference support
- groovyc doesn't keep RetentionPolicy in generated bytecode
- Groovy fails when a script starts with a #
- trait property throws MissingPropertyException when read using qualified super expression
- trait qualified-super expressions fail when inside closure
- Groovy does not ignore second bash directive
- CCE in closure shared variable assignment
- ASM: rework line numbers for blocks with fast-path, try/catch or return statement insertion
- Inconsistent support for [Bb]oolean properties
- Access to outer class private field from closure leads to ClassCastException (@CompileStatic)
- Field initialized in a trait using tap doesn't work correctly
- Using this.method() in closures inside BuilderSupport subclasses doesn't dispatch properly
- STC regression using increment/decrement operators on custom bean accessors in Groovy 3.0.0
- Casting the superclass object and calling it stack overflows
- GroovyClassLoader as system class loader fails in Groovy 3
- Captured arguments in closures are not annotated with @Generated
- CLONE - Closures are maybe not Threadsafe
- GroovyScriptEngine cannot recompile a class that uses generic parameters
- Annotations on annotation methods are missing in the AST
- Regression in end of line handling between 2.5.9 and 3.0.0
- Junit 5 IncompatibleClassChangeError
- org.codehaus.groovy.runtime.callsite.GroovySunClassLoader is unusable
- Writable is not on classpath for compilation when using maven repository
- Groovy 3.0.1 : @Delegate does not work with default getter
- Incorrect type inference on map[key]
- @CompileStatic non-static inner class instantiation in closure
- Regression in GString handling
- Illegal reflective access warnings occurred when getting property
- grammar ambiguity with ternary expression being confused with safe indexing
- Missing throws clause of constructor declaration in java stubs
- Mutliple methods with the same name now fail before AST transformations can fix it
- DefaultGroovyMethods findIndexOf method can't use startIndex
- Multiple Repeatable Annotations Container generated if an explicit container is present and an implicit one required
- STC: regression for instanceof on generic field/property
- STC: no error for if (!(x instanceof T)) x.methodFromT()
- Line number information for automatically inserted return statements quirky
- Groovy 3 Compilation Failure with method with argument Class<?> called with Class
- Groovy 3 BUG! exception in phase 'conversion' in source unit Caused by NullPointerException
- STC: no type check error for invalid method pointer or reference
- GroovyDoc: class-header is not always displayed
- Original exception during global AST transformation no longer preserved in error message
- FastStringServiceFactory SPI loading in OSGi
- New v9 ClassFinder throws NoSuchFileException/UnsupportedOperationException and writes it to stderr
- Console exits when Cancel is clicked on the "Save changes" dialog
- metaclass is not initialized
- package.html files being ignored during javadoc generation when building on JDK9+
- MissingPropertyException for access to private static field from inner class when subclassing
- java.lang.UnsupportedOperationException: This feature requires ASM8 on JDK 14 in Spock tests
- Joint compilation is broken
- JSP style loop in StreamingTemplateEngine template results in TemplateParseException
- groovyConsole CLI plumbing for --enable-preview command-line switch is missing one part
- Annotation spanning lines is not supported by Parrot
- MethodHandle with spread args should not be cached
- Static compiler infers wrong type for implicitly shared variables
- CompileStatic typeCasting runtime error from Class Array to Class List
- Closure argument types not inferred when calling a constructor
- Throwing NPE when I use ternary operator with something special
- VerifyError when referencing a private enum method
- Failed to reload classes with generic parameters
- Static type checking Cannot choose between Map#getAt(Object) and Object#getAt(String) methods
- groovydoc multiple issues with generics
- Annotations on class signature are rendered incorrectly
- @see tags are not working properly
- groovydoc: properties claim to be "private" and don't show annotations
- @Field variable access within closures broken
- Stub generated without the effect of AST transformation makes joint compilation fail
- Wrong code for putAt on Map that is member of closure delegate
- Base class property causes CCE
- Default import for Proxy is wrong
- groovydoc: abstract methods do not have abstract modifier
- groovydoc: extra default constructor
- SC: new compiler error for access of static, non-final, outer-class field *
- Class-Level Closure Definition With Generics Fails TypeChecked
- groovydoc: annotation definitions, enums, interfaces, and traits have a default ctor
- groovydoc: byte[] shown as [B
- ConcurrentModificationException in Java9.concealedPackageList
- ASTNode.hashCode violates Object.hashCode contract: does not return consistent value
- Order of ModuleNode#getImports() is expected but not guaranteed
- STC: return type checking for generic, covariant property gives false error
- CLONE - Error when creation a variable named "context"
- CLONE - SC: calling trait method inside closure has incorrect receivers data
- Scope of method call changed from non-static to static 2.4->2.5
- groovyCompile 6x slower in 3.0.4 than 2.5.6
- Compiler error for use of variable expression within tap closure
- CompileStatic: @ClosureParams in @DelegatesTo doesn't work
- CompileStatic: Runtime error: Access outer class property from static inner in @DelegatesTo
- Picocli-related VersionProvider helper classes should be public to avoid access warnings
- Parsing text into a class became much slower under Groovy 3.x
- Assignment of Map literal to Map element fails to compile (static)
- STC: method or property missing errors for Closure's getResolveStrategy(), etc.
- leftShift operator does not work on BigInteger (throws UnsupportedOperationException)
- Traits using generics generate incorrect stub for Methods
- Class generation regression in 3.0.5-ss: This method should not have been called
- ScriptBytecodeAdapter.getPropertyOnSuper fails with method missing for getProperty
- super.method() can trigger method on outer class in case of missing method
- Property reference resolves to field, not getter when property name is single upper-case letter *
- MetaClassImpl uses findPropertyInClassHierarchy inefficiently
- Java 8 Type Param Annotation Not Generated in Byte Code
- ClassNode hasPossibleMethod and tryFindPossibleMethod make inefficient use of getMethods(String) and getSuperClass()
- Generic types get mixed up
- Inner interface of parent class unresolved in anon. inner class expression
- Using Spock thrown() method causes IllegalAccessError for 2.0-M2-groovy-3.0 on JDK 8 with noverify switch
- Inconsistencies in JavaBean naming for property access
- Module changes for Groovy 4
- Bad error message when attempting to call a missing constructor
- SC: ClassCastException for comparison to single-character string literal in closure
- SC: ClassCastException on delegate object property set
- should not consider bridge methods when determining whether an overridden method annotated with @Override is valid
- JmxMetaMapBuilder.buildOperationMapFrom throw StringIndexOutOfBoundsException
- Infinite recursion exists in HashCodeHelper#updateHash(int, java.lang.Character)
- Since Groovy 3 ArrayExpression#sizeExpression can suddenly return null
- Groovy 3.0.5: Closure delegate is not working properly
- ConcurrentModificationException with ASTTransformation
- trait conflict resolution not available for static methods
- GroovyCastException when using Trait.super.name = ... with multiple setters
- Groovy2 indy not backward compatible missingMethod with Groovy3
- 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
- Method call "main" is replaced with StaticMethodCallExpression in script
- Adding extension method 'call' on ArrayList with Closure as a parameter stopped working in 3.0.x
- @CompileStatic does not use bridge methods for keyed map access
- SC: set groovy property written for variable expression assignment that should be direct setter call
- ASTTest annotation has runtime retention and transform removes required member from AST *
- DefaultGroovyMethods.reverse(T[], true) performs extra copy
- The '~' negate operator causes an ASM processing error when static compiled
- Groovy 3.0.5 varargs [Static type checking] - Cannot find matching method
- TypeChecked: NoSuchMethodError: DefaultGroovyMethods.plus(java.lang.String, java.lang.Object)
- @Sortable annotation always sorts by the parent properties
- groovyc fails when compiling class starting with unicode character
- 3.0 stubs include packages annotations on classes other than package-info.groovy
- CompareToNullExpression has empty implementation of transformExpression
- STC: incorrect error for actual vs inferred closure parameter type
- VerifyError if superclass has static and non-static overloads
- NPE in ClassNode.isDerivedFrom while compiling trait with Groovy 3.0.5
- STC: error for addAll with collect argument
- ASTTest is run for every SourceUnit in a CompilationUnit
- groovsh import of non existing class throws null pointer instead of syntax error
- NPE when trait with type parameter is implemented as raw type
- Wrong type resolved if method reference used with typed method
- Regression in groovyc 3.0 and 4.0 and Compile static with generic static method in trait
- STC: UnionTypeClassNode created for simple instanceof scenarios
- Groovy 3 generated lambda classes are marked as synthetic
- STC: "putAt" shortcut notation to outer class private field from Closure leads to GroovyCastException
- AnnotationCollectorTransform generates code not marked with @Generated
- Stub missing cast, depending on constructor order
- Inconsistency with callable properties in static context
- GroovyRowResult not assignable to Map<String, Object> with static type checker
- SC: cast exception for variable assigned within conditional blocks
- bootstrap method initialization exception raised when lambda parameter type is wrong
- SC: cross-package protected field access uses dynamic property methods
- println(-0.0f) does not comply with IEEE754
- Using a method reference causes a compiler error
- Static type checker forgets nested generic types
- Static compile of dynamically generated code produces different output in a top-level class and a nested class
- Method reference doesn't accept subtypes of argument
- Object not bound with Groovy (but works fine in Java)
- @AutoImplement does not consider declared properties
- STC: spread-safe and list property access error for CollType<? extends ItemType>
- StackOverflowError in STC
- CVE-2020-17521 Apache Groovy Information Disclosure
- interface constants from super interfaces lost in some contexts
- Better propagation of InterruptedException
- Migrate from Codehouse to Apache Groovy 4.0.0-alpha
- Static inner class of a static inner class is missing inner class table attribute
- STC infers too-narrow bounds for inline map
- Private field and method use from subclass is inconsistent
- Result is already complete (IllegalStateException) *
- Compiler does not resolve compile-time constants in string concatenation
- Groovy3 doesn't parse a function property when there's a new line between return value and function name
- compilation error when passing a closure's genericized parameters to a constructor under static compilation
- parsing bug when inner class references top level class fields in groovy 3
- General error during instruction selection: ClassCastException
- arithmetic using an implicit getter fails to compile with "BUG! exception in phase 'class generation'" under static compilation
- docgenerator not displaying array types correctly
- backspace does not work in the groovysh under SecureCRT connecting Linux
- Switch incorrectly falls through default case
- STC can't distinguish SAMs based on arity
- STC: field or property with parameterized SAM-type and closure initializer
- groovy3: setProperty does not work in sub classes
- STC doesn't coerce GString in certain ternary expressions
- Static type checking can't find default method overload on interface
- Wrongly detected incompatible generic arguments for Java collections
- STC: VerifyError when embedding unary pre/postfix inc/decrement operation of outer field in GString
- Wrong overloaded method selected
- Switch return statement transformation misses last case without break
- Memoization doesn't seem to work for trait methods
- Generic typecheck in @DelegatesTo doesn't work
- STC: @DelegatesTo error for incomplete arguments linked to first line of source
- Groovy 3 bug: references to an outer class's parent class variable fails
- ArrayIndexOutOfBoundsException when compiling method call with many overloaded methods
- Type tracked from instanceof condition is not captured in closure
- Cannot call super when overriding an interface default method
- Tuples with same collection values do not match
- map.collectEntries extension method variant returns Map
- STC: call to static method fails with incompatible generics error
- IllegalArgumentException when set null to a boolean field into a closure
- NPE in static compiler when calling pathological method signature
- Several Sql#call variants incorrectly throw Exception rather than SqlException *
- MockFor/StubFor makes mocked internal method return null
- Bounded type parameter is not captured by closure
- int reference seems to not use its wrapper class
- Difference between Antlr2 and parrot parsers for variable declaration optimisation *
- VerifyError when instantiating class with @CompileStatic that implements a method with @DelegatesTo annotation.
- STC: Cannot find matching method when using Generics
- Cannot infer the right type in the presence of diamond operator
- @CompileStatic @POJO annotation on static inner class with @Immutable annotation
- Type from flow typing is not propagated in variable assignments
- JsonSlurper LAX parser skips the first character after comments
- IllegalAccessError exception is raised when accessing inherited static field
- Cannot infer correct type argument when passing a subtype of the declared type argument
- Generic type of field is not istantiated
- Build Error: StringIndexOutOfBoundsException when the stars align...
- STC: Access to field/property is forbidden after instanceof.
- @TypeChecked Error: Members of Iterable are Foo, not Object
- Type argument inference does not work in closure
- @TypeChecked: Closure no longer compatible with Closure argument
- LUB does not work correctly in case of ternary operator
- @CompileStatic: Binary operation with property throws ClassCastException
- @CompileStatic with Method References
- @CompileStatic does not work when a class field has a lambda initializer
- ASM reporting processing error
- CLONE - println(-0.0f) does not comply with IEEE754
- Can't assign a field with the result of a method call of the same name from a base class
- Type argument inference does not work in ternary operator
- Wrong type inference when passing null
- STC does not report type mismatches in array initializers
- STC: error for closure not matching functional interface method's parameter count
- CLONE - Field and a property with the same name: clarification of boundary cases *
- Type checking of array initializer expressions
- Wrong inference inside closure when having a bounded type parameter
- Cannot infer correct type argument when using subtyping
- STC: cast or coerce to functional interface fails to infer param types of closure/lambda
- Wildcards with a lower bound fail static type checking

Dependency upgrade:
- Bump jackson version to 2.12.2
- Bump checkstyle to 8.41.1
- Bump xstream to 1.4.16
- Bump JavaParser to 3.20.2
- Bump jansi to 2.3.2
- Bump log4j2 to 2.14.1
- Bump picocli to 4.6.1
- Bump Spotbugs/Spotbugs annotations to 4.2.2
- Bump json-unit to 2.25.0
- Bump asciidoctor versions
- Bump jackson to 2.12.3
- Bump Ant version to 1.10.10
- Bump spotbugs to 4.2.3
- Bump versions plugin to 0.38.0
- Bump Gradle to 6.8.3
- Bump junit to 5.7.1
- Bump Spock version to 2.0 final
- Bump javaparser to 3.22.1
- Bump xstream to 1.4.17
- Bump versions gradle plugin to 0.39.0
- Bump jansi to 2.3.3
- Bump gradle to 6.9
- Bump asm to 9.2
- Bump jackson version to 2.12.4
- Bump json-unit version to 2.27.0
- Bump Ant version to 1.10.11 (incorporates CVE-2021-36373 and CVE-2021-36374)
- Bump JUnit Jupiter/JUnit Platform to 5.7.2/1.7.2
- Bump slf4j to 1.7.31
- Bump Spotbugs version to 4.3.0
- Bump checkstyle to 8.44
- Bump gson to 2.8.7
- Bump Codenarc to 2.1.0
- Bump jansi to 2.3.4
- Bump Gradle to 6.9.1
- Bump xstream to 1.4.18
- Bump javaparser to 3.23.0
- Bump jackson version to 2.12.5
- Bump Spotbugs version to 4.4.0
- Bump Codenarc to 2.2.0
- Bump gradle to 7.2
- Bump asciidoctor gradle to 3.3.2
- Bump asciidoctorj to 2.5.2
- Bump junit5 to 5.8.0
- Bump JUnit5 to 5.8.1
- Bump jackson to 2.13.0
- Bump javaparser to 3.23.1
- Bump checkstyle to 9.0.1
- Bump Spotbugs/Spotbugs annotations to 4.4.2
- Bump jansi to 2.4.0
- Bump Commons CLI to 1.5.0
- Bump logback to 1.2.6
- Bump slf4j to 1.7.32
- Bump Ant version to 1.10.12
- Bump picocli to 4.6.2
- Bump gradle to 7.3-rc-5
- Bump gradle to 7.3
- Bump checkstyle to 9.1
- Bump japicmp plugin to 0.3.0
- Bump Spotbugs/Spotbugs annotations to 4.5.0
- Bump gson (test dependency) to 2.8.9
- Bump json-unit (test dependency) version to 2.28.0
- Bump logback to 1.2.7
- Bump jqwik (test dependency) to 1.6.0
- Bump junit to 5.8.2
- Bump bridger to 1.6.Final (build dependency)
- Bump gradle to 7.3.1 (build dependency)
- Bump jarjar to 1.8.0 (build dependency)
- Bump log4j2 version to 2.15.0 (test dependency)
- Bump log4j2 version to 2.16.0 (test dependency)
- Bump logback to 1.2.8 (test dependency)
- Bump gradle to 7.3.2 (build dependency)
- Bump jqwik to 1.6.1 (test dependency)
- Bump Spotbugs/Spotbugs annotations version to 4.5.2 (build dependencies)
- Bump checkstyle to 9.2 (build dependency)
- Bump log4j2 version to 2.17.0 (test dependency)
- Bump jqwik to 1.6.2 (test dependency)
- Bump jackson version to 2.13.1
- Bump gradle to 7.3.3 (build dependency)
- Bump hsqldb to 2.6.1 (test dependency)
- Bump log4j2 version to 2.17.1 (test dependency)
- Bump testng to 7.5
- Bump javaparser to 3.24.0
- Bump Spotbugs/Spotbugs annotations to 4.5.3 (build dependency)
- Bump logback to 1.2.10 (test dependency)
- Bump checkstyle to 9.2.1 (build dependency)
- Bump gradle versions plugin to 0.41.0 (build dependency)
- Bump slf4j to 1.7.33 (test dependency)
- Bump jqwik to 1.6.3 (test dependency)
- Bump javaparser to 3.15.12
- Bump gradle to 6.2.1
- Bump javaparser to 3.15.13
- Bump gradle to 6.2.2
- Bump javaparser to 3.15.15
- Bump javaparser to 3.15.17
- Bump ASM to 8.0
- Bump asm to 8.0.1
- Bump junit to 5.6.2
- Bump javaparser to 3.15.18
- Update Spotbugs/Spotbugs plugin to 4.0.2/4.0.5
- Bump javaparser to 3.15.21
- Bump testng to 7.2.0
- Bump spotbugs plugin to 4.0.8
- Bump gradle to 6.4
- Bump JavaParser to 3.15.22
- Bump Ant versions to address: [CVE-2020-1945] Apache Ant insecure temporary file vulnerability
- Bump gradle to 6.4.1
- Bump log4j2 version to 2.13.3
- Update Spotbugs/Spotbugs plugin to 4.0.3/4.2.0
- Bump gradle to 6.5
- Bump javaparser to 3.16.1
- Bump Spock to 2.0-M3-groovy-3.0
- Bump gradle to 6.5.1
- Bump checkstyle to 8.34
- Bump Jackson version to 2.11.1
- Bump Codenarc to 1.6
- Bump spotbugs/plugin to 4.0.6/4.4.4
- Bump rat to 0.7.0
- Bump picocli to 4.4.0 *
- Bump TestNG to 7.3.0
- Bump gradle to 6.6
- Bump spotbugs library/plugin to 4.1.1/4.5.0
- Bump versions plugin to 0.29.0
- Bump codenarc to 1.6.1
- Bump checkstyle to 8.35
- bump picocli to 4.5.0
- bump jackson version to 2.11.2
- Bump asciidoctor to 3.2.0
- Bump xstream to 1.4.13
- Bump JUnit5/platform to 5.7.0/1.7.0
- Bump gradle to 6.6.1
- Bump hsqldb to 2.5.1
- Bump picocli to 4.5.1
- Bump versions plugin to 0.33.0
- Bump spotbugs to 4.1.2
- Bump sonarqube plugin to 3.0
- Bump checkstyle to 8.36.1
- Bump ASM version to 9.0 and JDK 16 support
- Bump gradle to 6.7
- Bump javaparser to 3.16.2
- Bump Ant version to 1.10.9 (fixes Apache Ant CVE 2020-11979)
- Bump Spotbugs/Spotbugs annotations versions
- Bump JUnit4 version to 4.13.1 (includes security fix)
- Bump picocli version to 4.5.2
- Bump jackson to 2.11.3
- Bump javaparser to 3.16.3
- Bump Spock version to 2.0-M4-groovy-3.0
- bump jsp-api/servlet-api versions to 2.3.3/4.0.1
- Bump gradle to 6.7.1
- Bump xstream to 1.4.14
- Bump javaparser to 3.17.0
- Bump slf4j to 1.7.30
- Bump logback to 1.2.3
- Bump versions gradle plugin to 0.36.0
- Bump checkstyle to 8.37
- Bump japicmp gradle plugin to 0.2.9
- Bump log4j2 version to 2.14.0
- Bump Codenarc version to 2.0.0
- Bump findsecbugs plugin to 1.11.0
- Bump spotbugs plugin to 4.6.0
- Bump jackson to 2.12.0
- Upgrade Jansi to 2
- Bump antlr to 4.9.0
- Bump Gradle to 6.8
- Bump jansi to 2.1.1
- Bump xstream to 1.4.15
- Bump javaparser to 3.18.0
- Bump jackson to 2.12.1
- Bump Gradle to 6.8.1
- Bump checkstyle to 8.39
- Bump gradle to 6.8.2
- Bump Gradle to 6.8.2 and Gradle Enterprise Plugin to 3.5.2
- Bump ASM to 9.1 and add JDK17 constant
- Bump junit to 4.13.2
- Bump testng to 7.4.0
- Bump openbeans to 1.0.2

Documentation:
- Groovy match operator documentation should contain real examples and slashy strings reminder
- Groovy documentation does not describe how to instantiate empty maps in section where maps are first described

Improved:
- Eliminate some ambiguities while parsing
- @Lazy transform should check for explicit getters/setters *
- Add support for type conversion from Stream to array/collection/list/set
- SC: produce direct method call for assignment of collection to array
- Compiler writes multianewarray instruction for all non-initializer array allocations
- Compiler writes extra cast for Type[] to Object[]
- Eliminate redundant type cast
- STC: unresolved generics for return type of extension method call with full type arguments
- Add additional NamedParam annotations in ResourceGroovyMethods, NioExtensions and JsonSlurper
- STC sometimes requires explicit closure to SAM cast inside of another closure
- "del" ASCII character also should be escaped
- Groovy Console: Support JDKs without macOS Runtime Support for Java
- AST browser should show additional information *
- IndexedProperty AST transform should only provide the getter for immutable fields
- Consolidate methods for collecting interfaces *
- Support parsing multiple YAML documents
- Groovy 3 compilation errors are less accurate than Groovy 2
- Groovy should support sealed classes
- Eliminate ambiguities while parsing non-static class creator
- Add JDK18 constant
- Highlight source code in the AST browser smartly
- Provide a mechanism for users to enable Antlr4's SLL (fast but only simple) mode
- Avoid unnecessary security checks for each invocation
- Sealed classes should generate native class information for JDK17+
- @Final should have a boolean attribute to disable
- Align intersect which takes a closure/comparator ordering to be the same as other languages. *
- Support native record
- Add compiler option for logging class generation
- AnnotationCollector should not collect @Incubating which is a meta-annotation in Groovy
- Set target bytecode by JDK
- The Groovy Console About window could list Java/OS versions along with the Groovy version
- STC: cannot infer list or map type for method return
- Refine @ToString and @EqualsAndHashCode generation of fallback methods
- Refine records to not use system properties
- @ToString could provide annotation attributes to control further the format of the created toString
- Enhance records with additional helper methods
- Refine sealed classes to not use system properties
- "super" invocations of abstract methods should be caught at compile time with static compilation enabled
- Java8 does not load enum values into annotation attributes
- StaticTypeCheckingSupport#evaluateExpression can provide lightweight evaluation for simple expressions
- TupleConstructor could be improved to have a smarter mode for handling default values
- STC: check lambda or closure parameter types against target method
- SC: === and !== compiled to ScriptBytecodeAdapter#compareIdentical
- Provide a mechanism to prioritise AST transforms running at the same stage
- SC: !in compiled to ScriptBytecodeAdapter#isNotCase
- SC: <=> compiled to ScriptBytecodeAdapter#compareTo for primitives
- Prevents paging out the groovy console when minimized
- MethodNode toString() could add quotes when name contains spaces (or other non-identifier characters)
- Include `src/antlr` in the sources jar
- Add equals() and hashCode() methods to ImportNode
- Move AstBuilderTransformation Global xForm to separate module
- GString performance is slow with String's method
- Static type checks for closure parameters of methods
- map.foo = "bar" not optimized by the static compiler
- generics info can be improved for DGM methods with a collector
- Improve coercion / implicit cast of map literals for @CompileStatic
- Improve type inference for hash map -> Map
- Eliminate the additional resolving phase of compilation for better performance
- Support JDK15
- Groovy could provide some minimal methods to assist with migrating between Groovy versions
- Avoid unnecessary looking up default import classes when resolving types
- Make @NullCheck play nicer with @Immutable
- Added support for ScriptEngine.FILENAME behaviour
- Add a parse tree viewer to groovy console
- Support running as Java code in the Groovy console
- Support compiling as Java code in the Groovy console
- Groovy Ant task could support Ant resources
- Remove redundant code `Sentinel`
- Update and check if initialized via same field of metaclass
- Relax groovy.test.NotYetImplemented dependency on JUnit 4's AssertionFailedError *
- Add support for Path to slurper classes
- JavaShell should allow options to be passed
- Control the fallback threshold of indy with different switch
- Enable indy by default
- Remove antlr2 parser
- DGM: add toArray(Class) extension method for java.util.stream.Stream
- groovydoc: implemented interfaces not shown in class description
- groovydoc: $INIT static method shown on Groovy enums
- Also output aborted tests in JUnit 5 GroovyJUnitRunnerHelper
- Parse source codes in parallel
- Replace "groovy.generate.stub.in.memory" with "groovy.mem.stub"
- Rename whitelist/blacklist in SecureASTCustomizer to more meaningful names *
- return more specific type for ifS/ifElseS helper methods in GeneralUtils
- Adjust pom for groovy-test-junit5 so that junit-jupiter-api is compile time not runtime
- Initial support for reproducible builds
- Replace legacy data structure with Java collection *
- Improve the doco on the Groovy Console
- Improve the performance of GString
- Add java.io.File to immutable type list
- Tweak ManagedIdentityConcurrentMap for better performance
- Enhance immutability check
- Support coerce for @NamedVariant
- Compile error needed for illegal field modifier combination
- Remove org.objectweb.asm.Opcodes as implemented interface in most (all?) places *
- PropertyNode should be enriched to support getter/setter names
- Provide a way to filter illegal/discouraged characters when using MarkupBuilder
- EqualsAndHashCode should be enhanced to be POJO aware
- MapConstructor generated code should be POJO aware
- GroovyAssert should not depend on org.junit.Assert *
- Log generic mismatches extensively
- GroovyShell parse script use given context
- groovy-jmx: JmxMetaMapBuilder should support GString object names
- Show elapsed time in groovy console
- In generated closures, annotate generated call() methods with @Generated
- Add some DGM methods for primitive arrays
- DGM methods via dgminfo not enabled for int[][], long[][], double[][]
- Add DGM `asReversed` to `List`
- GroovyClassLoader#fileReallyExists is inefficient
- Replace legacy data structure with Java collection(SingleKeyHashMap) *
- Make Gradle build fully cacheable
- Add `@Pure` to mark constant result of method

New Feature:
- CLONE - left-open and full-open ranges (consider adjusting containsWithinBounds behavior) *
- Support sealed type grammar
- Groovy should have a @Final AST transform
- Provide a helper factory class to assist with porting
- Support record grammar
- Improvements to DGM: provide a set union and minus which take a closure/comparator
- Ability to create missing parent directories when using File.write()
- Type arguemnt checking
- Final field assignment check on static compilation
- Groovy should allow CompileStatic classes to not implement GroovyObject
- Groovy support for JSR 308/JEP 104 (Annotations in more places)
- [GEP] Create a LINQ-like DSL (basic cases)
- [GEP] Support LINQ, aka GINQ
- Support switch expression
- SecureASTCustomizer: add support for allowing or blocking entire package trees
- Implement JavaShell to run Java code
- Groovy should provide a Maven BOM
- Groovy could provide an AST transform to hook into platform logging (JEP 264)
- left-open and full-open ranges
- Absorb GContracts project into Groovy project
- There should be a mechanism to disable individual macro methods & extension methods
- provide a library of pre-canned macro methods
- Groovy 4 should provide some pre-canned type checker extensions
- We should provide shouldFail/assertScript variants which take a shell
- Provide a record-like equivalent
- ToString AST transformation should be enhanced to be POJO aware
- Support TOML
- Enhance Closure annotation value (as Closure class) to Arrays
- Add DGM `getPid`

Proposal:
- Groovy4 NV Macros: Rename NV* -> SV*

Sub-task:
- [JDK16] Illegal access to dynamic proxy
- [JDK16] Failed to invoke default method of proxy
- Can't call a Closure in a Closure's Delegete
- Static inner classes not visible to child classes

Task:
- Remove groovy-jaxb module from Groovy 4
- Remove BSF from Groovy 4
- Move stream-related extension methods to StreamGroovyMethods
- Prepare for deprecation of security manager (JEP-411)
- Refactor: split formatting methods out of InvokerHelper
- Refactor: split formatting methods out of InvokerHelper (allow separate control of escapeBackslashes) *
- Remove GroovyDoc JANSI dependency
- VMPlugin refactor: Coalesce Java5 through Java7 into Java8 *
- Rework gradle build to use modern conventions
- Rework gradle build to use modern conventions - test remediation
- Rework gradle build to use modern conventions - doc remediation
- Rework gradle build to use modern conventions - better support "provided" concept *
- Prepare for bintray/jcenter sunset
- Investigate impact of Bintray/JCenter shutdown (grape config aspects)

Technical Debt:
- Rework runtime script member resolution