docs: protected static void validateExpression(FacesContext context, UIComponent source,
              String expression, char separatorChar) {
  
          if (context.isProjectStage(ProjectStage.Development)) {
  
              // checks the whole expression doesn't start with ":@"
              // keywords are always related to the current component, not absolute or relative
              if (expression.startsWith(separatorChar + SearchExpressionConstants.KEYWORD_PREFIX)) {
                  throw new FacesException("A expression should not start with the separater char and a keyword. "
                          + "Expression: \"" + expression + "\" referenced from \"" + source.getClientId(context) + "\"");
              }
  
              // Pattern to split expressions by the separator but not inside parenthesis
              String[] subExpressions = split(context, expression, separatorChar);
  
              if (subExpressions != null) {
                  // checks for unnestable subexpressions (like @all or @none)
                  if (subExpressions.length > 1) {
                      for (String subExpression : subExpressions) {
                          subExpression = subExpression.trim();
  
                          if (!isNestable(subExpression)) {
                              throw new FacesException("Subexpression \"" + subExpression
                                      + "\" in full expression \"" + expression
                                      + "\" from \"" + source.getClientId(context) + "\" can not be nested.");
                          }
                      }
                  }
              }
          }
      }