docs: public static UIComponent resolveComponent(FacesContext context, UIComponent source, String expression, int hints) {
  
          if (LangUtils.isValueBlank(expression)) {
              if (SearchExpressionUtils.isHintSet(hints, SearchExpressionHint.PARENT_FALLBACK)) {
                  return source.getParent();
              }
  
              return null;
          }
  
          final char separatorChar = UINamingContainer.getSeparatorChar(context);
  
          expression = expression.trim();
  
          validateExpression(context, source, expression, separatorChar);
  
          if (expression.equals(SearchExpressionConstants.NONE_KEYWORD)) {
              return null;
          }
  
          if (LangUtils.isValueBlank(expression)) {
              return null;
          }
  
          UIComponent component;
  
          // if it contains a keyword and it's not a nested expression (e.g. @parent:@parent), we don't need to loop
          if (expression.contains(SearchExpressionConstants.KEYWORD_PREFIX) && expression.indexOf(separatorChar) != -1) {
              component = resolveComponentByExpressionChain(context, source, expression, separatorChar, hints);
          }
          // it's a keyword and not nested, just ask our resolvers
          else if (expression.contains(SearchExpressionConstants.KEYWORD_PREFIX)) {
              SearchExpressionResolver resolver = SearchExpressionResolverFactory.findResolver(expression);
              component = resolver.resolveComponent(context, source, source, expression, hints);
          }
          // default ID case
          else {
              ResolveComponentCallback callback = new ResolveComponentCallback();
              resolveComponentById(source, expression, separatorChar, context, callback);
              component = callback.getComponent();
          }
  
          if (component == null && !SearchExpressionUtils.isHintSet(hints, SearchExpressionHint.IGNORE_NO_RESULT)) {
              cannotFindComponent(context, source, expression);
          }
  
          return component;
      }