I have this code in vars/mavenBuildSpike.groovy
:
@NonCPS
def createSqBuilder(SqBuildConfig config) {
System.out.println("createSqBuilder=${config}")
// The constructor contains code which the CPS transformer can't handle.
def result = new SqBuilder(config)
System.out.println("result=${result}")
return result
}
def call(Closure body) {
echo 'Creating ConfigBuilderWrapper'
def wrapper = new ConfigBuilderWrapper()
echo 'Calling apply()'
wrapper.apply(body)
echo 'Done processing closure'
def config = wrapper.builder.build()
echo "config=${config.dump()}"
echo 'Creating builder'
def builder = createSqBuilder(config) // <<--- This doesn't work.
echo "builder=${builder}"
echo builder.dump()
...
The output is:
...everything looks good...
[Pipeline] echo
Creating builder
[Pipeline] echo
builder=null
[Pipeline] End of Pipeline
java.lang.NullPointerException: Cannot invoke method hashCode() on null object
at org.codehaus.groovy.runtime.NullObject.hashCode(NullObject.java:174)
at org.codehaus.groovy.runtime.DefaultGroovyMethods.dump(DefaultGroovyMethods.java:291)
...
at org.kohsuke.groovy.sandbox.impl.Checker.checkedCall(Checker.java:159)
at com.cloudbees.groovy.cps.sandbox.SandboxInvoker.methodCall(SandboxInvoker.java:17)
at mavenBuildSpike.call(...\branches\master\builds\16\libs\sq-pipeline-library-spike\vars\mavenBuildSpike.groovy:33)
at WorkflowScript.run(WorkflowScript:4)
at ___cps.transform___(Native Method)
....
That is, the method createSqBuilder
is never called and just replaced with an assignment: def builder = new NullObject()
.
Why is that and how can I fix it?