জেনকিনস পাইপলাইন গ্রোভি সিপিএস ইন্টারপ্রেটার ব্যবহার করে ধারাবাহিকতা-পাসিং স্টাইলে গ্রোভি কোড চালায় । এটি ভ্যানিলা গ্রোভি নয় আপনি সরাসরি আইডিইতে বা গ্রোভি শেলে এক্সিকিউট করতে পারেন।
ধারাবাহিকতা-পাসিং শৈলী এবং সঠিক গ্রোভি এক্সপ্রেশন যেমন সমর্থন করতে গ্রোভি সিপিএস আপনার কোডকে রূপান্তর করে:
a = b = c = 0
এমন কিছুতে রূপান্তরিত হয় যা দেখতে আরও বেশি দেখাচ্ছে:
eval(
var("a"),
assign(
eval(
var("b"),
assign(
eval(
var("c"),
assign(0)
)
)
)
)
)
সিপিএস ইন্টারপ্রেটারে এই এক্সপ্রেশনটির সাথে সমস্যাটি হ'ল অ্যাসাইনমেন্টটি কোনও মান ফেরত দেয় না এবং এইভাবে null
মানটি ভেরিয়েবলের জন্য নির্ধারিত হয় b
এবং একই জিনিসটি ভেরিয়েবলের সাথে ঘটে a
।
আপনি যদি সিপিএস ইনভোকেশন ব্লকে আরও গভীর খনন করতে চান তবে আপনি গ্রোভি সিপিএস প্রকল্পটি ক্লোন করতে পারেন এবং com.cloudbees.groovy.cps.CpsTransformerTest
ক্লাসে একটি সাধারণ পরীক্ষার কেস লিখতে পারেন ।
@Test
void testMultiVariablesInlineCPS() {
def cps = parseCps('''
int a, b, c
a = b = c = 0
''')
println cps
}
তারপরে আপনি একটি ব্রেকপয়েন্ট স্থাপন করতে পারেন println cps
এবং ডিবাগারটি চালাতে পারেন। আপনি যখন পরিদর্শন উইন্ডোটি খুলবেন, আপনি এইটির মতো চিত্রটি দেখতে পাবেন:
পার্শ্ব নোট হিসাবে, মনে রাখবেন যে গ্রোভি সংকলক কোডটি বাইটকোডে সংকলিত করার সময় আপনার একক লাইন অ্যাসাইনমেন্টগুলিও রূপান্তর করে। আপনি যদি একটি সাধারণ গ্রোভি স্ক্রিপ্ট সংকলন করেন তবে:
int a, b, c
a = b = c = 0
println "$a $b $c"
এবং তারপরে আপনি জাভা সমমানের বাইটোকডটি ছিন্ন করতে আইডিইতে এর শ্রেণি ফাইলটি খুলুন, আপনি এরকম কিছু দেখতে পাবেন:
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//
import groovy.lang.Binding;
import groovy.lang.Script;
import org.codehaus.groovy.runtime.GStringImpl;
import org.codehaus.groovy.runtime.InvokerHelper;
import org.codehaus.groovy.runtime.callsite.CallSite;
public class test extends Script {
public test() {
CallSite[] var1 = $getCallSiteArray();
}
public test(Binding context) {
CallSite[] var2 = $getCallSiteArray();
super(context);
}
public static void main(String... args) {
CallSite[] var1 = $getCallSiteArray();
var1[0].call(InvokerHelper.class, test.class, args);
}
public Object run() {
CallSite[] var1 = $getCallSiteArray();
int a = 0;
int b = 0;
int c = 0;
byte var5 = 0;
return var1[1].callCurrent(this, new GStringImpl(new Object[]{Integer.valueOf(var5), Integer.valueOf(var5), Integer.valueOf(var5)}, new String[]{"", " ", " ", ""}));
}
}