docs: @Pure
  	@SuppressWarnings({"checkstyle:cyclomaticcomplexity", "checkstyle:npathcomplexity",
  			"checkstyle:nestedifdepth"})
  	static URL convertStringToURL(String urlDescription, boolean allowResourceSearch,
  			boolean repliesFileURL, boolean supportWindowsPaths) {
  		URL url = null;
  
  		if (urlDescription != null && urlDescription.length() > 0)  {
  
  			if (supportWindowsPaths && isWindowsNativeFilename(urlDescription)) {
  				final File file = normalizeWindowsNativeFilename(urlDescription);
  				if (file != null) {
  					return convertFileToURL(file);
  				}
  			}
  
  			if (URISchemeType.RESOURCE.isScheme(urlDescription)) {
  				if (allowResourceSearch) {
  					final String resourceName = urlDescription.substring(9);
  					url = Resources.getResource(resourceName);
  				}
  			} else if (URISchemeType.FILE.isScheme(urlDescription)) {
  				final File file = new File(URISchemeType.FILE.removeScheme(urlDescription));
  				try {
  					url = new URL(URISchemeType.FILE.name(), "", fromFileStandardToURLStandard(file)); //$NON-NLS-1$
  				} catch (MalformedURLException e) {
  					//
  				}
  			} else {
  				try {
  					url = new URL(urlDescription);
  				} catch (MalformedURLException exception) {
  					// ignore error
  				}
  			}
  
  			if (url == null) {
  				if (allowResourceSearch) {
  					url = Resources.getResource(urlDescription);
  				}
  
  				if (url == null && URISchemeType.RESOURCE.isScheme(urlDescription)) {
  					return null;
  				}
  
  				if (url == null && repliesFileURL) {
  					final String urlPart = URISchemeType.removeAnyScheme(urlDescription);
  					// Try to parse a malformed JAR url:
  					// jar:{malformed-url}!/{entry}
  					if (URISchemeType.JAR.isScheme(urlDescription)) {
  						final int idx = urlPart.indexOf(JAR_URL_FILE_ROOT);
  						if (idx > 0) {
  							final URL jarURL = convertStringToURL(urlPart.substring(0, idx), allowResourceSearch);
  							if (jarURL != null) {
  								try {
  									url = toJarURL(jarURL, urlPart.substring(idx + 2));
  								} catch (MalformedURLException exception) {
  									//
  								}
  							}
  						}
  					}
  
  					// Standard local file
  					if (url == null) {
  						try {
  							final File file = new File(urlPart);
  							url = new URL(URISchemeType.FILE.name(), "", //$NON-NLS-1$
  									fromFileStandardToURLStandard(file));
  						} catch (MalformedURLException e) {
  							// ignore error
  						}
  					}
  				}
  			}
  		}
  
  		return url;
  	}