Instead of a Groovy based transform we need a model based instrumentation in the future to ensure that instrumentation also works for other (potential) language bindings. Instead of a special utility method the idea is to directly insert pre/post events into the source.
Example 1:
will be transformed to something like:
preEvent("declare a");
int a;
postEvent("declare a");
preEvent("assign a");
a=2;
postEvent("assign a");
For chained invocations and operators we need to introduce additional tmp-variables:
Example 2:
will be transformed to something like:
preEvent("LESS Operator");
boolean __vrl__tmpVar_1 = a < b;
postEvent("LESS Operator");
preEvent("if");
if(__vrl__tmpVar_1) {
//
}
postEvent("if");
We will also need to introduce a mapping between events and visual nodes to use the instrumentation from the ui.
Loops:
Loops need special treatment:
will be transformed to:
boolean __vrl_tmpVar_1 = true;
while(true) {
preEvent("LESS Operator");
__vrl_tmpVar_1 = a < b;
postEvent("LESS Operator");
if(!__vrl_tmpVar_1) break;
//
}
For complex condition arguments we need to extract the whole invocation chain and move it into the while loop.
Instead of a Groovy based transform we need a model based instrumentation in the future to ensure that instrumentation also works for other (potential) language bindings. Instead of a special utility method the idea is to directly insert pre/post events into the source.
Example 1:
will be transformed to something like:
For chained invocations and operators we need to introduce additional tmp-variables:
Example 2:
will be transformed to something like:
We will also need to introduce a mapping between events and visual nodes to use the instrumentation from the ui.
Loops:
Loops need special treatment:
will be transformed to:
For complex condition arguments we need to extract the whole invocation chain and move it into the while loop.