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

Details

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

    Description

      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.

      Checklists

        Acceptance criteria

        Attachments

          Issue Links

            Activity

              People

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

                Dates

                  Created:
                  Updated:
                  Resolved:

                  Checklists

                    Bug DoR
                    Task DoD

                    Time Tracking

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