private String[] processNullSafeDereferencing( String expr, AtomicExprDescr atomicExpr, ConstraintConnectiveDescr ccd, int nullSafePos, int parentIdx, int childIdx ) { // convert "field1!.field2" in ["field1 != null && ", "field1.field2"] String field1 = expr.substring( 0, nullSafePos ).trim(); expr = field1 + "." + expr.substring( nullSafePos + 2 ).trim(); RelationalExprDescr check = new RelationalExprDescr( "!=", false, null, new AtomicExprDescr( getPreconditionsToAppend( field1 ) ), new AtomicExprDescr( "null" ) ); String innerCheck = ""; if ( ccd.getConnective() == ConnectiveType.AND || ccd.getConnective() == ConnectiveType.INC_AND ) { ccd.getDescrs().add( childIdx, check ); } else { BaseDescr desc = ccd.getDescrs().get( parentIdx ); if ( desc instanceof ConstraintConnectiveDescr ) { ((ConstraintConnectiveDescr) desc).getDescrs().add( childIdx, check ); } else { ConstraintConnectiveDescr localAnd = new ConstraintConnectiveDescr( ConnectiveType.AND ); BaseDescr original = ccd.getDescrs().remove( parentIdx ); localAnd.getDescrs().add( check ); localAnd.getDescrs().add( original ); ccd.getDescrs().add( parentIdx, localAnd ); } } innerCheck = check.toString() + " && "; String[] nullCheckAndExpr = new String[] { innerCheck, expr }; atomicExpr.setRewrittenExpression( expr ); return nullCheckAndExpr; }
result = (expr!=null?expr.result:null); if( result instanceof AtomicExprDescr ) { ((AtomicExprDescr)result).setExpression("(" +((AtomicExprDescr)result).getExpression() + ")" );
private boolean findExpressionValues(RelationalExprDescr relDescr, String[] values) { boolean usesThisRef; if ( relDescr.getRight() instanceof AtomicExprDescr ) { AtomicExprDescr rdescr = ((AtomicExprDescr) relDescr.getRight()); values[1] = rdescr.getRewrittenExpression().trim(); usesThisRef = "this".equals( values[1] ) || values[1].startsWith("this."); } else { BindingDescr rdescr = ((BindingDescr) relDescr.getRight()); values[1] = rdescr.getExpression().trim(); usesThisRef = "this".equals( values[1] ) || values[1].startsWith("this."); } if ( relDescr.getLeft() instanceof AtomicExprDescr ) { AtomicExprDescr ldescr = (AtomicExprDescr) relDescr.getLeft(); values[0] = ldescr.getRewrittenExpression(); usesThisRef = usesThisRef || "this".equals( values[0] ) || values[0].startsWith("this."); } else { values[0] = ((BindingDescr) relDescr.getLeft()).getExpression(); usesThisRef = usesThisRef || "this".equals( values[0] ) || values[0].startsWith("this."); } return usesThisRef; }
if( buildDescr ) { if ( (left!=null?left.result:null) == null ) { result = new AtomicExprDescr( (left!=null?input.toString(left.start,left.stop):null) ); } else if ( (left!=null?left.result:null) instanceof AtomicExprDescr ) { if ( (left!=null?input.toString(left.start,left.stop):null).equals(((AtomicExprDescr)(left!=null?left.result:null)).getExpression()) ) { result = (left!=null?left.result:null); } else { result = new AtomicExprDescr( (left!=null?input.toString(left.start,left.stop):null) ) ;
private void processBinding(StringBuilder sbuilder, BindingDescr bind, ConstraintConnectiveDescr parent, boolean isInsideRelCons, MVELDumperContext context) { String expr = bind.getExpression().trim(); AtomicExprDescr atomicExpr = new AtomicExprDescr(expr); String[] constrAndExpr = processImplicitConstraints(expr, atomicExpr, parent, parent.getDescrs().indexOf( bind ), context ); if ( isInsideRelCons ) { sbuilder.append( constrAndExpr[0] ).append( constrAndExpr[1] ); } else if ( constrAndExpr[0].length() > 4 ) { sbuilder.append( constrAndExpr[ 0 ].substring( 0, constrAndExpr[ 0 ].length() - 4 ) ); } if (bind.getExpression().equals(bind.getBindingField())) { bind.setExpressionAndBindingField( constrAndExpr[1] ); } else { bind.setExpression( constrAndExpr[1] ); } context.addBinding(bind); }
private StringBuilder processRightAtomicExpr( StringBuilder left, AtomicExprDescr atomicExpr, ConstraintConnectiveDescr parent, int parentIdx, MVELDumperContext context ) { String expr = atomicExpr.getExpression().trim(); expr = processEval( expr ); String[] constrAndExpr = processImplicitConstraints(expr, atomicExpr, parent, parentIdx, context); left.insert( 0, constrAndExpr[0] ); return new StringBuilder( constrAndExpr[1] ); }
private String processInferredCast(String expr, AtomicExprDescr atomicExpr, MVELDumperContext context) { if (context == null) { return expr; } Map.Entry<String, String> castEntry = context.getInferredCast(expr); if (castEntry == null) { return expr; } String castedExpr = "((" + castEntry.getValue() + ")" + castEntry.getKey() + ")" + expr.substring(castEntry.getKey().length()); atomicExpr.setRewrittenExpression(castedExpr); return castedExpr; }
BaseDescr descr = ( (value!=null?value.result:null) != null && ( (!((value!=null?value.result:null) instanceof AtomicExprDescr)) || ((value!=null?input.toString(value.start,value.stop):null).equals(((AtomicExprDescr)(value!=null?value.result:null)).getExpression())) )) ? (value!=null?value.result:null) : new AtomicExprDescr( (value!=null?input.toString(value.start,value.stop):null) ) ; result = new RelationalExprDescr( (op!=null?op.opr:null), (op!=null?op.negated:false), sa, ((relationalExpression_scope)relationalExpression_stack.peek()).lsd, descr ); if( ((relationalExpression_scope)relationalExpression_stack.peek()).lsd instanceof BindingDescr ) { ((relationalExpression_scope)relationalExpression_stack.peek()).lsd = new AtomicExprDescr( ((BindingDescr)((relationalExpression_scope)relationalExpression_stack.peek()).lsd).getExpression() );
if ( state.backtracking==0 ) { if( buildDescr ) { result = new RelationalExprDescr( (op!=null?input.toString(op.start,op.stop):null), false, null, left, new AtomicExprDescr((right!=null?input.toString(right.start,right.stop):null)) );
private String[] processAtomicExpression( StringBuilder sbuilder, MVELDumperContext context, AtomicExprDescr atomicExpr, ConstraintConnectiveDescr parent, int parentIdx ) { String expr = atomicExpr.getExpression().trim(); expr = processEval(expr); String[] constrAndExpr = processImplicitConstraints( expr, atomicExpr, parent, parentIdx, context ); // top-level, implicit constraints will be processed in different nodes. // Nested CCDs require all constraints to be evaluated locally, as a complex constraints sbuilder.append( context.isCcdNested() ? constrAndExpr[ 0 ] + constrAndExpr[ 1 ] : constrAndExpr[ 1 ] ); return constrAndExpr; }
false, null, new AtomicExprDescr( field1 ), new AtomicExprDescr( className ) ); atomicExpr.setRewrittenExpression(castedExpression); return new String[] { innerCheck, castedExpression };
result = ue; if( result instanceof AtomicExprDescr ) { ((AtomicExprDescr)result).setExpression( "+" + ((AtomicExprDescr)result).getExpression() ); result = ue; if( result instanceof AtomicExprDescr ) { ((AtomicExprDescr)result).setExpression( "-" + ((AtomicExprDescr)result).getExpression() );
if( left instanceof BindingDescr ) { binding = (BindingDescr)left; leftDescr = new AtomicExprDescr( binding.getExpression() ); } else { leftDescr = left;
protected boolean processAtomicExpression( RuleBuildContext context, Pattern pattern, BaseDescr d, String expr, Map<String, OperatorDescr> aliases ) { if ( d instanceof AtomicExprDescr ) { Matcher m = evalRegexp.matcher( ((AtomicExprDescr) d).getExpression() ); if ( m.find() ) { // MVELDumper already stripped the eval // this will build the eval using the specified dialect PredicateDescr pdescr = new PredicateDescr( context.getRuleDescr().getResource(), expr ); pdescr.copyLocation( d ); buildEval( context, pattern, pdescr, aliases, expr, true ); return true; } } return false; }
if (state.failed) return result; if ( state.backtracking==0 ) { if( buildDescr ) { result = new AtomicExprDescr( (literal11!=null?input.toString(literal11.start,literal11.stop):null), true ); }