Uploaded image for project: 'Magnolia Groovy Module'
  1. Magnolia Groovy Module
  2. MGNLGROOVY-144

GroovyBugError: BUG! exception in phase 'semantic analysis' in source unit 'Script1.groovy' null – might occur when using MgnlContext to acquire session

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: Major Major
    • 2.4.4
    • 2.4.3
    • None
    • Basel 37
    • 3

      When using the console or a script with e.g.

      Welcome to the Magnolia Groovy Interactive Console! Type help for more info and a list of available commands. [Using Groovy version 2.4.3].
      mgnl> MgnlContext.getJCRSession("config")
      

      one might get the error

      GroovyBugError: BUG! exception in phase 'semantic analysis' in source unit 'Script1.groovy' null
      

      Stacktrace is

      Caused by: java.lang.NullPointerException
      	at info.magnolia.context.RequestAttributeStrategy.getAttribute(RequestAttributeStrategy.java:83)
      	at info.magnolia.context.AbstractContext.getAttribute(AbstractContext.java:107)
      	at info.magnolia.context.ContextDecorator.getAttribute(ContextDecorator.java:74)
      	at info.magnolia.module.groovy.console.MgnlGroovyConsoleContext.getRepositoryStrategy(MgnlGroovyConsoleContext.java:111)
      	at info.magnolia.module.groovy.console.MgnlGroovyConsoleContext.getJCRSession(MgnlGroovyConsoleContext.java:140)
      	at info.magnolia.module.groovy.support.classes.MgnlGroovyResourceLoader.loadGroovySourceFromRepository(MgnlGroovyResourceLoader.java:109)
      	at info.magnolia.module.groovy.support.classes.MgnlGroovyResourceLoader.loadGroovySource(MgnlGroovyResourceLoader.java:87)
      	at org.codehaus.groovy.control.ClassNodeResolver.tryAsScript(ClassNodeResolver.java:228)
      	at org.codehaus.groovy.control.ClassNodeResolver.tryAsLoaderClassOrScript(ClassNodeResolver.java:204)
      	at org.codehaus.groovy.control.ClassNodeResolver.findClassNode(ClassNodeResolver.java:167)
      	at org.codehaus.groovy.control.ClassNodeResolver.resolveName(ClassNodeResolver.java:123)
      	at org.codehaus.groovy.control.ResolveVisitor.resolveToOuter(ResolveVisitor.java:675)
      	at org.codehaus.groovy.control.ResolveVisitor.resolve(ResolveVisitor.java:307)
      	at org.codehaus.groovy.control.ResolveVisitor.resolveFromModule(ResolveVisitor.java:637)
      	at org.codehaus.groovy.control.ResolveVisitor.resolve(ResolveVisitor.java:307)
      	at org.codehaus.groovy.control.ResolveVisitor.resolve(ResolveVisitor.java:275)
      	at org.codehaus.groovy.control.ResolveVisitor.transformVariableExpression(ResolveVisitor.java:924)
      	at org.codehaus.groovy.control.ResolveVisitor.transform(ResolveVisitor.java:693)
      	at org.codehaus.groovy.control.ResolveVisitor.transformMethodCallExpression(ResolveVisitor.java:1062)
      	at org.codehaus.groovy.control.ResolveVisitor.transform(ResolveVisitor.java:701)
      	at org.codehaus.groovy.ast.ClassCodeExpressionTransformer.visitExpressionStatement(ClassCodeExpressionTransformer.java:139)
      	at org.codehaus.groovy.ast.stmt.ExpressionStatement.visit(ExpressionStatement.java:40)
      	at org.codehaus.groovy.ast.CodeVisitorSupport.visitBlockStatement(CodeVisitorSupport.java:35)
      	at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitBlockStatement(ClassCodeVisitorSupport.java:163)
      	at org.codehaus.groovy.control.ResolveVisitor.visitBlockStatement(ResolveVisitor.java:1317)
      	at org.codehaus.groovy.ast.stmt.BlockStatement.visit(BlockStatement.java:69)
      	at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClassCodeContainer(ClassCodeVisitorSupport.java:101)
      	at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitConstructorOrMethod(ClassCodeVisitorSupport.java:112)
      	at org.codehaus.groovy.ast.ClassCodeExpressionTransformer.visitConstructorOrMethod(ClassCodeExpressionTransformer.java:50)
      	at org.codehaus.groovy.control.ResolveVisitor.visitConstructorOrMethod(ResolveVisitor.java:200)
      	at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitMethod(ClassCodeVisitorSupport.java:123)
      	at org.codehaus.groovy.ast.ClassNode.visitContents(ClassNode.java:1083)
      	at org.codehaus.groovy.ast.ClassCodeVisitorSupport.visitClass(ClassCodeVisitorSupport.java:50)
      	at org.codehaus.groovy.control.ResolveVisitor.visitClass(ResolveVisitor.java:1260)
      	at org.codehaus.groovy.control.ResolveVisitor.startResolving(ResolveVisitor.java:175)
      	at org.codehaus.groovy.control.CompilationUnit$11.call(CompilationUnit.java:648)
      	at org.codehaus.groovy.control.CompilationUnit.applyToSourceUnits(CompilationUnit.java:928)
      	... 105 more
      
      Note

      It's difficult to give exact steps of how to reproduce, as the script/console command might be executed successfully more than once before the error occurs.

      Found cause

      MgnlGroovyResourceLoader#context is being stale upon the second run. Therefore, we get all the exceptions upon operations on the context.

      Solution

      Its simply getting Context on every request instead of doing once in the constructor.

        Acceptance criteria

              ilgun Ilgun Ilgun
              pmundt Philip Mundt
              Votes:
              4 Vote for this issue
              Watchers:
              7 Start watching this issue

                Created:
                Updated:
                Resolved:

                  Bug DoR
                  Task DoD

                    Estimated:
                    Original Estimate - Not Specified
                    Not Specified
                    Remaining:
                    Remaining Estimate - 0d
                    0d
                    Logged:
                    Time Spent - 1d
                    1d