final ContextResolver contextResolver) {
String text = descr.getText();
try {
MVELDialect dialect = (MVELDialect) context.getDialect( "mvel" );
boolean typeSafe = context.isTypesafe();
Map<String, Class<?>> variables = new HashMap<String,Class<?>>();
context.setTypesafe( false ); // we can't know all the types ahead of time with processes, but we don't need return types, so it's ok
BoundIdentifiers boundIdentifiers = new BoundIdentifiers(variables, context.getPackageBuilder().getGlobals());
MVELAnalysisResult analysis = ( MVELAnalysisResult ) dialect.analyzeBlock( context,
descr,
dialect.getInterceptors(),
text,
boundIdentifiers,
null,
"context",
org.drools.runtime.process.ProcessContext.class );
context.setTypesafe( typeSafe );
Set<String> variableNames = analysis.getNotBoundedIdentifiers();
if (contextResolver != null) {
for (String variableName: variableNames) {
if ( analysis.getMvelVariables().keySet().contains( variableName ) || variableName.equals( "kcontext" ) || variableName.equals( "context" ) ) {
continue;
}
VariableScope variableScope = (VariableScope) contextResolver.resolveContext(VariableScope.VARIABLE_SCOPE, variableName);
if (variableScope == null) {
context.getErrors().add(
new DescrBuildError(
context.getParentDescr(),
descr,
null,
"Could not find variable '" + variableName + "' for action '" + descr.getText() + "'" ) );
} else {
variables.put(variableName,
context.getDialect().getTypeResolver().resolveType(variableScope.findVariable(variableName).getType().getStringType()));
}
}
}
MVELCompilationUnit unit = dialect.getMVELCompilationUnit( text,
analysis,
null,
null,
variables,
context,
"context",
org.drools.runtime.process.ProcessContext.class);
//VELReturnValueExpression expr = new MVELReturnValueExpression( unit, context.getDialect().getId() );
MVELReturnValueEvaluator expr = new MVELReturnValueEvaluator( unit,
dialect.getId() );
// expr.setVariableNames(variableNames);
constraintNode.setEvaluator( expr );
MVELDialectRuntimeData data = (MVELDialectRuntimeData) context.getPkg().getDialectRuntimeRegistry().getDialectData( dialect.getId() );
data.addCompileable( constraintNode,
expr );
expr.compile( data );
} catch ( final Exception e ) {