[ https://issues.apache.org/jira/browse/GROOVY-8817?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Dimitry Polivaev updated GROOVY-8817: ------------------------------------- Description: Debugging my application embedding Groovy 2.5.2 under Eclipse I get following exception trace: {code:java} 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) {code} When I check the sources I see following: {code:java} 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)); } }); {code} 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) was: Debugging my application embedding Groovy 2.5.2 under Eclipse I get following exception trace: {code:java} 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) {code} When I check the sources I see following: {code:java} 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)); } }); {code} Problem seems to 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) > MacroMethodsCache.get throws no such method error when runs under Eclipse > ------------------------------------------------------------------------- > > Key: GROOVY-8817 > URL: https://issues.apache.org/jira/browse/GROOVY-8817 > Project: Groovy > Issue Type: Bug > Components: groovy-runtime > Affects Versions: 2.5.2 > Reporter: Dimitry Polivaev > Priority: Major > > > Debugging my application embedding Groovy 2.5.2 under Eclipse I get > following exception trace: > > > {code:java} > 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) > {code} > > > When I check the sources I see following: > > {code:java} > 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)); > } > }); > {code} > 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) > -- This message was sent by Atlassian JIRA (v7.6.3#76005)