code: public static List<Pair<String, String>> loadPropertyFile(String filename, Plugin bundledPlugin,
  			Class<?> readerClass,
  			Function1<IOException, IStatus> statusBuilder) {
  		final URL url;
  		if (bundledPlugin != null) {
  			url = FileLocator.find(
  					bundledPlugin.getBundle(),
  					Path.fromPortableString(filename),
  					null);
  		} else {
  			url = readerClass.getClassLoader().getResource(filename);
  		}
  		if (url == null) {
  			return Lists.newArrayList();
  		}
  		final OrderedProperties properties = new OrderedProperties();
  		try (InputStream is = url.openStream()) {
  			properties.load(is);
  		} catch (IOException exception) {
  			if (bundledPlugin != null) {
  				bundledPlugin.getLog().log(statusBuilder.apply(exception));
  			} else {
  				throw new RuntimeException(exception);
  			}
  		}
  		return properties.getOrderedProperties();
  	}
docs: Load a property file from the resources.
  This function is able to get the resource from an OSGi bundles if it is specified,
  or from the application classpath.
  
  @param filename the name of the resource, without the starting slash character.
  @param bundledPlugin the plugin that is able to provide the bundle that contains the resources, or {@code null}
  to use the application classpath.
  @param readerClass the class that has called this function. It is used for obtaining the resource if
  the bundled plugin is not provided.
  @param statusBuilder the builder of a status that takes the exception as parameter and creates a status object.
  This builder is used only if the {@code bundledPlugin} is not {@code null}.
  @return the loaded resources.