Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Invalid
-
2.5.0, 2.5.1, 2.5.2
-
None
-
None
Description
Debugging my application embedding Groovy 2.5.2 under Eclipse I get following exception trace:
Caused by: java.lang.NoSuchMethodError: org.codehaus.groovy.runtime.memoize.EvictableCache.getAndPut(Ljava/lang/Object;Lorg/codehaus/groovy/runtime/memoize/MemoizeCache$ValueProvider;)Ljava/lang/Object; at org.codehaus.groovy.macro.transform.MacroMethodsCache.get(MacroMethodsCache.java:50) at org.codehaus.groovy.macro.transform.MacroCallTransformingVisitor.findMacroMethods(MacroCallTransformingVisitor.java:118) at org.codehaus.groovy.macro.transform.MacroCallTransformingVisitor.visitMethodCallExpression(MacroCallTransformingVisitor.java:89) at org.codehaus.groovy.ast.expr.MethodCallExpression.visit(MethodCallExpression.java:66) at org.codehaus.groovy.ast.CodeVisitorSupport.visitExpressionStatement(CodeVisitorSupport.java:71) at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitExpressionStatement(ClassCodeVisitorSupport.java:196) at org.codehaus.groovy.ast.stmt.ExpressionStatement.visit(ExpressionStatement.java:42) at org.codehaus.groovy.ast.MethodCallTransformation.visit(MethodCallTransformation.java:55) at org.codehaus.groovy.transform.ASTTransformationVisitor$3.call(ASTTransformationVisitor.java:321) at org.codehaus.groovy.control.CompilationUnit.applyToSourceUnits(CompilationUnit.java:943) at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:605) at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:581) at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:558) at groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:298) at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:268)
When I check the sources I see following:
import org.codehaus.groovy.runtime.memoize.EvictableCache; ... private static final EvictableCache<ClassLoader, Map<String, List<MethodNode>>> CACHE = new ConcurrentCommonCache<ClassLoader, Map<String, List<MethodNode>>>(new WeakHashMap<ClassLoader, Map<String, List<MethodNode>>>()); public static Map<String, List<MethodNode>> get(final ClassLoader classLoader) { return CACHE.getAndPut(classLoader, new EvictableCache.ValueProvider<ClassLoader, Map<String, List<MethodNode>>>() { @Override public Map<String, List<MethodNode>> provide(ClassLoader key) { return Collections.unmodifiableMap(getMacroMethodsFromClassLoader(key)); } });
EvictableCache does not contain method `getAndPut`, although ConcurrentCommonCache does.
Problem could be related to https://issues.apache.org/jira/browse/GROOVY-8525
I have no idea why the issue does not come if I run the app compiled by gradle
Gradle compiles against groovy 2.4.8 and runs with Gradle 2.5.2 (and 2.5.3-SNAPSHOT)
Attachments
Issue Links
- is related to
-
GROOVY-8525 Binary compatibility issue for GroovyClassLoader between 2.4 vs later branches
- Closed
- links to