Uploaded image for project: 'Groovy'
  1. Groovy
  2. GROOVY-8817

MacroMethodsCache.get throws no such method error when runs under Eclipse

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Invalid
    • 2.5.0, 2.5.1, 2.5.2
    • None
    • groovy-runtime
    • 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

          Activity

            People

              Unassigned Unassigned
              dpolivaev Dimitry Polivaev
              Votes:
              0 Vote for this issue
              Watchers:
              3 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: