docs: @Override
  	protected List<Object> extractValues(String thePaths, IBaseResource theResource) {
  		IWorkerContext worker = new org.hl7.fhir.r4.hapi.ctx.HapiWorkerContext(getContext(), myValidationSupport);
  		FHIRPathEngine fp = new FHIRPathEngine(worker);
  		fp.setHostServices(new SearchParamExtractorR4HostServices());
  
  		List<Object> values = new ArrayList<>();
  		String[] nextPathsSplit = SPLIT_R4.split(thePaths);
  		for (String nextPath : nextPathsSplit) {
  			List<Base> allValues;
  			try {
  				allValues = fp.evaluate((Base) theResource, nextPath);
  			} catch (FHIRException e) {
  				String msg = getContext().getLocalizer().getMessage(BaseSearchParamExtractor.class, "failedToExtractPaths", nextPath, e.toString());
  				throw new InternalErrorException(msg, e);
  			}
  			if (allValues.isEmpty() == false) {
  				values.addAll(allValues);
  			}
  		}
  
  		for (int i = 0; i < values.size(); i++) {
  			Object nextObject = values.get(i);
  			if (nextObject instanceof Extension) {
  				Extension nextExtension = (Extension) nextObject;
  				nextObject = nextExtension.getValue();
  				values.set(i, nextObject);
  			}
  		}
  
  		return values;
  	}