Hi folks, I am wondering whether the type for sourceCache in GroovyClassLoader should be hard-coded as the concrete type StampedCommonCache<String, Class> but instead be the interface EvictableCache<String, Class>?
https://github.com/apache/groovy/blob/master/src/main/java/groovy/lang/GroovyClassLoader.java#L102 This would let folks creating a custom class loader change to one of the other caches, e.g. ConcurrentCommonCache if facing things like the deadlock mentioned in StampedCommonCache (see also GROOVY-9742). That is known to be slower but doesn't have the reentrancy issues. There is one place where a method only in StampedCommonCache is called but using instanceof, we could fallback to only using the interface methods (with some reduced functionality). This would break binary compatibility so I would only suggest it for Groovy 5. In addition to the type change, what do folks think about the proposed workaround mentioned in GROOVY-9742, e.g. change GroovyClassLoader#doParseClass() from private to public or protected. This could potentially be done for an earlier version, e.g. Groovy 4. Cheers, Paul.