From 7915b42f629dd31390807c204a330827f22f32ef Mon Sep 17 00:00:00 2001 From: Sergei Parshev Date: Tue, 10 Mar 2020 18:59:37 -0700 Subject: [PATCH] JENKINS-33925 Sample realization of the cps invoker interceptor --- .../groovy/cps/sandbox/DefaultInvoker.java | 4 ++-- .../groovy/cps/sandbox/InvokerInterceptor.java | 16 ++++++++++++++++ .../groovy/cps/sandbox/SandboxInvoker.java | 4 ++-- 3 files changed, 20 insertions(+), 4 deletions(-) create mode 100644 lib/src/main/java/com/cloudbees/groovy/cps/sandbox/InvokerInterceptor.java diff --git a/lib/src/main/java/com/cloudbees/groovy/cps/sandbox/DefaultInvoker.java b/lib/src/main/java/com/cloudbees/groovy/cps/sandbox/DefaultInvoker.java index 7b26f2e3..1b8963b2 100644 --- a/lib/src/main/java/com/cloudbees/groovy/cps/sandbox/DefaultInvoker.java +++ b/lib/src/main/java/com/cloudbees/groovy/cps/sandbox/DefaultInvoker.java @@ -14,8 +14,8 @@ * * @author Kohsuke Kawaguchi */ -public class DefaultInvoker implements Invoker { - public Object methodCall(Object receiver, String method, Object[] args) throws Throwable { +public class DefaultInvoker extends InvokerInterceptor { + public Object doMethodCall(Object receiver, String method, Object[] args) throws Throwable { CallSite callSite = fakeCallSite(method); Object v = callSite.call(receiver,args); return v; diff --git a/lib/src/main/java/com/cloudbees/groovy/cps/sandbox/InvokerInterceptor.java b/lib/src/main/java/com/cloudbees/groovy/cps/sandbox/InvokerInterceptor.java new file mode 100644 index 00000000..caf813d1 --- /dev/null +++ b/lib/src/main/java/com/cloudbees/groovy/cps/sandbox/InvokerInterceptor.java @@ -0,0 +1,16 @@ +package com.cloudbees.groovy.cps.sandbox; + +/** + * Allows to override one class to perform real-life tests of the CPS logic + * + * @author Sergei Parshev + */ +public abstract class InvokerInterceptor implements Invoker { + public Object methodCall(Object receiver, String method, Object[] args) throws Throwable { + return doMethodCall(receiver, method, args); + } + + abstract Object doMethodCall(Object receiver, String method, Object[] args) throws Throwable; + + private static final long serialVersionUID = 1L; +} diff --git a/lib/src/main/java/com/cloudbees/groovy/cps/sandbox/SandboxInvoker.java b/lib/src/main/java/com/cloudbees/groovy/cps/sandbox/SandboxInvoker.java index 2ea12ef7..eaf1b27a 100644 --- a/lib/src/main/java/com/cloudbees/groovy/cps/sandbox/SandboxInvoker.java +++ b/lib/src/main/java/com/cloudbees/groovy/cps/sandbox/SandboxInvoker.java @@ -12,8 +12,8 @@ * * @author Kohsuke Kawaguchi */ -public class SandboxInvoker implements Invoker { - public Object methodCall(Object receiver, String method, Object[] args) throws Throwable { +public class SandboxInvoker extends InvokerInterceptor { + public Object doMethodCall(Object receiver, String method, Object[] args) throws Throwable { return Checker.checkedCall(receiver,false,false,method,args); }