Uploaded image for project: 'Jenkins'
  1. Jenkins
  2. JENKINS-41896

Static nested classes in global libraries can not be used from other classes in same package

XMLWordPrintable

      Baseline global Library code:

      Here is the base code for the example.
      I will add to each example where I change the code.

      jenkins.mkobit.example.FirstClass

      package jenkins.mkobit.example
      
      class FirstClass {
        FirstClass() {
        }
      }
      

      jenkins.mkobit.example.SiblingClass

      package jenkins.mkobit.example
      
      class SiblingClass {
        static class SiblingInner {
        }
      }
      

      Jenkinsfile examples:

      FirstClass creates an instance of sibling class

      jenkins.mkobit.example.FirstClass

      package jenkins.mkobit.example
      
      class FirstClass {
        FirstClass() {
          new SiblingClass()
        }
      }
      

      Jenkinsfile

      @Library('pipelineUtilities@mkobit-global-cps-test')
      import jenkins.mkobit.example.FirstClass
      
      def firstClass = new FirstClass()
      

      Result: SUCCESS

      FirstClass creates an instance of sibling static nested class in constructor

      jenkins.mkobit.example.FirstClass

      package jenkins.mkobit.example
      
      class FirstClass {
        FirstClass() {
          new SiblingClass.SiblingInner()
        }
      }
      

      Jenkinsfile

      @Library('pipelineUtilities@mkobit-global-cps-test')
      import jenkins.mkobit.example.FirstClass
      
      def firstClass = new FirstClass()
      

      Result: FAILURE - I expect this to work similarly to how normal Groovy code works. Instead, I get a failed compilation issue.

      BUG! exception in phase 'semantic analysis' in source unit 'WorkflowScript' The lookup for jenkins.mkobit.example.FirstClass caused a failed compilaton. There should not have been any compilation from this call.
      	at org.codehaus.groovy.control.ClassNodeResolver.tryAsLoaderClassOrScript(ClassNodeResolver.java:190)
      	at org.codehaus.groovy.control.ClassNodeResolver.findClassNode(ClassNodeResolver.java:170)
      	at org.codehaus.groovy.control.ClassNodeResolver.resolveName(ClassNodeResolver.java:126)
      	at org.codehaus.groovy.control.ResolveVisitor.resolveToOuter(ResolveVisitor.java:676)
      	at org.codehaus.groovy.control.ResolveVisitor.resolve(ResolveVisitor.java:308)
      	at org.codehaus.groovy.control.ResolveVisitor.visitClass(ResolveVisitor.java:1218)
      	at org.codehaus.groovy.control.ResolveVisitor.startResolving(ResolveVisitor.java:176)
      	at org.codehaus.groovy.control.CompilationUnit$11.call(CompilationUnit.java:651)
      	at org.codehaus.groovy.control.CompilationUnit.applyToSourceUnits(CompilationUnit.java:931)
      	at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:593)
      	at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:542)
      	at groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:298)
      	at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:268)
      	at groovy.lang.GroovyShell.parseClass(GroovyShell.java:688)
      	at groovy.lang.GroovyShell.parse(GroovyShell.java:700)
      	at org.jenkinsci.plugins.workflow.cps.CpsGroovyShell.reparse(CpsGroovyShell.java:67)
      	at org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.parseScript(CpsFlowExecution.java:429)
      	at org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.start(CpsFlowExecution.java:392)
      	at org.jenkinsci.plugins.workflow.job.WorkflowRun.run(WorkflowRun.java:221)
      	at hudson.model.ResourceController.execute(ResourceController.java:98)
      	at hudson.model.Executor.run(Executor.java:405)
      Caused by: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
      /var/jenkins_home/jobs/ff/builds/29/libs/pipelineUtilities/src/jenkins/mkobit/example/FirstClass.groovy: 5: unable to resolve class SiblingClass.SiblingInner
       @ line 5, column 5.
             new SiblingClass.SiblingInner()
      

      FirstClass creates an instance of sibling static nested class when full classname imported in classfile

      jenkins.mkobit.example.FirstClass

      package jenkins.mkobit.example
      
      import jenkins.mkobit.example.SiblingClass.SiblingInner
      
      class FirstClass {
        FirstClass() {
          new SiblingInner()
        }
      }
      

      Jenkinsfile

      @Library('pipelineUtilities@mkobit-global-cps-test')
      import jenkins.mkobit.example.FirstClass
      
      def firstClass = new FirstClass()
      

      Result: FAILURE - I thought this might help out by forcing compilation.

      BUG! exception in phase 'semantic analysis' in source unit 'WorkflowScript' The lookup for jenkins.mkobit.example.FirstClass caused a failed compilaton. There should not have been any compilation from this call.
      	at org.codehaus.groovy.control.ClassNodeResolver.tryAsLoaderClassOrScript(ClassNodeResolver.java:190)
      	at org.codehaus.groovy.control.ClassNodeResolver.findClassNode(ClassNodeResolver.java:170)
      	at org.codehaus.groovy.control.ClassNodeResolver.resolveName(ClassNodeResolver.java:126)
      	at org.codehaus.groovy.control.ResolveVisitor.resolveToOuter(ResolveVisitor.java:676)
      	at org.codehaus.groovy.control.ResolveVisitor.resolve(ResolveVisitor.java:308)
      	at org.codehaus.groovy.control.ResolveVisitor.visitClass(ResolveVisitor.java:1218)
      	at org.codehaus.groovy.control.ResolveVisitor.startResolving(ResolveVisitor.java:176)
      	at org.codehaus.groovy.control.CompilationUnit$11.call(CompilationUnit.java:651)
      	at org.codehaus.groovy.control.CompilationUnit.applyToSourceUnits(CompilationUnit.java:931)
      	at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:593)
      	at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:542)
      	at groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:298)
      	at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:268)
      	at groovy.lang.GroovyShell.parseClass(GroovyShell.java:688)
      	at groovy.lang.GroovyShell.parse(GroovyShell.java:700)
      	at org.jenkinsci.plugins.workflow.cps.CpsGroovyShell.reparse(CpsGroovyShell.java:67)
      	at org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.parseScript(CpsFlowExecution.java:429)
      	at org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.start(CpsFlowExecution.java:392)
      	at org.jenkinsci.plugins.workflow.job.WorkflowRun.run(WorkflowRun.java:221)
      	at hudson.model.ResourceController.execute(ResourceController.java:98)
      	at hudson.model.Executor.run(Executor.java:405)
      Caused by: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
      /var/jenkins_home/jobs/ff/builds/30/libs/pipelineUtilities/src/jenkins/mkobit/example/FirstClass.groovy: 3: unable to resolve class jenkins.mkobit.example.SiblingClass.SiblingInner
       @ line 3, column 1.
         import jenkins.mkobit.example.SiblingClass.SiblingInner
      

      FirstClass creates an instance of sibling static nested class when class is imported in Jenkinsfile

      jenkins.mkobit.example.FirstClass

      package jenkins.mkobit.example
      
      class FirstClass {
        FirstClass() {
          new SiblingClass.SiblingInner()
        }
      }
      

      Jenkinsfile

      @Library('pipelineUtilities@mkobit-global-cps-test')
      import jenkins.mkobit.example.SiblingClass
      import jenkins.mkobit.example.FirstClass
      
      def firstClass = new FirstClass()
      

      Result: FAILURE This also fails

      BUG! exception in phase 'semantic analysis' in source unit 'WorkflowScript' The lookup for jenkins.mkobit.example.FirstClass caused a failed compilaton. There should not have been any compilation from this call.
      	at org.codehaus.groovy.control.ClassNodeResolver.tryAsLoaderClassOrScript(ClassNodeResolver.java:190)
      	at org.codehaus.groovy.control.ClassNodeResolver.findClassNode(ClassNodeResolver.java:170)
      	at org.codehaus.groovy.control.ClassNodeResolver.resolveName(ClassNodeResolver.java:126)
      	at org.codehaus.groovy.control.ResolveVisitor.resolveToOuter(ResolveVisitor.java:676)
      	at org.codehaus.groovy.control.ResolveVisitor.resolve(ResolveVisitor.java:308)
      	at org.codehaus.groovy.control.ResolveVisitor.visitClass(ResolveVisitor.java:1218)
      	at org.codehaus.groovy.control.ResolveVisitor.startResolving(ResolveVisitor.java:176)
      	at org.codehaus.groovy.control.CompilationUnit$11.call(CompilationUnit.java:651)
      	at org.codehaus.groovy.control.CompilationUnit.applyToSourceUnits(CompilationUnit.java:931)
      	at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:593)
      	at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:542)
      	at groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:298)
      	at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:268)
      	at groovy.lang.GroovyShell.parseClass(GroovyShell.java:688)
      	at groovy.lang.GroovyShell.parse(GroovyShell.java:700)
      	at org.jenkinsci.plugins.workflow.cps.CpsGroovyShell.reparse(CpsGroovyShell.java:67)
      	at org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.parseScript(CpsFlowExecution.java:429)
      	at org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.start(CpsFlowExecution.java:392)
      	at org.jenkinsci.plugins.workflow.job.WorkflowRun.run(WorkflowRun.java:221)
      	at hudson.model.ResourceController.execute(ResourceController.java:98)
      	at hudson.model.Executor.run(Executor.java:405)
      Caused by: org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
      /var/jenkins_home/jobs/ff/builds/37/libs/pipelineUtilities/src/jenkins/mkobit/example/FirstClass.groovy: 5: unable to resolve class SiblingClass.SiblingInner
       @ line 5, column 5.
             new SiblingClass.SiblingInner()
             ^
      
      1 error
      
      	at org.codehaus.groovy.control.ErrorCollector.failIfErrors(ErrorCollector.java:310)
      	at org.codehaus.groovy.control.CompilationUnit.applyToSourceUnits(CompilationUnit.java:946)
      	at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:593)
      	at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:542)
      	at groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:298)
      	at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:268)
      	at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:254)
      	at groovy.lang.GroovyClassLoader.recompile(GroovyClassLoader.java:761)
      	at groovy.lang.GroovyClassLoader.loadClass(GroovyClassLoader.java:718)
      	at groovy.lang.GroovyClassLoader.loadClass(GroovyClassLoader.java:787)
      	at java.lang.ClassLoader.loadClass(ClassLoader.java:411)
      	at groovy.lang.GroovyClassLoader.loadClass(GroovyClassLoader.java:677)
      	at groovy.lang.GroovyClassLoader.loadClass(GroovyClassLoader.java:545)
      	at org.codehaus.groovy.control.ClassNodeResolver.tryAsLoaderClassOrScript(ClassNodeResolver.java:185)
      	... 20 more
      Finished: FAILURE
      

            Unassigned Unassigned
            mkobit Mike Kobit
            Votes:
            9 Vote for this issue
            Watchers:
            11 Start watching this issue

              Created:
              Updated: