public override bool SemanticAnalysis(INamable instance, BaseFilter expectation)
{
bool retVal = base.SemanticAnalysis(instance, expectation);
if (retVal)
{
// Binding expression
if (BindingExpression != null)
{
BindingExpression.SemanticAnalysis(instance, IsRightSide.INSTANCE);
StaticUsage.AddUsages(BindingExpression.StaticUsage, Usage.ModeEnum.Read);
Type bindingExpressionType = BindingExpression.GetExpressionType();
if (bindingExpressionType != null)
{
StaticUsage.AddUsage(bindingExpressionType, Root, Usage.ModeEnum.Type);
BoundVariable.Type = bindingExpressionType;
}
else
{
AddError("Cannot determine binding expression type for " + ToString(), RuleChecksEnum.SemanticAnalysisError);
}
}
else
{
AddError("Binding expression not provided", RuleChecksEnum.SemanticAnalysisError);
}
// The evaluated expression
if (Expression != null)
{
Expression.SemanticAnalysis(instance, expectation);
StaticUsage.AddUsages(Expression.StaticUsage, Usage.ModeEnum.Read);
}
else
{
AddError("Value expression not provided", RuleChecksEnum.SemanticAnalysisError);
}
}
return retVal;
}