}
protected String fixModifyBlocks(final RuleBuildContext context,
final JavaAnalysisResult analysis,
final String originalCode) {
MVELDialect mvel = (MVELDialect) context.getDialect( "mvel" );
TreeSet blocks = new TreeSet( new Comparator() {
public int compare(Object o1,
Object o2) {
JavaModifyBlockDescr d1 = (JavaModifyBlockDescr) o1;
JavaModifyBlockDescr d2 = (JavaModifyBlockDescr) o2;
return d1.getStart() - d2.getStart();
}
} );
for ( Iterator it = analysis.getModifyBlocks().iterator(); it.hasNext(); ) {
blocks.add( it.next() );
}
StringBuffer consequence = new StringBuffer();
int lastAdded = 0;
for ( Iterator it = blocks.iterator(); it.hasNext(); ) {
JavaModifyBlockDescr d = (JavaModifyBlockDescr) it.next();
// adding chunk
consequence.append( originalCode.substring( lastAdded,
d.getStart() - 1 ) );
lastAdded = d.getEnd();
Dialect.AnalysisResult mvelAnalysis = mvel.analyzeBlock( context,
context.getRuleDescr(),
mvel.getInterceptors(),
d.getModifyExpression(),
new Set[]{context.getDeclarationResolver().getDeclarations(context.getRule()).keySet(), context.getPkg().getGlobals().keySet()},
null );
final ExecutableStatement expr = (ExecutableStatement) mvel.compile( d.getModifyExpression(),
mvelAnalysis,
mvel.getInterceptors(),
null,
null,
context );
Class ret = expr.getKnownEgressType();