code: private Collection<Node> check(final Collection<Selector> parts) throws NodeSelectorException {
  		Collection<Node> result = new LinkedHashSet<Node>();
  		result.add(root);
  
  		boolean initialPart=true;
  		for (Selector selector : parts) {
  			Checker<Node> checker = new TagChecker<Node>(helper, selector, initialPart);
  			result = checker.check(result);
  			if (selector.hasSpecifiers())
  				for (Specifier specifier : selector.getSpecifiers()) {
  					switch (specifier.getType()) {
  					case ATTRIBUTE:
  						checker = new AttributeSpecifierChecker<Node>(helper, (AttributeSpecifier) specifier);
  						break;
  					case PSEUDO:
  						if (specifier instanceof PseudoClassSpecifier)
  							checker = new PseudoClassSpecifierChecker<Node>(helper, (PseudoClassSpecifier) specifier);
  						else if (specifier instanceof PseudoNthSpecifier)
  							checker = new PseudoNthSpecifierChecker<Node>(helper, (PseudoNthSpecifier) specifier);
  						else if (specifier instanceof PseudoContainsSpecifier)
  							checker = new PseudoContainsSpecifierChecker<Node>(helper, (PseudoContainsSpecifier) specifier);
  
  						break;
  
  					case NEGATION:
  						final Collection<Node> negationNodes = checkNegationSpecifier((NegationSpecifier) specifier);
  						checker = new Checker<Node>() {
  							@Override
  							public List<Node> check(final Collection<Node> nodes) {
  								Collection<Node> set = new LinkedHashSet<Node>(nodes);
  								set.removeAll(negationNodes);
  								return new ArrayList<Node>(set);
  							}
  						};
  						break;
  					}
  
  					result = checker.check(result);
  					if (result.isEmpty())
  						// Bail out early.
  						return result;
  				}
  			initialPart=false;
  		}
  
  		return result;
  	}
docs: Check the list of selector <em>parts</em> and return a set of nodes with the result.
  
  @param parts A list of selector <em>parts</em>.
  @return A set of nodes.
  @throws NodeSelectorException In case of an error.