-
Bug
-
Resolution: Unresolved
-
Minor
The following document provides an example how to handle native NonCPS methods like toString.
class Test { @Override public String toString() { return "Test" } } def builder = new StringBuilder() builder.append(new Test()) echo(builder.toString())
But this example is way to trivial, as toString in 99,99% returns variable information usually provided by a couple of handy methods of the class, like in this case with CPS getFullName method
class Test { String name Test(String name) { this.name = name } String getFullName() { return 'some prefix ' + name } @NonCPS @Override public String toString() { return this.fullName } } def builder = new StringBuilder() builder.append(new Test('foobar')) echo(builder.toString())
Previously this code worked as it doesn't call any steps as the document suggest, but now it started to raise
java.lang.IllegalStateException: expected to call java.lang.StringBuilder.append but wound up catching Test.getFullName; see: https://jenkins.io/redirect/pipeline-cps-method-mismatches
Obviously it's possible to put in @NonCPS for getFullName but that simply means that almost all methods by default must be @NonCPS, and only those that call steps must be CPS ones.
Can we have this
'org.jenkinsci.plugins.workflow.cps.CpsVmExecutorService.handleMismatch'
properly fixed as there's actually no mismatch, as even explicit toString
(new Test('foobar')).toString()
doesn't help to work this around?
- relates to
-
JENKINS-31314 Running asynchronous code inside a @NonCPS method should fail cleanly
- Resolved