diff --git a/bundles/org.eclipse.equinox.launcher/src/org/eclipse/core/launcher/Main.java b/bundles/org.eclipse.equinox.launcher/src/org/eclipse/core/launcher/Main.java
index 9035c2b..3d2e564 100644
--- a/bundles/org.eclipse.equinox.launcher/src/org/eclipse/core/launcher/Main.java
+++ b/bundles/org.eclipse.equinox.launcher/src/org/eclipse/core/launcher/Main.java
@@ -19,13 +19,13 @@
  * <p>
  * <b>Note:</b> This class should not be referenced programmatically by
  * other Java code. This class exists only for the purpose of launching Eclipse
- * from the command line. To launch Eclipse programmatically, use 
+ * from the command line. To launch Eclipse programmatically, use
  * org.eclipse.core.runtime.adaptor.EclipseStarter. The fields and methods
  * on this class are not API.
  * @noextend This class is not intended to be subclassed by clients.
  * @noinstantiate This class is not intended to be instantiated by clients.
  * @noreference This class is not intended to be referenced by clients.
- * 
+ *
  * @deprecated
  *
  * This API is planned to be deleted, see https://bugs.eclipse.org/bugs/show_bug.cgi?id=544262
@@ -36,7 +36,7 @@
 
 	/**
 	 * Pass our args along to the real Main class.
-	 * 
+	 *
 	 * @param args the given arguments
 	 * @noreference This method is not intended to be referenced by clients.
 	 */
diff --git a/bundles/org.eclipse.equinox.launcher/src/org/eclipse/equinox/internal/launcher/Constants.java b/bundles/org.eclipse.equinox.launcher/src/org/eclipse/equinox/internal/launcher/Constants.java
index 1a0a79d..805a538 100644
--- a/bundles/org.eclipse.equinox.launcher/src/org/eclipse/equinox/internal/launcher/Constants.java
+++ b/bundles/org.eclipse.equinox.launcher/src/org/eclipse/equinox/internal/launcher/Constants.java
@@ -3,11 +3,11 @@
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at 
+ * which accompanies this distribution, and is available at
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     Andrew Niefer - IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.equinox.launcher/src/org/eclipse/equinox/launcher/JNIBridge.java b/bundles/org.eclipse.equinox.launcher/src/org/eclipse/equinox/launcher/JNIBridge.java
index c06d8e0..9eba8fd 100644
--- a/bundles/org.eclipse.equinox.launcher/src/org/eclipse/equinox/launcher/JNIBridge.java
+++ b/bundles/org.eclipse.equinox.launcher/src/org/eclipse/equinox/launcher/JNIBridge.java
@@ -3,11 +3,11 @@
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at 
+ * which accompanies this distribution, and is available at
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Rapicorp, Inc - Default the configuration to Application Support (bug 461725)
@@ -17,7 +17,7 @@
 /**
  * <b>Note:</b> This class should not be referenced programmatically by
  * other Java code. This class exists only for the purpose of interacting with
- * a native launcher. To launch Eclipse programmatically, use 
+ * a native launcher. To launch Eclipse programmatically, use
  * org.eclipse.core.runtime.adaptor.EclipseStarter. This class is not API.
  *
  * @noextend This class is not intended to be subclassed by clients.
@@ -48,7 +48,7 @@
 
 	/**
 	 * @noreference This constructor is not intended to be referenced by clients.
-	 * 
+	 *
 	 * @param library the given library
 	 */
 	public JNIBridge(String library) {
@@ -155,10 +155,10 @@
 	}
 
 	/**
-	 * Whether or not we loaded the shared library here from java.  
+	 * Whether or not we loaded the shared library here from java.
 	 * False does not imply the library is not available, it could have
 	 * been loaded natively by the executable.
-	 * 
+	 *
 	 * @return boolean
 	 */
 	boolean isLibraryLoadedByJava() {
diff --git a/bundles/org.eclipse.equinox.launcher/src/org/eclipse/equinox/launcher/Main.java b/bundles/org.eclipse.equinox.launcher/src/org/eclipse/equinox/launcher/Main.java
index 456943a..1445719 100644
--- a/bundles/org.eclipse.equinox.launcher/src/org/eclipse/equinox/launcher/Main.java
+++ b/bundles/org.eclipse.equinox.launcher/src/org/eclipse/equinox/launcher/Main.java
@@ -33,13 +33,13 @@
 
 /**
  * The launcher for Eclipse.
- * 
+ *
  * <b>Note:</b> This class should not be referenced programmatically by
  * other Java code. This class exists only for the purpose of launching Eclipse
- * from the command line. To launch Eclipse programmatically, use 
+ * from the command line. To launch Eclipse programmatically, use
  * org.eclipse.core.runtime.adaptor.EclipseStarter. The fields and methods
  * on this class are not API.
- * 
+ *
  * @noextend This class is not intended to be subclassed by clients.
  * @noinstantiate This class is not intended to be instantiated by clients.
  */
@@ -172,7 +172,7 @@
 	private static final String STARTER = "org.eclipse.core.runtime.adaptor.EclipseStarter"; //$NON-NLS-1$
 	private static final String PLATFORM_URL = "platform:/base/"; //$NON-NLS-1$
 	private static final String ECLIPSE_PROPERTIES = "eclipse.properties"; //$NON-NLS-1$
-	private static final String FILE_SCHEME = "file:"; //$NON-NLS-1$    
+	private static final String FILE_SCHEME = "file:"; //$NON-NLS-1$
 	protected static final String REFERENCE_SCHEME = "reference:"; //$NON-NLS-1$
 	protected static final String JAR_SCHEME = "jar:"; //$NON-NLS-1$
 
@@ -208,7 +208,7 @@
 	private static final String PROP_FRAMEWORK_PARENT_CLASSLOADER = "osgi.frameworkParentClassloader"; //$NON-NLS-1$
 	private static final String PROP_NL = "osgi.nl"; //$NON-NLS-1$
 	static final String PROP_NOSHUTDOWN = "osgi.noShutdown"; //$NON-NLS-1$
-	private static final String PROP_DEBUG = "osgi.debug"; //$NON-NLS-1$	
+	private static final String PROP_DEBUG = "osgi.debug"; //$NON-NLS-1$
 	private static final String PROP_OS = "osgi.os"; //$NON-NLS-1$
 	private static final String PROP_WS = "osgi.ws"; //$NON-NLS-1$
 	private static final String PROP_ARCH = "osgi.arch"; //$NON-NLS-1$
@@ -265,7 +265,7 @@
 
 	/**
 	 * A structured form for a version identifier.
-	 * 
+	 *
 	 * @see "http://www.oracle.com/technetwork/java/javase/versioning-naming-139433.html for information on valid version strings"
 	 * @see "http://openjdk.java.net/jeps/223 for information on the JavaSE-9 version JEP 223"
 	 */
@@ -301,13 +301,13 @@
 					service = Integer.parseInt(tokenizer.nextToken());
 			} catch (NumberFormatException nfe) {
 				// ignore the minor and service qualifiers in that case and default to 0
-				// this will allow us to tolerate other non-conventional version numbers 
+				// this will allow us to tolerate other non-conventional version numbers
 			}
 		}
 
 		/**
 		 * Returns true if this id is considered to be greater than or equal to the given baseline.
-		 * e.g. 
+		 * e.g.
 		 * 1.2.9 >= 1.3.1 -> false
 		 * 1.3.0 >= 1.3.1 -> false
 		 * 1.3.1 >= 1.3.1 -> true
@@ -545,7 +545,7 @@
 
 	/**
 	 * Executes the launch.
-	 * 
+	 *
 	 * @param args command-line arguments
 	 * @exception Exception thrown if a problem occurs during the launch
 	 */
@@ -567,7 +567,7 @@
 		}
 		// need to ensure that getInstallLocation is called at least once to initialize the value.
 		// Do this AFTER processing the configuration to allow the configuration to set
-		// the install location.  
+		// the install location.
 		getInstallLocation();
 
 		// locate boot plugin (may return -dev mode variations)
@@ -576,7 +576,7 @@
 		//Set up the JNI bridge.  We need to know the install location to find the shared library
 		setupJNI(bootPath);
 
-		//ensure minimum Java version, do this after JNI is set up so that we can write an error message 
+		//ensure minimum Java version, do this after JNI is set up so that we can write an error message
 		//with exitdata if we fail.
 		if (!checkVersion(System.getProperty("java.version"), System.getProperty(PROP_REQUIRED_JAVA_VERSION))) //$NON-NLS-1$
 			return;
@@ -667,11 +667,11 @@
 	}
 
 	/**
-	 * Checks whether the given available version is greater or equal to the 
+	 * Checks whether the given available version is greater or equal to the
 	 * given required version.
 	 * <p>Will set PROP_EXITCODE/PROP_EXITDATA accordingly if check fails.</p>
-	 *   
-	 * @return a boolean indicating whether the checking passed 
+	 *
+	 * @return a boolean indicating whether the checking passed
 	 */
 	private boolean checkVersion(String availableVersion, String requiredVersion) {
 		if (requiredVersion == null || availableVersion == null)
@@ -681,7 +681,7 @@
 			Identifier available = new Identifier(availableVersion);
 			boolean compatible = available.isGreaterEqualTo(required);
 			if (!compatible) {
-				// any non-zero value should do it - 14 used to be used for version incompatibility in Eclipse 2.1 
+				// any non-zero value should do it - 14 used to be used for version incompatibility in Eclipse 2.1
 				System.setProperty(PROP_EXITCODE, "14"); //$NON-NLS-1$
 				System.setProperty(PROP_EXITDATA, "<title>Incompatible JVM</title>Version " + availableVersion + " of the JVM is not suitable for this product. Version: " + requiredVersion + " or greater is required."); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
 			}
@@ -700,9 +700,9 @@
 	 * If the system property "osgi.configuration.area.readOnly" is set
 	 * the check always succeeds.
 	 * <p>Will set PROP_EXITCODE/PROP_EXITDATA accordingly if check fails.</p>
-	 * 
+	 *
 	 * @param locationUrl  configuration area URL, may be <code>null</code>
-	 * @return a boolean indicating whether the checking passed 
+	 * @return a boolean indicating whether the checking passed
 	 */
 	private boolean checkConfigurationLocation(URL locationUrl) {
 		if (locationUrl == null || !"file".equals(locationUrl.getProtocol())) //$NON-NLS-1$
@@ -738,7 +738,7 @@
 	 */
 	protected String decode(String urlString) {
 		try {
-			//first encode '+' characters, because URLDecoder incorrectly converts 
+			//first encode '+' characters, because URLDecoder incorrectly converts
 			//them to spaces on certain class library implementations.
 			if (urlString.indexOf('+') >= 0) {
 				int len = urlString.length();
@@ -760,7 +760,7 @@
 
 	/**
 	 * Returns the result of converting a list of comma-separated tokens into an array
-	 * 
+	 *
 	 * @return the array of string tokens
 	 * @param prop the initial comma-separated string
 	 */
@@ -781,7 +781,7 @@
 	/**
 	 * Returns the <code>URL</code>-based class path describing where the boot classes
 	 * are located when running in development mode.
-	 * 
+	 *
 	 * @return the url-based class path
 	 * @param base the base location
 	 * @exception MalformedURLException if a problem occurs computing the class path
@@ -961,7 +961,7 @@
 
 	/**
 	 * Returns the <code>URL</code>-based class path describing where the boot classes are located.
-	 * 
+	 *
 	 * @return the url-based class path
 	 * @param base the base location
 	 * @exception MalformedURLException if a problem occurs computing the class path
@@ -1000,7 +1000,7 @@
 	/**
 	 * Searches for the given target directory starting in the "plugins" subdirectory
 	 * of the given location.
-	 * 
+	 *
 	 * @return the location where target directory was found, <code>null</code> otherwise
 	 * @param start the location to begin searching
 	 */
@@ -1102,7 +1102,7 @@
 	}
 
 	/**
-	 * Compares version strings. 
+	 * Compares version strings.
 	 * @return result of comparison, as integer;
 	 * <code><0</code> if left < right;
 	 * <code>0</code> if left == right;
@@ -1192,7 +1192,7 @@
 	/**
 	 * Resolve the given file against  osgi.install.area.
 	 * If osgi.install.area is not set, or the file is not relative, then
-	 * the file is returned as is. 
+	 * the file is returned as is.
 	 */
 	private static File resolveFile(File toAdjust) {
 		if (!toAdjust.isAbsolute()) {
@@ -1219,7 +1219,7 @@
 		URL result = null;
 		String location = System.getProperty(property);
 		System.clearProperty(property);
-		// if the instance location is not set, predict where the workspace will be and 
+		// if the instance location is not set, predict where the workspace will be and
 		// put the instance area inside the workspace meta area.
 		try {
 			if (location == null)
@@ -1256,18 +1256,18 @@
 		return value + source.substring(var.length());
 	}
 
-	/** 
+	/**
 	 * Retuns the default file system path for the configuration location.
 	 * By default the configuration information is in the installation directory
 	 * if this is writeable.  Otherwise it is located somewhere in the user.home
-	 * area relative to the current product. 
+	 * area relative to the current product.
 	 * @return the default file system path for the configuration information
 	 */
 	private String computeDefaultConfigurationLocation() {
 		// 1) We store the config state relative to the 'eclipse' directory if possible
-		// 2) If this directory is read-only 
-		//    we store the state in <user.home>/.eclipse/<application-id>_<version> where <user.home> 
-		//    is unique for each local user, and <application-id> is the one 
+		// 2) If this directory is read-only
+		//    we store the state in <user.home>/.eclipse/<application-id>_<version> where <user.home>
+		//    is unique for each local user, and <application-id> is the one
 		//    defined in .eclipseproduct marker file. If .eclipseproduct does not
 		//    exist, use "eclipse" as the application-id.
 
@@ -1298,8 +1298,8 @@
 	 *   product and the given appendage
 	 */
 	private String computeDefaultUserAreaLocation(String pathAppendage) {
-		//    we store the state in <user.home>/.eclipse/<application-id>_<version> where <user.home> 
-		//    is unique for each local user, and <application-id> is the one 
+		//    we store the state in <user.home>/.eclipse/<application-id>_<version> where <user.home>
+		//    is unique for each local user, and <application-id> is the one
 		//    defined in .eclipseproduct marker file. If .eclipseproduct does not
 		//    exist, use "eclipse" as the application-id.
 		URL installURL = getInstallLocation();
@@ -1332,7 +1332,7 @@
 					appVersion = ""; //$NON-NLS-1$
 				appName += File.separator + appId + "_" + appVersion + "_" + installDirHash; //$NON-NLS-1$ //$NON-NLS-2$
 			} catch (IOException e) {
-				// Do nothing if we get an exception.  We will default to a standard location 
+				// Do nothing if we get an exception.  We will default to a standard location
 				// in the user's home dir.
 				// add the hash to help prevent collisions
 				appName += File.separator + installDirHash;
@@ -1389,7 +1389,7 @@
 
 	/**
 	 * Runs this launcher with the arguments specified in the given string.
-	 * 
+	 *
 	 * @param argString the arguments string
 	 */
 	public static void main(String argString) {
@@ -1410,7 +1410,7 @@
 	 * Clients wishing to run the platform without a following <code>System.exit</code>
 	 * call should use <code>run()</code>.
 	 * </p>
-	 * 
+	 *
 	 * @param args the command line arguments
 	 * @see #run(String[])
 	 */
@@ -1452,8 +1452,8 @@
 				result = 17;
 			}
 		} catch (Throwable e) {
-			// only log the exceptions if they have not been caught by the 
-			// EclipseStarter (i.e., if the exitCode is not 13) 
+			// only log the exceptions if they have not been caught by the
+			// EclipseStarter (i.e., if the exitCode is not 13)
 			if (!"13".equals(System.getProperty(PROP_EXITCODE))) { //$NON-NLS-1$
 				log("Exception launching the Eclipse Platform:"); //$NON-NLS-1$
 				log(e);
@@ -1502,7 +1502,7 @@
 	 * consume the arguments and leave them to be processed by Eclipse proper.
 	 * There are a few args which are directed towards main() and a few others
 	 * which we need to know about. Very few should actually be consumed here.
-	 * 
+	 *
 	 * @return the arguments to pass through to the launched application
 	 * @param args the command line arguments
 	 */
@@ -1547,7 +1547,7 @@
 			}
 
 			// check if development mode should be enabled for the entire platform
-			// If this is the last arg or there is a following arg (i.e., arg+1 has a leading -), 
+			// If this is the last arg or there is a following arg (i.e., arg+1 has a leading -),
 			// simply enable development mode.  Otherwise, assume that that the following arg is
 			// actually some additional development time class path entries.  This will be processed below.
 			if (args[i].equalsIgnoreCase(DEV) && ((i + 1 == args.length) || ((i + 1 < args.length) && (args[i + 1].startsWith("-"))))) { //$NON-NLS-1$
@@ -1577,7 +1577,7 @@
 				}
 			}
 
-			// done checking for args.  Remember where an arg was found 
+			// done checking for args.  Remember where an arg was found
 			if (found) {
 				configArgs[configArgIndex++] = i;
 				continue;
@@ -1604,7 +1604,7 @@
 				continue;
 			String arg = args[++i];
 
-			// look for the development mode and class path entries.  
+			// look for the development mode and class path entries.
 			if (args[i - 1].equalsIgnoreCase(DEV)) {
 				inDevelopmentMode = true;
 				devClassPathProps = processDevArg(arg);
@@ -1624,7 +1624,7 @@
 
 			if (args[i - 1].equalsIgnoreCase(OS)) {
 				os = arg;
-				// passed thru this arg 
+				// passed thru this arg
 				continue;
 			}
 
@@ -1639,16 +1639,16 @@
 			}
 
 			// look for explicitly set install root
-			// Consume the arg here to ensure that the launcher and Eclipse get the 
-			// same value as each other.  
+			// Consume the arg here to ensure that the launcher and Eclipse get the
+			// same value as each other.
 			if (args[i - 1].equalsIgnoreCase(INSTALL)) {
 				System.setProperty(PROP_INSTALL_AREA, arg);
 				found = true;
 			}
 
-			// look for the configuration to use.  
-			// Consume the arg here to ensure that the launcher and Eclipse get the 
-			// same value as each other.  
+			// look for the configuration to use.
+			// Consume the arg here to ensure that the launcher and Eclipse get the
+			// same value as each other.
 			if (args[i - 1].equalsIgnoreCase(CONFIGURATION)) {
 				System.setProperty(PROP_CONFIG_AREA, arg);
 				found = true;
@@ -1665,7 +1665,7 @@
 				found = true;
 			}
 
-			// look for the startup jar used 
+			// look for the startup jar used
 			if (args[i - 1].equalsIgnoreCase(STARTUP)) {
 				//not doing anything with this right now, but still consume it
 				//startup = arg;
@@ -1703,7 +1703,7 @@
 				found = true;
 			}
 
-			// done checking for args.  Remember where an arg was found 
+			// done checking for args.  Remember where an arg was found
 			if (found) {
 				configArgs[configArgIndex++] = i - 1;
 				configArgs[configArgIndex++] = i;
@@ -1759,7 +1759,7 @@
 		// if the configuration area is not already defined, discover the config area by
 		// trying to find a base config area.  This is either defined in a system property or
 		// is computed relative to the install location.
-		// Note that the config info read here is only used to determine a value 
+		// Note that the config info read here is only used to determine a value
 		// for the user configuration area
 		URL baseConfigurationLocation = null;
 		Properties baseConfiguration = null;
@@ -1781,7 +1781,7 @@
 				}
 			baseConfiguration = loadConfiguration(baseConfigurationLocation);
 			if (baseConfiguration != null) {
-				// if the base sets the install area then use that value if the property.  We know the 
+				// if the base sets the install area then use that value if the property.  We know the
 				// property is not already set.
 				String location = baseConfiguration.getProperty(PROP_CONFIG_AREA);
 				if (location != null)
@@ -1797,11 +1797,11 @@
 
 		// Now we know where the base configuration is supposed to be.  Go ahead and load
 		// it and merge into the System properties.  Then, if cascaded, read the parent configuration.
-		// Note that in a cascaded situation, the user configuration may be ignored if the parent 
-		// configuration has changed since the user configuration has been written. 
-		// Note that the parent may or may not be the same parent as we read above since the 
+		// Note that in a cascaded situation, the user configuration may be ignored if the parent
+		// configuration has changed since the user configuration has been written.
+		// Note that the parent may or may not be the same parent as we read above since the
 		// base can define its parent.  The first parent we read was either defined by the user
-		// on the command line or was the one in the install dir.  
+		// on the command line or was the one in the install dir.
 		// if the config or parent we are about to read is the same as the base config we read above,
 		// just reuse the base
 		Properties configuration = baseConfiguration;
@@ -1826,8 +1826,8 @@
 			if (sharedConfigURL != null) {
 				if (sharedConfigURL.equals(getConfigurationLocation())) {
 					//After all we are not in a shared configuration setup.
-					// - remove the property to show that we do not have a parent 
-					// - merge configuration with the system properties 
+					// - remove the property to show that we do not have a parent
+					// - merge configuration with the system properties
 					System.clearProperty(PROP_SHARED_CONFIG_AREA);
 					mergeWithSystemProperties(configuration, null);
 				} else {
@@ -1905,7 +1905,7 @@
 	/**
 	 * Ensures the value for a system property is an absolute URL. Relative URLs are translated to
 	 * absolute URLs by taking the install URL as reference.
-	 *   
+	 *
 	 * @param locationProperty the key for a system property containing a URL
 	 */
 	private void ensureAbsolute(String locationProperty) {
@@ -1978,7 +1978,7 @@
 		path = file.toString().replace('\\', '/');
 		// TODO need a better test for windows
 		// If on Windows then canonicalize the drive letter to be lowercase.
-		// remember that there may be UNC paths 
+		// remember that there may be UNC paths
 		if (File.separatorChar == '\\')
 			if (Character.isUpperCase(path.charAt(0))) {
 				char[] chars = path.toCharArray();
@@ -1987,20 +1987,20 @@
 			}
 		if (path.toLowerCase().endsWith(".jar")) //$NON-NLS-1$
 			path = path.substring(0, path.lastIndexOf('/') + 1);
-		if (path.toLowerCase().endsWith("/plugins/")) //$NON-NLS-1$ 
+		if (path.toLowerCase().endsWith("/plugins/")) //$NON-NLS-1$
 			path = path.substring(0, path.length() - "/plugins/".length()); //$NON-NLS-1$
 		try {
 			try {
-				// create a file URL (via File) to normalize the form (e.g., put 
+				// create a file URL (via File) to normalize the form (e.g., put
 				// the leading / on if necessary)
 				path = new File(path).toURL().getFile();
 			} catch (MalformedURLException e1) {
-				// will never happen.  The path is straight from a URL.  
+				// will never happen.  The path is straight from a URL.
 			}
 			installLocation = new URL(result.getProtocol(), result.getHost(), result.getPort(), path);
 			System.setProperty(PROP_INSTALL_AREA, installLocation.toExternalForm());
 		} catch (MalformedURLException e) {
-			// TODO Very unlikely case.  log here.  
+			// TODO Very unlikely case.  log here.
 		}
 		if (debug)
 			System.out.println("Install location:\n    " + installLocation); //$NON-NLS-1$
@@ -2054,7 +2054,7 @@
 	}
 
 	/*
-	 * Load the configuration  
+	 * Load the configuration
 	 */
 	private Properties load(URL url, String suffix) throws IOException {
 		// figure out what we will be loading
@@ -2083,22 +2083,22 @@
 	/*
 	 * Handle splash screen.
 	 *  The splash screen is displayed natively.  Whether or not the splash screen
-	 *  was displayed by the launcher, we invoke JNIBridge.showSplash() and the 
+	 *  was displayed by the launcher, we invoke JNIBridge.showSplash() and the
 	 *  native code handles the case of the splash screen already existing.
-	 * 
+	 *
 	 * The -showsplash argument may indicate the bitmap used by the native launcher,
 	 * or the bitmap location may be extracted from the config.ini
-	 * 
+	 *
 	 * We pass a handler (Runnable) to the platform which is called as a result of the
-	 * launched application calling Platform.endSplash(). This handle calls 
+	 * launched application calling Platform.endSplash(). This handle calls
 	 * JNIBridge.takeDownSplash and the native code will close the splash screen.
-	 * 
+	 *
 	 * The -endsplash argument is longer used and has the same result as -nosplash
-	 * 
+	 *
 	 * @param defaultPath search path for the boot plugin
 	 */
 	private void handleSplash(URL[] defaultPath) {
-		// run without splash if we are initializing or nosplash 
+		// run without splash if we are initializing or nosplash
 		// was specified (splashdown = true)
 		if (initialize || splashDown || bridge == null) {
 			showSplash = false;
@@ -2107,7 +2107,7 @@
 		}
 
 		if (showSplash || endSplash != null) {
-			// Register the endSplashHandler to be run at VM shutdown. This hook will be 
+			// Register the endSplashHandler to be run at VM shutdown. This hook will be
 			// removed once the splash screen has been taken down.
 			try {
 				Runtime.getRuntime().addShutdownHook(splashHandler);
@@ -2147,7 +2147,7 @@
 	}
 
 	/*
-	 * Take down the splash screen. 
+	 * Take down the splash screen.
 	 */
 	protected void takeDownSplash() {
 		if (splashDown || bridge == null) // splash is already down
@@ -2242,7 +2242,7 @@
 	}
 
 	/*
-	 * Look for the specified spash file in the given JAR and extract it to the config 
+	 * Look for the specified spash file in the given JAR and extract it to the config
 	 * area for caching purposes.
 	 */
 	private String extractFromJAR(String jarPath, String jarEntry) {
@@ -2312,9 +2312,9 @@
 
 	/*
 	 * Build an array of path suffixes based on the given NL which is suitable
-	 * for splash path searching.  The returned array contains paths in order 
-	 * from most specific to most generic. So, in the FR_fr locale, it will return 
-	 * "nl/fr/FR/splash.bmp", then "nl/fr/splash.bmp", and finally "splash.bmp". 
+	 * for splash path searching.  The returned array contains paths in order
+	 * from most specific to most generic. So, in the FR_fr locale, it will return
+	 * "nl/fr/FR/splash.bmp", then "nl/fr/splash.bmp", and finally "splash.bmp".
 	 * (we always search the root)
 	 */
 	private static String[] buildNLVariants(String locale) {
@@ -2514,13 +2514,13 @@
 			String value = source.getProperty(key);
 
 			// Check to see if we are supposed to override existing values from the user configuraiton.
-			// This is done only in the case of shared install where we have already set the user values 
+			// This is done only in the case of shared install where we have already set the user values
 			// but want to override them with values from the shared location's config.
 			if (userConfiguration != null && !key.endsWith(EXT_OVERRIDE_USER)) {
 				// check all levels to see if the "override" property was set
 				final String overrideKey = key + EXT_OVERRIDE_USER;
 				boolean shouldOverride = System.getProperty(overrideKey) != null || source.getProperty(overrideKey) != null;
-				// only set the value if the user specified the override property and if the 
+				// only set the value if the user specified the override property and if the
 				// original property wasn't set by a commad-line arg
 				if (shouldOverride && !userConfiguration.contains(key)) {
 					System.setProperty(key, value);
@@ -2558,13 +2558,13 @@
 	 * NOTE: It is ok here for EclipsePolicy to use 1.4 methods because the methods
 	 * that it calls them from don't exist in Foundation so they will never be called. A more
 	 * detailed explanation from Tom:
-	 * 
-	 * They will never get called because in a pre 1.4 VM the methods 
-	 * getPermissions(CodeSource) and implies(ProtectionDomain, Permission) are 
-	 * undefined on the Policy class which is what EclipsePolicy extends.  EclipsePolicy 
-	 * implements these two methods so it can proxy them to the parent Policy.  
-	 * But since these methods are not actually defined on Policy in a pre-1.4 VM 
-	 * nobody will actually call them (unless they casted the policy to EclipsePolicy and 
+	 *
+	 * They will never get called because in a pre 1.4 VM the methods
+	 * getPermissions(CodeSource) and implies(ProtectionDomain, Permission) are
+	 * undefined on the Policy class which is what EclipsePolicy extends.  EclipsePolicy
+	 * implements these two methods so it can proxy them to the parent Policy.
+	 * But since these methods are not actually defined on Policy in a pre-1.4 VM
+	 * nobody will actually call them (unless they casted the policy to EclipsePolicy and
 	 * called our methods)
 	 */
 	private class EclipsePolicy extends Policy {
diff --git a/bundles/org.eclipse.equinox.launcher/src/org/eclipse/equinox/launcher/WebStartMain.java b/bundles/org.eclipse.equinox.launcher/src/org/eclipse/equinox/launcher/WebStartMain.java
index bacaac5..341bc68 100644
--- a/bundles/org.eclipse.equinox.launcher/src/org/eclipse/equinox/launcher/WebStartMain.java
+++ b/bundles/org.eclipse.equinox.launcher/src/org/eclipse/equinox/launcher/WebStartMain.java
@@ -23,23 +23,23 @@
 import java.util.zip.ZipFile;
 
 /**
- * The launcher to start eclipse using webstart. To use this launcher, the client 
+ * The launcher to start eclipse using webstart. To use this launcher, the client
  * must accept to give all security permissions.
  * <p>
  * <b>Note:</b> This class should not be referenced programmatically by
  * other Java code. This class exists only for the purpose of launching Eclipse
- * using Java webstart. To launch Eclipse programmatically, use 
+ * using Java webstart. To launch Eclipse programmatically, use
  * org.eclipse.core.runtime.adaptor.EclipseStarter. The fields and methods
  * on this class are not API.
- * 
+ *
  * @noextend This class is not intended to be subclassed by clients.
  * @noinstantiate This class is not intended to be instantiated by clients.
  * @noreference This class is not intended to be referenced by clients.
- * 
+ *
  * @deprecated Java WebStart is removed in Java 11.
- * 
+ *
  * This API is planned to be deleted, see https://bugs.eclipse.org/bugs/show_bug.cgi?id=544262
- * 
+ *
  */
 //The bundles are discovered by finding all the jars on the classpath. Then they are added with their full path to the osgi.bundles list.
 @Deprecated
@@ -50,7 +50,7 @@
 	private static final String PROP_CHECK_CONFIG = "osgi.checkConfiguration"; //$NON-NLS-1$
 
 	private Map<String, List<BundleInfo>> allBundles = null; // Map of all the bundles found on the classpath. Id -> ArrayList of BundleInfo
-	private List<BundleInfo> bundleList = null; //The list of bundles found on the osgi.bundle list 
+	private List<BundleInfo> bundleList = null; //The list of bundles found on the osgi.bundle list
 
 	protected class BundleInfo {
 		String bsn;
@@ -63,7 +63,7 @@
 	 * @noreference This method is not intended to be referenced by clients.
 	 */
 	public static void main(String[] args) {
-		System.setSecurityManager(null); //TODO Hack so that when the classloader loading the fwk is created we don't have funny permissions. This should be revisited. 
+		System.setSecurityManager(null); //TODO Hack so that when the classloader loading the fwk is created we don't have funny permissions. This should be revisited.
 		int result = new WebStartMain().run(args);
 		if (!Boolean.getBoolean(PROP_NOSHUTDOWN))
 			System.exit(result);
@@ -100,7 +100,7 @@
 	}
 
 	/*
-	 * Null out all the fields containing data 
+	 * Null out all the fields containing data
 	 */
 	private void cleanup() {
 		allBundles = null;
@@ -163,7 +163,7 @@
 		return removeMatch ? matches.remove(highest) : matches.get(highest);
 	}
 
-	/* 
+	/*
 	 * Get all the bundles available on the webstart classpath
 	 */
 	private void discoverBundles() {
@@ -306,7 +306,7 @@
 		return null;
 	}
 
-	//Build the osgi bundle list. The allbundles data structure is changed during the process. 
+	//Build the osgi bundle list. The allbundles data structure is changed during the process.
 	private void buildOSGiBundleList() {
 		StringBuilder finalBundleList = new StringBuilder(allBundles.size() * 30);
 		//First go through all the bundles of the bundle
diff --git a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/compatibility/state/Activator.java b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/compatibility/state/Activator.java
index 482489a..52bdd31 100644
--- a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/compatibility/state/Activator.java
+++ b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/compatibility/state/Activator.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors: IBM - Initial API and implementation
  ******************************************************************************/
 package org.eclipse.osgi.compatibility.state;
diff --git a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/compatibility/state/PlatformAdminImpl.java b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/compatibility/state/PlatformAdminImpl.java
index e6be607..0cd736a 100644
--- a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/compatibility/state/PlatformAdminImpl.java
+++ b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/compatibility/state/PlatformAdminImpl.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  ******************************************************************************/
@@ -130,7 +130,7 @@
 	}
 
 	/**
-	 * @throws BundleException  
+	 * @throws BundleException
 	 */
 	@Override
 	public void commit(State state) throws BundleException {
diff --git a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/compatibility/state/PlatformBundleListener.java b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/compatibility/state/PlatformBundleListener.java
index c6e1d8a..6d88134 100644
--- a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/compatibility/state/PlatformBundleListener.java
+++ b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/compatibility/state/PlatformBundleListener.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  ******************************************************************************/
diff --git a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/compatibility/state/StateConverter.java b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/compatibility/state/StateConverter.java
index ccd7de1..a7792db 100644
--- a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/compatibility/state/StateConverter.java
+++ b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/compatibility/state/StateConverter.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  ******************************************************************************/
diff --git a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/module/BundleConstraint.java b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/module/BundleConstraint.java
index 62bb1e9..8f43f96 100644
--- a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/module/BundleConstraint.java
+++ b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/module/BundleConstraint.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/module/CompositeResolveHelper.java b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/module/CompositeResolveHelper.java
index 7867ad7..6d99745 100644
--- a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/module/CompositeResolveHelper.java
+++ b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/module/CompositeResolveHelper.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/module/CompositeResolveHelperRegistry.java b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/module/CompositeResolveHelperRegistry.java
index 557dc52..69dcd57 100644
--- a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/module/CompositeResolveHelperRegistry.java
+++ b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/module/CompositeResolveHelperRegistry.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/module/GenericCapability.java b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/module/GenericCapability.java
index 6e706dd..3adb006 100644
--- a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/module/GenericCapability.java
+++ b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/module/GenericCapability.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Karsten Thoms (itemis) - Consider devmode for effective status computation
diff --git a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/module/GenericConstraint.java b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/module/GenericConstraint.java
index a299236..ca4fadf 100644
--- a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/module/GenericConstraint.java
+++ b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/module/GenericConstraint.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Karsten Thoms (itemis) - Consider devmode for effective status computation
diff --git a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/module/GroupingChecker.java b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/module/GroupingChecker.java
index 8988c1b..9d4248b 100644
--- a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/module/GroupingChecker.java
+++ b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/module/GroupingChecker.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors: IBM Corporation - initial API and implementation
  ******************************************************************************/
 package org.eclipse.osgi.internal.module;
@@ -124,7 +124,7 @@
 	/*
 	 * Verifies the uses constraint consistency for the importingBundle with the possible dynamic matching export.
 	 * If an inconsistency is found the export returned; otherwise null is returned.
-	 * Dynamic imports must perform extra checks to ensure that existing wires to package roots are 
+	 * Dynamic imports must perform extra checks to ensure that existing wires to package roots are
 	 * consistent with the possible matching dynamic export.
 	 */
 	public PackageRoots[][] isDynamicConsistent(ResolverBundle importingBundle, ResolverExport matchingExport) {
@@ -188,7 +188,7 @@
 		visited.add(bundle); // prevent endless cycles
 		// check imports
 		if (bundle.getBundleDescription().isResolved()) {
-			// must check resolved imports to get any dynamically resolved imports 
+			// must check resolved imports to get any dynamically resolved imports
 			ExportPackageDescription[] imports = bundle.getBundleDescription().getResolvedImports();
 			for (ExportPackageDescription importPkg : imports) {
 				if (importPkg.getExporter() == bundle.getBundleDescription() || !importPkg.getName().equals(packageName))
@@ -297,7 +297,7 @@
 				roots = new ResolverExport[] {export};
 				return;
 			}
-			// need to do an extra check to make sure we are not adding the same package name 
+			// need to do an extra check to make sure we are not adding the same package name
 			// from multiple versions of the same bundle
 			String exportBSN = export.getExporter().getName();
 			if (exportBSN != null) {
diff --git a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/module/MappedList.java b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/module/MappedList.java
index 611bd43..8d4bb5b 100644
--- a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/module/MappedList.java
+++ b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/module/MappedList.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/module/ResolverBundle.java b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/module/ResolverBundle.java
index 5f66a27..a92888b 100644
--- a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/module/ResolverBundle.java
+++ b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/module/ResolverBundle.java
@@ -7,10 +7,10 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
- *     Karsten Thoms (itemis) - Consider devmode for generic capabilities 
+ *     Karsten Thoms (itemis) - Consider devmode for generic capabilities
  *        & constraints
  *******************************************************************************/
 package org.eclipse.osgi.internal.module;
@@ -502,7 +502,7 @@
 				resolver.getState().addResolverError(fragment, ResolverError.FRAGMENT_CONFLICT, newRequire.toString(), newRequire);
 			}
 		}
-		// generic constraints cannot conflict; 
+		// generic constraints cannot conflict;
 		// only check that a fragment does not add generic constraints to an already resolved host
 		if (isResolved() && newGenericRequires != null) {
 			for (GenericSpecification genericSpecification : newGenericRequires) {
@@ -556,7 +556,7 @@
 		initFragments();
 
 		// must save off old imports and requires before we remove the fragment;
-		// this will be used to merge the constraints of the same name from the remaining fragments 
+		// this will be used to merge the constraints of the same name from the remaining fragments
 		ResolverImport[] oldImports = getImportPackages();
 		BundleConstraint[] oldRequires = getRequires();
 		if (!fragments.remove(fragment))
diff --git a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/module/ResolverConstraint.java b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/module/ResolverConstraint.java
index d08c79d..55122ea 100644
--- a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/module/ResolverConstraint.java
+++ b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/module/ResolverConstraint.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors: IBM Corporation - initial API and implementation
  ******************************************************************************/
 package org.eclipse.osgi.internal.module;
diff --git a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/module/ResolverExport.java b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/module/ResolverExport.java
index c321079..8885c30 100644
--- a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/module/ResolverExport.java
+++ b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/module/ResolverExport.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/module/ResolverImpl.java b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/module/ResolverImpl.java
index fb14b6a..6bb5d87 100644
--- a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/module/ResolverImpl.java
+++ b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/module/ResolverImpl.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Danail Nachev -  ProSyst - bug 218625
@@ -589,7 +589,7 @@
 	private BundleDescription[] addDevConstraints(BundleDescription[] reRefresh) {
 		if (!developmentMode)
 			return reRefresh; // we don't care about this unless we are in development mode
-		// when in develoment mode we need to reRefresh hosts  of unresolved fragments that add new constraints 
+		// when in develoment mode we need to reRefresh hosts  of unresolved fragments that add new constraints
 		// and reRefresh and unresolved bundles that have dependents
 		Set<BundleDescription> additionalRefresh = new HashSet<>();
 		ResolverBundle[] allUnresolved  = unresolvedBundles.toArray(new ResolverBundle[unresolvedBundles.size()]);
@@ -915,7 +915,7 @@
 		List<ResolverConstraint> initialConflicts = getConflicts(bundles, packageConstraints, bundleConstraints, multiRequirementWithMultiSuppliers);
 		if (initialConflicts == null || "tryFirst".equals(usesMode) || usesCalculationTimeout) { //$NON-NLS-1$
 			groupingChecker.clear();
-			// the first combination have no conflicts or 
+			// the first combination have no conflicts or
 			// we only are trying the first combination or
 			// we have timed out the calculation; return without iterating over all combinations
 			return initialConflicts;
@@ -962,7 +962,7 @@
 	}
 
 	private List<ResolverConstraint> findBestCombination(ResolverBundle[] bundles, ResolverConstraint[][] multipleSuppliers, int[] bestCombination, List<ResolverConstraint> bestConflicts) {
-		// now iterate over every possible combination until either zero conflicts are found 
+		// now iterate over every possible combination until either zero conflicts are found
 		// or we have run out of combinations
 		// if all combinations are tried then return the combination with the lowest number of conflicts
 		long initialTime = System.currentTimeMillis();
diff --git a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/module/ResolverImport.java b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/module/ResolverImport.java
index 936373e..1081967 100644
--- a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/module/ResolverImport.java
+++ b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/module/ResolverImport.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/module/VersionSupplier.java b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/module/VersionSupplier.java
index 3460575..1f64d35 100644
--- a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/module/VersionSupplier.java
+++ b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/module/VersionSupplier.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -48,7 +48,7 @@
 		return substitute;
 	}
 
-	// sets the dropped status.  This should only be called by the VersionHashMap 
+	// sets the dropped status.  This should only be called by the VersionHashMap
 	// when VersionSuppliers are removed
 	void setSubstitute(VersionSupplier substitute) {
 		this.substitute = substitute;
@@ -60,7 +60,7 @@
 	abstract public BundleDescription getBundleDescription();
 
 	/*
-	 * returns the ResolverBundle which supplies this VersionSupplier 
+	 * returns the ResolverBundle which supplies this VersionSupplier
 	 */
 	abstract ResolverBundle getResolverBundle();
 
diff --git a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/BaseDescriptionImpl.java b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/BaseDescriptionImpl.java
index 7c08421..de34540 100644
--- a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/BaseDescriptionImpl.java
+++ b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/BaseDescriptionImpl.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Rob Harrop - SpringSource Inc. (bug 247522)
diff --git a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/BundleDeltaImpl.java b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/BundleDeltaImpl.java
index c7b1bf0..293af6a 100644
--- a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/BundleDeltaImpl.java
+++ b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/BundleDeltaImpl.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Rob Harrop - SpringSource Inc. (bug 247522)
diff --git a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/BundleDescriptionImpl.java b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/BundleDescriptionImpl.java
index 9305336..6b0768b 100644
--- a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/BundleDescriptionImpl.java
+++ b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/BundleDescriptionImpl.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Danail Nachev -  ProSyst - bug 218625
@@ -65,7 +65,7 @@
 	private DescriptionWiring bundleWiring;
 
 	public BundleDescriptionImpl() {
-		// 
+		//
 	}
 
 	public long getBundleId() {
diff --git a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/BundleSpecificationImpl.java b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/BundleSpecificationImpl.java
index ee40e1b..d0e449f 100644
--- a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/BundleSpecificationImpl.java
+++ b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/BundleSpecificationImpl.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Rob Harrop - SpringSource Inc. (bug 247522)
diff --git a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/ExportPackageDescriptionImpl.java b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/ExportPackageDescriptionImpl.java
index d2e4c78..7f5b329 100644
--- a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/ExportPackageDescriptionImpl.java
+++ b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/ExportPackageDescriptionImpl.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Rob Harrop - SpringSource Inc. (bug 247522)
diff --git a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/GenericDescriptionImpl.java b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/GenericDescriptionImpl.java
index 57be302..aba9d62 100644
--- a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/GenericDescriptionImpl.java
+++ b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/GenericDescriptionImpl.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Rob Harrop - SpringSource Inc. (bug 247522)
diff --git a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/GenericSpecificationImpl.java b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/GenericSpecificationImpl.java
index cef6d87..086e921 100644
--- a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/GenericSpecificationImpl.java
+++ b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/GenericSpecificationImpl.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Rob Harrop - SpringSource Inc. (bug 247522)
@@ -28,7 +28,7 @@
 	private Map<String, Object> attributes;
 	private Map<String, String> arbitraryDirectives;
 	/*
-	 * Indicates that a generic constraint was from converting the BREE header 
+	 * Indicates that a generic constraint was from converting the BREE header
 	 */
 	public static final int RESOLUTION_FROM_BREE = 0x04;
 
diff --git a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/HostSpecificationImpl.java b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/HostSpecificationImpl.java
index f3f1ce0..0ae911c 100644
--- a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/HostSpecificationImpl.java
+++ b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/HostSpecificationImpl.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Rob Harrop - SpringSource Inc. (bug 247522)
diff --git a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/ImportPackageSpecificationImpl.java b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/ImportPackageSpecificationImpl.java
index 7c99f29..47c9f1c 100644
--- a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/ImportPackageSpecificationImpl.java
+++ b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/ImportPackageSpecificationImpl.java
@@ -109,7 +109,7 @@
 		ExportPackageDescriptionImpl pkgDes = (ExportPackageDescriptionImpl) supplier;
 
 		// If we are in strict mode, check to see if the export specifies friends.
-		// If it does, are we one of the friends 
+		// If it does, are we one of the friends
 		String[] friends = (String[]) pkgDes.getDirective(StateImpl.FRIENDS_DIRECTIVE);
 		Boolean internal = (Boolean) pkgDes.getDirective(StateImpl.INTERNAL_DIRECTIVE);
 		if (internal.booleanValue() || friends != null) {
diff --git a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/NativeCodeDescriptionImpl.java b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/NativeCodeDescriptionImpl.java
index 3bd8b58..8f6a193 100644
--- a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/NativeCodeDescriptionImpl.java
+++ b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/NativeCodeDescriptionImpl.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Rob Harrop - SpringSource Inc. (bug 247522)
diff --git a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/NativeCodeSpecificationImpl.java b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/NativeCodeSpecificationImpl.java
index 292ef0e..5877f10 100644
--- a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/NativeCodeSpecificationImpl.java
+++ b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/NativeCodeSpecificationImpl.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Rob Harrop - SpringSource Inc. (bug 247522)
diff --git a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/ResolverErrorImpl.java b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/ResolverErrorImpl.java
index 3839cea..1b7b19d 100644
--- a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/ResolverErrorImpl.java
+++ b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/ResolverErrorImpl.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Rob Harrop - SpringSource Inc. (bug 247522)
diff --git a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/StateBuilder.java b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/StateBuilder.java
index 37c43f7..391f738 100644
--- a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/StateBuilder.java
+++ b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/StateBuilder.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Danail Nachev -  ProSyst - bug 218625
diff --git a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/StateHelperImpl.java b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/StateHelperImpl.java
index dcd27ff..5f04b66 100644
--- a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/StateHelperImpl.java
+++ b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/StateHelperImpl.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Rob Harrop - SpringSource Inc. (bug 247522)
@@ -147,7 +147,7 @@
 					for (BaseDescription baseDescription : satisfied) {
 						if (!baseDescription.getSupplier().isResolved() && !bundleList.contains(baseDescription.getSupplier())) {
 							bundleList.add(baseDescription.getSupplier());
-							// TODO only add the first supplier that is not resolved; 
+							// TODO only add the first supplier that is not resolved;
 							// this is the previous behavior before the fix for bug 333071; should consider adding all unresolved
 							break;
 						}
@@ -539,18 +539,18 @@
 }
 
 /*
- * This class is used to encapsulate the import packages of a bundle used by getVisiblePackages(). If the method is called with the option 
- * VISIBLE_INCLUDE_ALL_HOST_WIRES, it uses resolved import packages to find all visible packages by a bundle. Called without this option, 
- * it uses imported packages instead of resolved imported packages and does not consider resolved dynamic imports. 
+ * This class is used to encapsulate the import packages of a bundle used by getVisiblePackages(). If the method is called with the option
+ * VISIBLE_INCLUDE_ALL_HOST_WIRES, it uses resolved import packages to find all visible packages by a bundle. Called without this option,
+ * it uses imported packages instead of resolved imported packages and does not consider resolved dynamic imports.
  * ImportsHolder serves to hide which of these is used, so that the body of getVisiblePackages() does not become full of checks.
- * 
+ *
  */
 class ImportsHolder {
 	private final ImportPackageSpecification[] importedPackages;
 	private final ExportPackageDescription[] resolvedImports;
 	private final boolean isUsingResolved;
 
-	// Depending on the options used, either importedPackages or resolvedImports is initialize, but not both. 
+	// Depending on the options used, either importedPackages or resolvedImports is initialize, but not both.
 	ImportsHolder(BundleDescription bundle, int options) {
 		isUsingResolved = (options & StateHelper.VISIBLE_INCLUDE_ALL_HOST_WIRES) != 0;
 		if (isUsingResolved) {
@@ -582,10 +582,10 @@
 }
 
 /*
- * This class is used to encapsulate the required bundles by a bundle, used by getVisiblePackages(). If the method is called with the option 
- * VISIBLE_INCLUDE_ALL_HOST_WIRES, it uses resolved required bundles to find all visible packages by a bundle. Called without this option, 
- * it uses required bundles instead of resolved required bundles and does not consider the constraints from fragments. 
- * RequiresHolder serves to hide which of these is used.  
+ * This class is used to encapsulate the required bundles by a bundle, used by getVisiblePackages(). If the method is called with the option
+ * VISIBLE_INCLUDE_ALL_HOST_WIRES, it uses resolved required bundles to find all visible packages by a bundle. Called without this option,
+ * it uses required bundles instead of resolved required bundles and does not consider the constraints from fragments.
+ * RequiresHolder serves to hide which of these is used.
  */
 class RequiresHolder {
 	private final BundleSpecification[] requiredBundles;
diff --git a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/StateImpl.java b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/StateImpl.java
index b81df4c..5973a2c 100644
--- a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/StateImpl.java
+++ b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/StateImpl.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Danail Nachev -  ProSyst - bug 218625
@@ -70,13 +70,13 @@
 	public static final String ECLIPSE_PLATFORMFILTER = "Eclipse-PlatformFilter"; //$NON-NLS-1$
 	public static final String Eclipse_JREBUNDLE = "Eclipse-JREBundle"; //$NON-NLS-1$
 	/**
-	 * Manifest Export-Package directive indicating that the exported package should only 
+	 * Manifest Export-Package directive indicating that the exported package should only
 	 * be made available when the resolver is not in strict mode.
 	 */
 	public static final String INTERNAL_DIRECTIVE = "x-internal"; //$NON-NLS-1$
 
 	/**
-	 * Manifest Export-Package directive indicating that the exported package should only 
+	 * Manifest Export-Package directive indicating that the exported package should only
 	 * be made available to friends of the exporting bundle.
 	 */
 	public static final String FRIENDS_DIRECTIVE = "x-friends"; //$NON-NLS-1$
@@ -103,7 +103,7 @@
 	 * by the required bundle must be reprovided by the requiring bundle.
 	 * The default value is <tt>false</tt>.
 	 * <p>
-	 * The attribute value is encoded in the Require-Bundle manifest 
+	 * The attribute value is encoded in the Require-Bundle manifest
 	 * header like:
 	 * <pre>
 	 * Require-Bundle: com.acme.module.test; reprovide="true"
@@ -119,11 +119,11 @@
 	 * Manifest header attribute (named &quot;optional&quot;)
 	 * for Require-Bundle
 	 * identifying that a required bundle is optional and that
-	 * the requiring bundle can be resolved if there is no 
+	 * the requiring bundle can be resolved if there is no
 	 * suitable required bundle.
 	 * The default value is <tt>false</tt>.
 	 *
-	 * <p>The attribute value is encoded in the Require-Bundle manifest 
+	 * <p>The attribute value is encoded in the Require-Bundle manifest
 	 * header like:
 	 * <pre>
 	 * Require-Bundle: com.acme.module.test; optional="true"
@@ -177,7 +177,7 @@
 
 	final Object monitor = new Object();
 
-	// to prevent extra-package instantiation 
+	// to prevent extra-package instantiation
 	protected StateImpl() {
 		// always add the default platform property keys.
 		addPlatformPropertyKeys(PROPS);
@@ -436,7 +436,7 @@
 			if (!resolving)
 				throw new IllegalStateException(); // TODO need error message here!
 			BundleDescriptionImpl modifiable = (BundleDescriptionImpl) bundle;
-			// must record the change before setting the resolve state to 
+			// must record the change before setting the resolve state to
 			// accurately record if a change has happened.
 			getDelta().recordBundleResolved(modifiable, status);
 			// force the new resolution data to stay in memory; we will not read this from disk anymore
@@ -556,7 +556,7 @@
 					if (resolved && reResolve == null)
 						return new StateDeltaImpl(this);
 					if (developmentMode) {
-						// in dev mode we need to aggressively flush removal pendings 
+						// in dev mode we need to aggressively flush removal pendings
 						if (removalPendings.size() > 0) {
 							BundleDescription[] removed = internalGetRemovalPending();
 							reResolve = mergeBundles(reResolve, removed);
@@ -945,7 +945,7 @@
 				addSystemExports(exports, ManifestElement.parseHeader(Constants.EXPORT_PACKAGE, (String) platformProperties[i].get(Constants.FRAMEWORK_SYSTEMPACKAGES)), i);
 				addSystemExports(exports, ManifestElement.parseHeader(Constants.EXPORT_PACKAGE, (String) platformProperties[i].get(Constants.FRAMEWORK_SYSTEMPACKAGES_EXTRA)), i);
 			} catch (BundleException e) {
-				// TODO consider throwing this... 
+				// TODO consider throwing this...
 			}
 	}
 
@@ -983,7 +983,7 @@
 				addSystemCapabilities(capabilities, ManifestElement.parseHeader(Constants.PROVIDE_CAPABILITY, (String) platformProperties[i].get(Constants.FRAMEWORK_SYSTEMCAPABILITIES_EXTRA)), i);
 				checkOSGiEE(capabilities, (String) platformProperties[i].get(Constants.FRAMEWORK_EXECUTIONENVIRONMENT), i);
 			} catch (BundleException e) {
-				// TODO consider throwing this... 
+				// TODO consider throwing this...
 			}
 	}
 
diff --git a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/StateMsg.java b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/StateMsg.java
index 6c1ed9f..ad6f9ea 100644
--- a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/StateMsg.java
+++ b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/StateMsg.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/StateObjectFactoryImpl.java b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/StateObjectFactoryImpl.java
index 5bb5123..c3f095a 100644
--- a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/StateObjectFactoryImpl.java
+++ b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/StateObjectFactoryImpl.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/StateReader.java b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/StateReader.java
index 3859214..ddb8d41 100644
--- a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/StateReader.java
+++ b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/StateReader.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Rob Harrop - SpringSource Inc. (bug 247522)
@@ -755,7 +755,7 @@
 
 	/**
 	 * expectedTimestamp is the expected value for the timestamp. or -1, if
-	 * 	no checking should be performed 
+	 * 	no checking should be performed
 	 */
 	public synchronized boolean loadStateDeprecated(StateImpl state, DataInputStream input, long expectedTimestamp) throws IOException {
 		try {
@@ -767,7 +767,7 @@
 
 	/**
 	 * expectedTimestamp is the expected value for the timestamp. or -1, if
-	 * 	no checking should be performed 
+	 * 	no checking should be performed
 	 */
 	public synchronized boolean loadState(StateImpl state, long expectedTimestamp) throws IOException {
 		return readState(state, expectedTimestamp);
diff --git a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/StateWriter.java b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/StateWriter.java
index 8d2d12b..af183df 100644
--- a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/StateWriter.java
+++ b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/StateWriter.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Rob Harrop - SpringSource Inc. (bug 247522)
diff --git a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/UserState.java b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/UserState.java
index 9885352..0919cdb 100644
--- a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/UserState.java
+++ b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/UserState.java
@@ -19,7 +19,7 @@
 import org.osgi.framework.BundleException;
 
 /**
- * This implementation of State does a bookkeeping of all added/removed 
+ * This implementation of State does a bookkeeping of all added/removed
  */
 public class UserState extends StateImpl {
 	// TODO this is not an accurate way to record updates
@@ -43,7 +43,7 @@
 	}
 
 	/**
-	 * @throws BundleException  
+	 * @throws BundleException
 	 */
 	public StateDelta compare(State baseState) throws BundleException {
 		BundleDescription[] currentBundles = this.getBundles();
diff --git a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/VersionConstraintImpl.java b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/VersionConstraintImpl.java
index 3fad960..16de531 100644
--- a/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/VersionConstraintImpl.java
+++ b/bundles/org.eclipse.osgi.compatibility.state/src/org/eclipse/osgi/internal/resolver/VersionConstraintImpl.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Danail Nachev -  ProSyst - bug 218625
diff --git a/bundles/org.eclipse.osgi.tests/bundles_src/ext.framework.b/ext/framework/b/TestCondition.java b/bundles/org.eclipse.osgi.tests/bundles_src/ext.framework.b/ext/framework/b/TestCondition.java
index f114215..e7d3562 100644
--- a/bundles/org.eclipse.osgi.tests/bundles_src/ext.framework.b/ext/framework/b/TestCondition.java
+++ b/bundles/org.eclipse.osgi.tests/bundles_src/ext.framework.b/ext/framework/b/TestCondition.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi.tests/bundles_src/wrapper.hooks.a/org/eclipse/osgi/tests/wrapper/hooks/a/TestHookConfigurator.java b/bundles/org.eclipse.osgi.tests/bundles_src/wrapper.hooks.a/org/eclipse/osgi/tests/wrapper/hooks/a/TestHookConfigurator.java
index 9566e1d..ad8a83f 100755
--- a/bundles/org.eclipse.osgi.tests/bundles_src/wrapper.hooks.a/org/eclipse/osgi/tests/wrapper/hooks/a/TestHookConfigurator.java
+++ b/bundles/org.eclipse.osgi.tests/bundles_src/wrapper.hooks.a/org/eclipse/osgi/tests/wrapper/hooks/a/TestHookConfigurator.java
@@ -57,7 +57,7 @@
 								}
 
 								/**
-								 * @throws IOException  
+								 * @throws IOException
 								 */
 								@Override
 								public InputStream getInputStream() throws IOException {
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/equinox/log/test/AllTests.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/equinox/log/test/AllTests.java
index 6cbe744..5f95abd 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/equinox/log/test/AllTests.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/equinox/log/test/AllTests.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors: IBM Corporation - initial API and implementation
  *******************************************************************************/
 package org.eclipse.equinox.log.test;
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/equinox/log/test/ExtendedLogServiceTest.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/equinox/log/test/ExtendedLogServiceTest.java
index 08b8508..4e8c522 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/equinox/log/test/ExtendedLogServiceTest.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/equinox/log/test/ExtendedLogServiceTest.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors: IBM Corporation - initial API and implementation
  *******************************************************************************/
 package org.eclipse.equinox.log.test;
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/equinox/log/test/LogReaderServiceTest.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/equinox/log/test/LogReaderServiceTest.java
index ae1aba7..301d7aa 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/equinox/log/test/LogReaderServiceTest.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/equinox/log/test/LogReaderServiceTest.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors: IBM Corporation - initial API and implementation
  *******************************************************************************/
 package org.eclipse.equinox.log.test;
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/equinox/log/test/LogServiceTest.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/equinox/log/test/LogServiceTest.java
index e69d490..497cfbe 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/equinox/log/test/LogServiceTest.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/equinox/log/test/LogServiceTest.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors: IBM Corporation - initial API and implementation
  *******************************************************************************/
 package org.eclipse.equinox.log.test;
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/equinox/log/test/TestListener2.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/equinox/log/test/TestListener2.java
index a18c438..dfd038b 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/equinox/log/test/TestListener2.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/equinox/log/test/TestListener2.java
@@ -31,7 +31,7 @@
 
 	@Override
 	public void logged(LogEntry entry) {
-		//logged is never called in parallel. Added a check to see if two threads are accessing the logged method at the same time. 
+		//logged is never called in parallel. Added a check to see if two threads are accessing the logged method at the same time.
 		assertTrue(flag.compareAndSet(0, 1));
 		if (entry.getBundle().getSymbolicName().equals("org.eclipse.osgi")) {
 			list.add(entry.getMessage());
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/OSGiTest.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/OSGiTest.java
index 1010e09..0434180 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/OSGiTest.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/OSGiTest.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -30,7 +30,7 @@
 	public OSGiTest(String name) {
 		super(name);
 	}
-	
+
 	public BundleContext getContext() {
 		return OSGiTestsActivator.getContext();
 	}
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/OSGiTestsActivator.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/OSGiTestsActivator.java
index ce830c1..8c84807 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/OSGiTestsActivator.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/OSGiTestsActivator.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/appadmin/AllTests.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/appadmin/AllTests.java
index 7bb049c..37a0e72 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/appadmin/AllTests.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/appadmin/AllTests.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/appadmin/ApplicationAdminTest.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/appadmin/ApplicationAdminTest.java
index 3fc7203..b84b956 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/appadmin/ApplicationAdminTest.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/appadmin/ApplicationAdminTest.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/appadmin/ExitValueApp.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/appadmin/ExitValueApp.java
index 545b18a..e41b669 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/appadmin/ExitValueApp.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/appadmin/ExitValueApp.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/appadmin/FailedApp.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/appadmin/FailedApp.java
index 5553fa7..e86048c 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/appadmin/FailedApp.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/appadmin/FailedApp.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/appadmin/SimpleApp.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/appadmin/SimpleApp.java
index 6ed8538..ca5a95a 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/appadmin/SimpleApp.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/appadmin/SimpleApp.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/bundles/DiscardBundleTests.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/bundles/DiscardBundleTests.java
index 0908f92..6821483 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/bundles/DiscardBundleTests.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/bundles/DiscardBundleTests.java
@@ -29,11 +29,11 @@
 import org.osgi.framework.FrameworkEvent;
 
 /*
- * The framework must discard a persisted bundle when the 
+ * The framework must discard a persisted bundle when the
  * osgi.checkConfiguration configuration property is specified and equal to
  * true.
- * 
- * On a related note, if the osgi.dev configuration property is specified but 
+ *
+ * On a related note, if the osgi.dev configuration property is specified but
  * the osgi.checkConfiguration configuration property is not specified, the
  * framework must specify the osgi.checkConfiguration configuration property
  * with a value equal to true.
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/bundles/PersistedBundleTests.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/bundles/PersistedBundleTests.java
index eb40f94..7c1289d 100755
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/bundles/PersistedBundleTests.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/bundles/PersistedBundleTests.java
@@ -19,14 +19,14 @@
 import org.eclipse.osgi.launch.Equinox;
 
 /*
- * The framework must persist data according to the value of the 
+ * The framework must persist data according to the value of the
  * eclipse.stateSaveDelayInterval property. The value is of type long and
  * represents the number of milliseconds between persists. A positive value
  * represents the number of milliseconds between persists. A value of zero
  * indicates data should be immediately persisted with each update. A negative
- * value disables persistence on update altogether (but data will still be 
+ * value disables persistence on update altogether (but data will still be
  * persisted on shutdown).
- * 
+ *
  */
 public class PersistedBundleTests extends AbstractBundleTests {
 
@@ -130,7 +130,7 @@
 			initAndStart(equinox2);
 			try {
 				// The bundle should not have been persisted and therefore be
-				// unknown to the second equinox instance. This check must 
+				// unknown to the second equinox instance. This check must
 				// happen before the first period elapses.
 				assertNull("Bundle exists", equinox2.getBundleContext().getBundle(getName()));
 				stopQuietly(equinox2);
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/bundles/SystemBundleTests.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/bundles/SystemBundleTests.java
index 2a1f278..c1c089d 100755
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/bundles/SystemBundleTests.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/bundles/SystemBundleTests.java
@@ -1225,7 +1225,7 @@
 				assertNotNull("No manifest for: " + bundle, bundle.getEntry("/META-INF/MANIFEST.MF"));
 			}
 		} catch (Throwable t) {
-			// An exception used to get thrown here when we tried to close 
+			// An exception used to get thrown here when we tried to close
 			// the least used bundle file
 			fail("Failed to get bundle entries", t);
 		}
@@ -1593,7 +1593,7 @@
 				bundle.getHeaders(); //$NON-NLS-1$
 			}
 		} catch (Throwable t) {
-			// An exception used to get thrown here when we tried to close 
+			// An exception used to get thrown here when we tried to close
 			// the least used bundle file
 			fail("Failed to get bundle entries", t);
 		}
@@ -1819,7 +1819,7 @@
 		List packages1 = wiring1.getRequiredWires(BundleRevision.PACKAGE_NAMESPACE);
 		List packages2 = wiring2.getRequiredWires(BundleRevision.PACKAGE_NAMESPACE);
 
-		// could make this a more complete check, but with the bug the dynamic wires 
+		// could make this a more complete check, but with the bug the dynamic wires
 		// are missing altogether because we fail to save the resolver state cache.
 		assertEquals("Wrong number of wires for wiring1", 1, packages1.size());
 		assertEquals("Wrong number of wires for wiring2", 1, packages2.size());
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/configuration/AllTests.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/configuration/AllTests.java
index 763acca..aa0e329 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/configuration/AllTests.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/configuration/AllTests.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/configuration/EclipseStarterConfigIniTest.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/configuration/EclipseStarterConfigIniTest.java
index eff971f..9dad285 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/configuration/EclipseStarterConfigIniTest.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/configuration/EclipseStarterConfigIniTest.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/configuration/EclipseStarterConfigurationAreaTest.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/configuration/EclipseStarterConfigurationAreaTest.java
index ededca5..9ae34fe 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/configuration/EclipseStarterConfigurationAreaTest.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/configuration/EclipseStarterConfigurationAreaTest.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/configuration/MovableConfigurationAreaTest.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/configuration/MovableConfigurationAreaTest.java
index 0e8eb97..4b7f8b3 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/configuration/MovableConfigurationAreaTest.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/configuration/MovableConfigurationAreaTest.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -96,7 +96,7 @@
 	 */
 	public void testAfterMoving() throws MalformedURLException, IOException, BundleException {
 		// try to install plug-in
-		// ensure it is not installed		
+		// ensure it is not installed
 		Bundle installed = null;
 		try {
 			installed = BundleTestingHelper.installBundle(getContext(), OSGiTestsActivator.TEST_FILES_ROOT + "configuration/bundle02");
@@ -106,13 +106,13 @@
 			// success
 		} finally {
 			if (installed != null)
-				// clean-up - only runs if we end-up accepting an invalid manifest				
+				// clean-up - only runs if we end-up accepting an invalid manifest
 				installed.uninstall();
 		}
 	}
 
 	public void testInitialization() throws MalformedURLException, IOException {
-		// initialization session		
+		// initialization session
 		try {
 			Bundle installed = BundleTestingHelper.installBundle("1.0", getContext(), OSGiTestsActivator.TEST_FILES_ROOT + "configuration/bundle01");
 			// not read-only yet, should work fine
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/configuration/ReadOnlyConfigurationAreaTest.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/configuration/ReadOnlyConfigurationAreaTest.java
index 778b956..ddd9a9b 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/configuration/ReadOnlyConfigurationAreaTest.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/configuration/ReadOnlyConfigurationAreaTest.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -43,7 +43,7 @@
 	}
 
 	public void test0thSession() throws MalformedURLException, IOException {
-		// initialization session		
+		// initialization session
 		try {
 			Bundle installed = BundleTestingHelper.installBundle("1.0", getContext(), OSGiTestsActivator.TEST_FILES_ROOT + "configuration/bundle01");
 			// not read-only yet, should work fine
@@ -83,7 +83,7 @@
 	 */
 	public void test2ndSession() throws BundleException, IOException {
 		// try to install plug-in
-		// ensure it is not installed		
+		// ensure it is not installed
 		Bundle installed = null;
 		try {
 			installed = BundleTestingHelper.installBundle(getContext(), OSGiTestsActivator.TEST_FILES_ROOT + "configuration/bundle02");
@@ -93,7 +93,7 @@
 			// success
 		} finally {
 			if (installed != null)
-				// clean-up - only runs if we end-up accepting an invalid manifest				
+				// clean-up - only runs if we end-up accepting an invalid manifest
 				installed.uninstall();
 		}
 	}
@@ -112,17 +112,17 @@
 	 */
 	public void test3rdSession() throws BundleException, IOException {
 		// install plug-in
-		// ensure it is not installed		
+		// ensure it is not installed
 		Bundle installed = null;
 		try {
 			installed = BundleTestingHelper.installBundle(getContext(), OSGiTestsActivator.TEST_FILES_ROOT + "configuration/bundle03");
 			// should have failed - cannot install a bundle in read-only mode
 			fail("1.0");
 		} catch (BundleException be) {
-			// success 
+			// success
 		} finally {
 			if (installed != null)
-				// clean-up - only runs if we end-up accepting an invalid manifest				
+				// clean-up - only runs if we end-up accepting an invalid manifest
 				installed.uninstall();
 		}
 	}
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/container/AbstractTest.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/container/AbstractTest.java
index 061c86b..1835dd1 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/container/AbstractTest.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/container/AbstractTest.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/container/AllTests.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/container/AllTests.java
index 5ab0012..df5439b 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/container/AllTests.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/container/AllTests.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/container/ResolutionReportTest.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/container/ResolutionReportTest.java
index 5bf0876..14e98c9 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/container/ResolutionReportTest.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/container/ResolutionReportTest.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/container/TestModuleContainer.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/container/TestModuleContainer.java
index 161841e..1d2739c 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/container/TestModuleContainer.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/container/TestModuleContainer.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -984,7 +984,7 @@
 		Module f = installDummyModule("sub.f.MF", "f", container);
 		Module e = installDummyModule("sub.e.MF", "e", container);
 
-		// resolve order does matter so that transitive dependencies are pulled in 
+		// resolve order does matter so that transitive dependencies are pulled in
 		// and cause substitution to happen in a certain way
 		container.resolve(Arrays.asList(g, f, e), true);
 
@@ -1017,7 +1017,7 @@
 		installDummyModule("sub.j.MF", "j", container);
 		Module k = installDummyModule("sub.k.MF", "k", container);
 
-		// resolve order does matter so that transitive dependencies are pulled in 
+		// resolve order does matter so that transitive dependencies are pulled in
 		// and cause substitution to happen in a certain way
 		container.resolve(Arrays.asList(k), true);
 
@@ -1558,7 +1558,7 @@
 		// make sure h1 is not resolved
 		ModuleWiring h1Wiring = h1.getCurrentRevision().getWiring();
 		Assert.assertNull("h1 got resolved somehow.", h1Wiring);
-		// do not resolve the host first; make sure it gets pulled in while attempting to resolve 
+		// do not resolve the host first; make sure it gets pulled in while attempting to resolve
 		// to a fragment capability.
 		ModuleWire dynamicWire = container.resolveDynamic("f1.a", dynamic2.getCurrentRevision());
 		Assert.assertNotNull("Dynamic wire not found.", dynamicWire);
@@ -2178,13 +2178,13 @@
 		Map<String, String> nativeCodeManifest = new HashMap<>();
 		nativeCodeManifest.put(Constants.BUNDLE_MANIFESTVERSION, "2");
 		nativeCodeManifest.put(Constants.BUNDLE_SYMBOLICNAME, "importer");
-		nativeCodeManifest.put(Constants.BUNDLE_NATIVECODE, // 
+		nativeCodeManifest.put(Constants.BUNDLE_NATIVECODE, //
 				"/lib/mylib.dll; osname=\"win32\"; osname=\"Windows NT (unknown)\"," + //
 						"/lib/mylib.lib; osname=\"Linux\"");
 
 		Module nativeCodeModule = installDummyModule(nativeCodeManifest, "nativeCodeBundle", container);
 
-		// unsatisfied optional and dynamic imports do not fail a resolve. 
+		// unsatisfied optional and dynamic imports do not fail a resolve.
 		report = container.resolve(Arrays.asList(nativeCodeModule), true);
 		Assert.assertNull("Failed to resolve nativeCodeBundle.", report.getResolutionException());
 	}
@@ -2229,7 +2229,7 @@
 		optionalImporterManifest.put(Constants.DYNAMICIMPORT_PACKAGE, "exporter");
 		Module optionalImporterModule = installDummyModule(optionalImporterManifest, "optionalImporter", container);
 
-		// unsatisfied optional and dynamic imports do not fail a resolve. 
+		// unsatisfied optional and dynamic imports do not fail a resolve.
 		report = container.resolve(Arrays.asList(optionalImporterModule), true);
 		Assert.assertNull("Failed to resolve system.bundle.", report.getResolutionException());
 
@@ -2276,7 +2276,7 @@
 		optionalImporterManifest.put(Constants.DYNAMICIMPORT_PACKAGE, "exporter");
 		Module optionalImporterModule = installDummyModule(optionalImporterManifest, "optionalImporter", container);
 
-		// unsatisfied optional and dynamic imports do not fail a resolve. 
+		// unsatisfied optional and dynamic imports do not fail a resolve.
 		report = container.resolve(Arrays.asList(optionalImporterModule), true);
 		Assert.assertNull("Failed to resolve system.bundle.", report.getResolutionException());
 
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/container/dummys/DummyCollisionHook.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/container/dummys/DummyCollisionHook.java
index 2a5329f..fd53226 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/container/dummys/DummyCollisionHook.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/container/dummys/DummyCollisionHook.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/container/dummys/DummyContainerAdaptor.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/container/dummys/DummyContainerAdaptor.java
index 01b10aa..e51114a 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/container/dummys/DummyContainerAdaptor.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/container/dummys/DummyContainerAdaptor.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/container/dummys/DummyDebugOptions.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/container/dummys/DummyDebugOptions.java
index dc19465..68ed2ef 100755
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/container/dummys/DummyDebugOptions.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/container/dummys/DummyDebugOptions.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/container/dummys/DummyModule.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/container/dummys/DummyModule.java
index c63cebd..8e7e7de 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/container/dummys/DummyModule.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/container/dummys/DummyModule.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/container/dummys/DummyModuleDatabase.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/container/dummys/DummyModuleDatabase.java
index faf66c7..d2fc716 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/container/dummys/DummyModuleDatabase.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/container/dummys/DummyModuleDatabase.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/container/dummys/DummySystemModule.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/container/dummys/DummySystemModule.java
index 93cde3d..a6430ec 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/container/dummys/DummySystemModule.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/container/dummys/DummySystemModule.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/container/dummys/UnresolvedProviderEntryBuilder.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/container/dummys/UnresolvedProviderEntryBuilder.java
index f58e2fd..8529fb4 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/container/dummys/UnresolvedProviderEntryBuilder.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/container/dummys/UnresolvedProviderEntryBuilder.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/debugoptions/DebugOptionsTestCase.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/debugoptions/DebugOptionsTestCase.java
index e2af36b..79d66e0 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/debugoptions/DebugOptionsTestCase.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/debugoptions/DebugOptionsTestCase.java
@@ -98,7 +98,7 @@
 	 * Test that a new {@link FrameworkDebugTraceEntry} object created without a trace class
 	 * has 'org.eclipse.osgi.tests.debugoptions.DebugOptionsTestCase' as the class name and
 	 * 'testTracingEntry01' as the method name that it determined as the caller of it.
-	 * 
+	 *
 	 * This test mimics the tracing framework to ensure that the correct class name and method name
 	 * are returned and written to the trace file.
 	 */
@@ -110,7 +110,7 @@
 		FrameworkDebugTraceEntry traceEntry = new FrameworkDebugTraceEntry(bundleName, optionPath, message, null);
 		String correctClassName = "org.eclipse.osgi.tests.debugoptions.DebugOptionsTestCase"; //$NON-NLS-1$
 		String correctMethodName = "testTracingEntry01"; //$NON-NLS-1$
-		assertEquals("The class calling the trace API does not match the expected value.", correctClassName, traceEntry.getClassName()); //$NON-NLS-1$  
+		assertEquals("The class calling the trace API does not match the expected value.", correctClassName, traceEntry.getClassName()); //$NON-NLS-1$
 		assertEquals("The method calling the trace API does not match the expected value.", correctMethodName, traceEntry.getMethodName()); //$NON-NLS-1$
 	}
 
@@ -118,7 +118,7 @@
 	 * Test that a new {@link FrameworkDebugTraceEntry} object created with a trace class
 	 * of 'org.eclipse.osgi.tests.debugoptions.DebugOptionsTestCase' has the correct class name and
 	 * method name of the caller.
-	 * 
+	 *
 	 * This test mimics the tracing framework to ensure that the correct class name and method name
 	 * are returned and written to the trace file.
 	 */
@@ -127,7 +127,7 @@
 		String correctClassName = Runner1.class.getName();
 		String correctMethodName = "run"; //$NON-NLS-1$
 		FrameworkDebugTraceEntry traceEntry = new Runner1().run();
-		assertEquals("The class calling the trace API does not match the expected value.", correctClassName, traceEntry.getClassName()); //$NON-NLS-1$  
+		assertEquals("The class calling the trace API does not match the expected value.", correctClassName, traceEntry.getClassName()); //$NON-NLS-1$
 		assertEquals("The method calling the trace API does not match the expected value.", correctMethodName, traceEntry.getMethodName()); //$NON-NLS-1$
 	}
 
@@ -229,7 +229,7 @@
 		assertNull("Found bad value: " + listener.getIncorrectValue(), listener.getIncorrectValue()); //$NON-NLS-1$
 
 		listener.clear();
-		checkValues.put(getName() + "/debug", null); //$NON-NLS-1$ 
+		checkValues.put(getName() + "/debug", null); //$NON-NLS-1$
 		listener.setCheckValues(checkValues);
 		debugOptions.setDebugEnabled(false);
 		assertFalse("Debug is enabled", debugOptions.isDebugEnabled()); //$NON-NLS-1$
@@ -560,7 +560,7 @@
 		expectedThrowableText1.append(exceptionMessage1);
 		expectedThrowableText1.append(DebugOptionsTestCase.LINE_SEPARATOR);
 		expectedThrowableText1.append(DebugOptionsTestCase.TAB_CHARACTER);
-		expectedThrowableText1.append("at org.eclipse.osgi.tests.debugoptions.DebugOptionsTestCase.testVerboseDebugging(DebugOptionsTestCase.java:"); //$NON-NLS-1$		
+		expectedThrowableText1.append("at org.eclipse.osgi.tests.debugoptions.DebugOptionsTestCase.testVerboseDebugging(DebugOptionsTestCase.java:"); //$NON-NLS-1$
 		if (!traceOutput[0].getThrowableText().startsWith(expectedThrowableText1.toString())) {
 			final StringBuilder errorMessage = new StringBuilder("The expected throwable text does not start with the actual throwable text."); //$NON-NLS-1$
 			errorMessage.append(DebugOptionsTestCase.LINE_SEPARATOR);
@@ -659,7 +659,7 @@
 		final String exceptionMessage2 = "An error 2"; //$NON-NLS-1$
 		final String exceptionMessage3 = "An error 3"; //$NON-NLS-1$
 		try {
-			debugTrace.trace("/debug", "testing 1", new Exception(exceptionMessage1)); //$NON-NLS-1$ //$NON-NLS-2$ 
+			debugTrace.trace("/debug", "testing 1", new Exception(exceptionMessage1)); //$NON-NLS-1$ //$NON-NLS-2$
 			debugTrace.trace("/notset", "testing 2", new Exception(exceptionMessage2)); //$NON-NLS-1$ //$NON-NLS-2$
 			debugTrace.trace("/debug", "testing 3", new Exception(exceptionMessage3)); //$NON-NLS-1$ //$NON-NLS-2$
 			traceOutput = readTraceFile(traceFile); // Note: this call will also delete the trace file
@@ -671,7 +671,7 @@
 		expectedThrowableText1.append(exceptionMessage1);
 		expectedThrowableText1.append(DebugOptionsTestCase.LINE_SEPARATOR);
 		expectedThrowableText1.append(DebugOptionsTestCase.TAB_CHARACTER);
-		expectedThrowableText1.append("at org.eclipse.osgi.tests.debugoptions.DebugOptionsTestCase.testTraceFile02(DebugOptionsTestCase.java:"); //$NON-NLS-1$		
+		expectedThrowableText1.append("at org.eclipse.osgi.tests.debugoptions.DebugOptionsTestCase.testTraceFile02(DebugOptionsTestCase.java:"); //$NON-NLS-1$
 
 		assertEquals("Wrong number of trace entries", 2, traceOutput.length); //$NON-NLS-1$
 		assertEquals("Thread name is incorrect", Thread.currentThread().getName(), traceOutput[0].getThreadName()); //$NON-NLS-1$
@@ -706,7 +706,7 @@
 		expectedThrowableText2.append(exceptionMessage3);
 		expectedThrowableText2.append(DebugOptionsTestCase.LINE_SEPARATOR);
 		expectedThrowableText2.append(DebugOptionsTestCase.TAB_CHARACTER);
-		expectedThrowableText2.append("at org.eclipse.osgi.tests.debugoptions.DebugOptionsTestCase.testTraceFile02(DebugOptionsTestCase.java:"); //$NON-NLS-1$		
+		expectedThrowableText2.append("at org.eclipse.osgi.tests.debugoptions.DebugOptionsTestCase.testTraceFile02(DebugOptionsTestCase.java:"); //$NON-NLS-1$
 
 		assertEquals("Thread name is incorrect", Thread.currentThread().getName(), traceOutput[1].getThreadName()); //$NON-NLS-1$
 		assertEquals("Bundle name is incorrect", getName(), traceOutput[1].getBundleSymbolicName()); //$NON-NLS-1$
@@ -1179,7 +1179,7 @@
 
 		/**
 		 * The date and time when the trace occurred.
-		 * 
+		 *
 		 */
 		private final long timestamp;
 
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/eclipseadaptor/AllTests.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/eclipseadaptor/AllTests.java
index 9d7b9b9..f37b5be 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/eclipseadaptor/AllTests.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/eclipseadaptor/AllTests.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/eclipseadaptor/EnvironmentInfoTest.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/eclipseadaptor/EnvironmentInfoTest.java
index a2f5368..a2eeadc 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/eclipseadaptor/EnvironmentInfoTest.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/eclipseadaptor/EnvironmentInfoTest.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/eclipseadaptor/FilePathTest.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/eclipseadaptor/FilePathTest.java
index 332701e..9e105d6 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/eclipseadaptor/FilePathTest.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/eclipseadaptor/FilePathTest.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -42,7 +42,7 @@
 			assertEquals("3.2", "a", segments[1]);
 			return;
 		}
-		// this runs on non-Windows platforms		
+		// this runs on non-Windows platforms
 		assertTrue("1.0", path.isAbsolute());
 		assertNull("2.0", path.getDevice());
 		String[] segments = path.getSegments();
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/hooks/framework/AllFrameworkHookTests.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/hooks/framework/AllFrameworkHookTests.java
index d86f3ef..dc6c570 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/hooks/framework/AllFrameworkHookTests.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/hooks/framework/AllFrameworkHookTests.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/hooks/framework/StorageHookTests.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/hooks/framework/StorageHookTests.java
index 15d5b49..4967707 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/hooks/framework/StorageHookTests.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/hooks/framework/StorageHookTests.java
@@ -56,7 +56,7 @@
 	private String location;
 
 	/*
-	 * Bundles must be discarded if a storage hook throws an 
+	 * Bundles must be discarded if a storage hook throws an
 	 * IllegalStateException during validation.
 	 */
 	public void testBundleDiscardedWhenClasspathStorageHookInvalidates() throws Exception {
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/internal/plugins/InstallTests.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/internal/plugins/InstallTests.java
index aba0f31..8fb4483 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/internal/plugins/InstallTests.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/internal/plugins/InstallTests.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -51,7 +51,7 @@
 			fail("1.0"); //$NON-NLS-1$
 		} finally {
 			if (installed != null)
-				// clean-up - only runs if we end-up accepting an invalid manifest				
+				// clean-up - only runs if we end-up accepting an invalid manifest
 				installed.uninstall();
 		}
 	}
@@ -70,7 +70,7 @@
 			assertEquals("Expected manifest error", BundleException.MANIFEST_ERROR, be.getType()); //$NON-NLS-1$
 		} finally {
 			if (installed != null)
-				// clean-up - only runs if we end-up accepting an invalid manifest				
+				// clean-up - only runs if we end-up accepting an invalid manifest
 				installed.uninstall();
 		}
 	}
@@ -89,7 +89,7 @@
 			assertEquals("Expected manifest error", BundleException.MANIFEST_ERROR, be.getType()); //$NON-NLS-1$
 		} finally {
 			if (installed != null)
-				// clean-up - only runs if we end-up accepting an invalid manifest				
+				// clean-up - only runs if we end-up accepting an invalid manifest
 				installed.uninstall();
 		}
 	}
@@ -108,7 +108,7 @@
 			assertEquals("Expected manifest error", BundleException.MANIFEST_ERROR, be.getType()); //$NON-NLS-1$
 		} finally {
 			if (installed != null)
-				// clean-up - only runs if we end-up accepting an invalid manifest				
+				// clean-up - only runs if we end-up accepting an invalid manifest
 				installed.uninstall();
 		}
 	}
@@ -127,7 +127,7 @@
 			assertEquals("Expected manifest error", BundleException.MANIFEST_ERROR, be.getType()); //$NON-NLS-1$
 		} finally {
 			if (installed != null)
-				// clean-up - only runs if we end-up accepting an invalid manifest				
+				// clean-up - only runs if we end-up accepting an invalid manifest
 				installed.uninstall();
 		}
 	}
@@ -156,7 +156,7 @@
 
 		} finally {
 			if (installed != null)
-				// clean-up - only runs if we end-up accepting an invalid manifest				
+				// clean-up - only runs if we end-up accepting an invalid manifest
 				installed.uninstall();
 		}
 	}
@@ -213,7 +213,7 @@
 			assertEquals("Expected unsupported error", BundleException.UNSUPPORTED_OPERATION, be.getType()); //$NON-NLS-1$
 		} finally {
 			if (installed != null)
-				// clean-up - only runs if we end-up accepting an invalid manifest				
+				// clean-up - only runs if we end-up accepting an invalid manifest
 				installed.uninstall();
 		}
 	}
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/listeners/ExceptionHandlerTests.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/listeners/ExceptionHandlerTests.java
index 157f830..8ca3854 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/listeners/ExceptionHandlerTests.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/listeners/ExceptionHandlerTests.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -23,20 +23,20 @@
 
 public class ExceptionHandlerTests extends TestCase {
 	//These tests exercise the code change for bug 73111.
-	
+
 	class FrameworkEventListenerWithResult implements FrameworkListener {
 		FrameworkEvent event = null;
-		
+
 		public synchronized void frameworkEvent(FrameworkEvent newEvent) {
 			if (newEvent.getType() != FrameworkEvent.ERROR)
 				return;
-			
+
 			if (this.event != null)
 				return;
 			event = newEvent;
 			notify();
 		}
-		
+
 		public synchronized FrameworkEvent getResult(long timeout) {
 			if (event != null) {
 				FrameworkEvent tmp = event;
@@ -53,13 +53,13 @@
 		}
 	}
 
-	
+
 	protected void setUp() throws Exception {
 		super.setUp();
 	}
-	
-	
-	public void testNonFatalException() {	
+
+
+	public void testNonFatalException() {
 		FrameworkEventListenerWithResult fwkListener = new FrameworkEventListenerWithResult();
 		OSGiTestsActivator.getContext().addFrameworkListener(fwkListener);
 
@@ -67,9 +67,9 @@
 			public void bundleChanged(BundleEvent event) {
 				throw new NullPointerException("Generated exception");
 			}
-		};	
+		};
 		OSGiTestsActivator.getContext().addBundleListener(npeGenerator);
-		
+
 		try {
 			BundleTestingHelper.installBundle(OSGiTestsActivator.getContext(), OSGiTestsActivator.TEST_FILES_ROOT + "internal/plugins/installTests/bundle09");
 			FrameworkEvent eventReceived = fwkListener.getResult(60000);
@@ -85,9 +85,9 @@
 		OSGiTestsActivator.getContext().removeFrameworkListener(fwkListener);
 		OSGiTestsActivator.getContext().removeBundleListener(npeGenerator);
 	}
-	
-	
-	public void testFatalException() {	
+
+
+	public void testFatalException() {
 		FrameworkEventListenerWithResult fwkListener = new FrameworkEventListenerWithResult();
 		OSGiTestsActivator.getContext().addFrameworkListener(fwkListener);
 
@@ -97,8 +97,8 @@
 			}
 		};
 		OSGiTestsActivator.getContext().addBundleListener(fatalException);
-		
-	
+
+
 		try {
 			System.setProperty("eclipse.exitOnError","false"); //Here we set the value to false, because otherwise we would simply exit
 			BundleTestingHelper.installBundle(OSGiTestsActivator.getContext(), OSGiTestsActivator.TEST_FILES_ROOT + "internal/plugins/installTests/bundle10");
@@ -116,5 +116,5 @@
 		OSGiTestsActivator.getContext().removeFrameworkListener(fwkListener);
 		OSGiTestsActivator.getContext().removeBundleListener(fatalException);
 	}
- 
+
 }
\ No newline at end of file
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/perf/AllTests.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/perf/AllTests.java
index 628d2ab..bf83368 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/perf/AllTests.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/perf/AllTests.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/perf/BasePerformanceTest.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/perf/BasePerformanceTest.java
index 9e09616..1ba65b2 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/perf/BasePerformanceTest.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/perf/BasePerformanceTest.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/perf/CaseMapPerformanceTest.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/perf/CaseMapPerformanceTest.java
index 378be64..eb798a9 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/perf/CaseMapPerformanceTest.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/perf/CaseMapPerformanceTest.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/perf/StatePerformanceTest.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/perf/StatePerformanceTest.java
index 5675064..8b25576 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/perf/StatePerformanceTest.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/perf/StatePerformanceTest.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/perf/StateUsesPerformanceTest.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/perf/StateUsesPerformanceTest.java
index 799f361..6da9d9a 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/perf/StateUsesPerformanceTest.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/perf/StateUsesPerformanceTest.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestAttributes_001.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestAttributes_001.java
index 64059a4..8432966 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestAttributes_001.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestAttributes_001.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestBSN_001.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestBSN_001.java
index 4057e05..680566a 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestBSN_001.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestBSN_001.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestCycle_001.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestCycle_001.java
index b65a5fd..bb23bb2 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestCycle_001.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestCycle_001.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestCycle_002.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestCycle_002.java
index 1426390..0c4e54a 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestCycle_002.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestCycle_002.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestCycle_003.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestCycle_003.java
index 7f47d3a..00aad6c 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestCycle_003.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestCycle_003.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestCycle_004.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestCycle_004.java
index ebdb45b..11fab22 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestCycle_004.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestCycle_004.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestCycle_005.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestCycle_005.java
index 3d5e1f8..c323559 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestCycle_005.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestCycle_005.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestCycle_006.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestCycle_006.java
index c6cb096..4256786 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestCycle_006.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestCycle_006.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -29,7 +29,7 @@
 	BundleDescription bundle_2 = null;
 	BundleDescription bundle_3 = null;
 
-	
+
 	public void testTest_003() {
 		State state = buildEmptyState();
 		StateObjectFactory sof = StateObjectFactory.defaultFactory;
@@ -54,7 +54,7 @@
 		checkWiring_a();
 	} // end of method
 
-	
+
 	public void checkWiringState_1() {
 	} // end method
 
@@ -71,7 +71,7 @@
 		checkWiringState_3();
 	} // end method
 
-	
+
 	public void addBundlesToState_a(State state) {
 		boolean added = false;
 		added = state.addBundle(bundle_1);
@@ -82,14 +82,14 @@
 		assertTrue("failed to add bundle ", added);
 	} // end method
 
-	
+
 	public void checkBundlesResolved_a() {
 		assertTrue("unexpected bundle resolution state", !bundle_1.isResolved());
 		assertTrue("unexpected bundle resolution state", !bundle_2.isResolved());
 		assertTrue("unexpected bundle resolution state", bundle_3.isResolved());
 	} // end method
 
-	
+
 	public BundleDescription create_bundle_1(StateObjectFactory sof) {
 		java.util.Dictionary dictionary_1 = new java.util.Properties();
 		BundleDescription bundle = null;
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestDynamic_001.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestDynamic_001.java
index f1b7370..c71e611 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestDynamic_001.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestDynamic_001.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -29,7 +29,7 @@
 	BundleDescription bundle_1 = null;
 	BundleDescription bundle_2 = null;
 
-	
+
 	public void testTest_001() {
 		State state = buildEmptyState();
 		StateObjectFactory sof = StateObjectFactory.defaultFactory;
@@ -56,23 +56,23 @@
 		ExportPackageDescription exp = state.linkDynamicImport(bundle_1, "p");
 		assertNotNull("Package [p] is not wired when it should be ", exp);
 		assertEquals("Package [p] is wired incorrectly ", exp.getExporter(), bundle_2);
-		
+
 	} // end of method
 
-	
+
 	public void checkWiringState_1() {
 	} // end method
 
 	public void checkWiringState_2() {
 	} // end method
-	
+
 
 	public void checkWiring_a() {
 		checkWiringState_1();
 		checkWiringState_2();
 	} // end method
 
-	
+
 	public void addBundlesToState_a(State state) {
 		boolean added = false;
 		added = state.addBundle(bundle_1);
@@ -81,13 +81,13 @@
 		assertTrue("failed to add bundle ", added);
 	} // end method
 
-	
+
 	public void checkBundlesResolved_a() {
 		assertTrue("unexpected bundle resolution state", bundle_1.isResolved());
 		assertTrue("unexpected bundle resolution state", bundle_2.isResolved());
 	} // end method
 
-	
+
 	public BundleDescription create_bundle_1(StateObjectFactory sof) {
 		java.util.Dictionary dictionary_1 = new java.util.Properties();
 		BundleDescription bundle = null;
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestDynamic_002.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestDynamic_002.java
index 842593b..7102c21 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestDynamic_002.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestDynamic_002.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -30,7 +30,7 @@
 	BundleDescription bundle_2 = null;
 	BundleDescription bundle_3 = null;
 
-	
+
 	public void testTest_002() {
 		State state = buildEmptyState();
 		StateObjectFactory sof = StateObjectFactory.defaultFactory;
@@ -53,14 +53,14 @@
 		}
 		checkBundlesResolved_a();
 		checkWiring_a();
-		
+
 		// Dynamics
 		ExportPackageDescription exp = state.linkDynamicImport(bundle_1, "r");
 		assertNull("Package [r] is wired when it should not be ", exp);
-		
+
 	} // end of method
 
-	
+
 	public void checkWiringState_1() {
 		ExportPackageDescription[] exports = bundle_1.getResolvedImports();
 		assertNotNull("export array is unexpectedly null", exports);
@@ -83,7 +83,7 @@
 
 	public void checkWiringState_3() {
 	} // end method
-	
+
 
 	public void checkWiring_a() {
 		checkWiringState_1();
@@ -91,7 +91,7 @@
 		checkWiringState_3();
 	} // end method
 
-	
+
 	public void addBundlesToState_a(State state) {
 		boolean added = false;
 		added = state.addBundle(bundle_1);
@@ -102,14 +102,14 @@
 		assertTrue("failed to add bundle ", added);
 	} // end method
 
-	
+
 	public void checkBundlesResolved_a() {
 		assertTrue("unexpected bundle resolution state", bundle_1.isResolved());
 		assertTrue("unexpected bundle resolution state", bundle_2.isResolved());
 		assertTrue("unexpected bundle resolution state", bundle_3.isResolved());
 	} // end method
 
-	
+
 	public BundleDescription create_bundle_1(StateObjectFactory sof) {
 		java.util.Dictionary dictionary_1 = new java.util.Properties();
 		BundleDescription bundle = null;
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestDynamic_003.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestDynamic_003.java
index 2accc37..b9ecc0e 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestDynamic_003.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestDynamic_003.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -30,7 +30,7 @@
 	BundleDescription bundle_2 = null;
 	BundleDescription bundle_3 = null;
 
-	
+
 	public void testTest_003() {
 		State state = buildEmptyState();
 		StateObjectFactory sof = StateObjectFactory.defaultFactory;
@@ -53,15 +53,15 @@
 		}
 		checkBundlesResolved_a();
 		checkWiring_a();
-		
+
 		// Dynamics
 		ExportPackageDescription exp = state.linkDynamicImport(bundle_1, "r");
 		assertNotNull("Package [r] is not wired when it should be ", exp);
 		assertEquals("Package [r] is wired incorrectly ", exp.getExporter(), bundle_3);
-		
+
 	} // end of method
 
-	
+
 	public void checkWiringState_1() {
 		ExportPackageDescription[] exports = bundle_1.getResolvedImports();
 		assertNotNull("export array is unexpectedly null", exports);
@@ -84,7 +84,7 @@
 
 	public void checkWiringState_3() {
 	} // end method
-	
+
 
 	public void checkWiring_a() {
 		checkWiringState_1();
@@ -92,7 +92,7 @@
 		checkWiringState_3();
 	} // end method
 
-	
+
 	public void addBundlesToState_a(State state) {
 		boolean added = false;
 		added = state.addBundle(bundle_1);
@@ -103,14 +103,14 @@
 		assertTrue("failed to add bundle ", added);
 	} // end method
 
-	
+
 	public void checkBundlesResolved_a() {
 		assertTrue("unexpected bundle resolution state", bundle_1.isResolved());
 		assertTrue("unexpected bundle resolution state", bundle_2.isResolved());
 		assertTrue("unexpected bundle resolution state", bundle_3.isResolved());
 	} // end method
 
-	
+
 	public BundleDescription create_bundle_1(StateObjectFactory sof) {
 		java.util.Dictionary dictionary_1 = new java.util.Properties();
 		BundleDescription bundle = null;
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestDynamic_004.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestDynamic_004.java
index a6ebf71..9a13a52 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestDynamic_004.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestDynamic_004.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -31,7 +31,7 @@
 	BundleDescription bundle_3 = null;
 	BundleDescription bundle_4 = null;
 
-	
+
 	public void testTest_003() {
 		State state = buildEmptyState();
 		StateObjectFactory sof = StateObjectFactory.defaultFactory;
@@ -55,15 +55,15 @@
 		}
 		checkBundlesResolved_a();
 		checkWiring_a();
-		
+
 		// Dynamics
 		ExportPackageDescription exp = state.linkDynamicImport(bundle_1, "q");
 		assertNotNull("Package [q] is not wired when it should be ", exp);
 		assertEquals("Package [q] is wired incorrectly ", exp.getExporter(), bundle_3);
-		
+
 	} // end of method
 
-	
+
 	public void checkWiringState_1() {
 		ExportPackageDescription[] exports = bundle_1.getResolvedImports();
 		assertNotNull("export array is unexpectedly null", exports);
@@ -98,7 +98,7 @@
 	public void checkWiringState_4() {
 	} // end method
 
-	
+
 	public void checkWiring_a() {
 		checkWiringState_1();
 		checkWiringState_2();
@@ -106,7 +106,7 @@
 		checkWiringState_4();
 	} // end method
 
-	
+
 	public void addBundlesToState_a(State state) {
 		boolean added = false;
 		added = state.addBundle(bundle_1);
@@ -119,7 +119,7 @@
 		assertTrue("failed to add bundle ", added);
 	} // end method
 
-	
+
 	public void checkBundlesResolved_a() {
 		assertTrue("unexpected bundle resolution state", bundle_1.isResolved());
 		assertTrue("unexpected bundle resolution state", bundle_2.isResolved());
@@ -127,7 +127,7 @@
 		assertTrue("unexpected bundle resolution state", bundle_4.isResolved());
 	} // end method
 
-	
+
 	public BundleDescription create_bundle_1(StateObjectFactory sof) {
 		java.util.Dictionary dictionary_1 = new java.util.Properties();
 		BundleDescription bundle = null;
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestDynamic_005.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestDynamic_005.java
index 1c3a877..82d8f14 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestDynamic_005.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestDynamic_005.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -30,7 +30,7 @@
 	BundleDescription bundle_2 = null;
 	BundleDescription bundle_3 = null;
 
-	
+
 	public void testTest_005() {
 		State state = buildEmptyState();
 		StateObjectFactory sof = StateObjectFactory.defaultFactory;
@@ -53,15 +53,15 @@
 		}
 		checkBundlesResolved_a();
 		checkWiring_a();
-		
+
 		// Dynamics
 		ExportPackageDescription exp = state.linkDynamicImport(bundle_1, "q");
 		assertNotNull("Package [q] is not wired when it should be ", exp);
 		assertEquals("Package [q] is wired incorrectly ", exp.getExporter(), bundle_3);
-		
+
 	} // end of method
 
-	
+
 	public void checkWiringState_1() {
 	} // end method
 
@@ -71,14 +71,14 @@
 	public void checkWiringState_3() {
 	} // end method
 
-	
+
 	public void checkWiring_a() {
 		checkWiringState_1();
 		checkWiringState_2();
 		checkWiringState_3();
 	} // end method
 
-	
+
 	public void addBundlesToState_a(State state) {
 		boolean added = false;
 		added = state.addBundle(bundle_1);
@@ -89,14 +89,14 @@
 		assertTrue("failed to add bundle ", added);
 	} // end method
 
-	
+
 	public void checkBundlesResolved_a() {
 		assertTrue("unexpected bundle resolution state", bundle_1.isResolved());
 		assertTrue("unexpected bundle resolution state", bundle_2.isResolved());
 		assertTrue("unexpected bundle resolution state", bundle_3.isResolved());
 	} // end method
 
-	
+
 	public BundleDescription create_bundle_1(StateObjectFactory sof) {
 		java.util.Dictionary dictionary_1 = new java.util.Properties();
 		BundleDescription bundle = null;
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestDynamic_006.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestDynamic_006.java
index 79449bc..0f8a52a 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestDynamic_006.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestDynamic_006.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -30,11 +30,11 @@
 	BundleDescription bundle_2 = null;
 	BundleDescription bundle_3 = null;
 
-	
+
 	public void testTest_005() {
 		State state = buildEmptyState();
 		StateObjectFactory sof = StateObjectFactory.defaultFactory;
-		
+
 		bundle_1 = create_bundle_1(sof);
 		bundle_2 = create_bundle_2(sof);
 		bundle_3 = create_bundle_3(sof);
@@ -53,15 +53,15 @@
 		}
 		checkBundlesResolved_a();
 		checkWiring_a();
-		
+
 		// Dynamics
 		ExportPackageDescription exp = state.linkDynamicImport(bundle_1, "p.b");
 		assertNotNull("Package [p.b] is not wired when it should be ", exp);
 		assertEquals("Package [p.b] is wired incorrectly ", exp.getExporter(), bundle_3);
-		
+
 	} // end of method
 
-	
+
 	public void checkWiringState_1() {
 	} // end method
 
@@ -71,14 +71,14 @@
 	public void checkWiringState_3() {
 	} // end method
 
-	
+
 	public void checkWiring_a() {
 		checkWiringState_1();
 		checkWiringState_2();
 		checkWiringState_3();
 	} // end method
 
-	
+
 	public void addBundlesToState_a(State state) {
 		boolean added = false;
 		added = state.addBundle(bundle_1);
@@ -89,14 +89,14 @@
 		assertTrue("failed to add bundle ", added);
 	} // end method
 
-	
+
 	public void checkBundlesResolved_a() {
 		assertTrue("unexpected bundle resolution state", bundle_1.isResolved());
 		assertTrue("unexpected bundle resolution state", bundle_2.isResolved());
 		assertTrue("unexpected bundle resolution state", bundle_3.isResolved());
 	} // end method
 
-	
+
 	public BundleDescription create_bundle_1(StateObjectFactory sof) {
 		java.util.Dictionary dictionary_1 = new java.util.Properties();
 		BundleDescription bundle = null;
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestGenerated_001.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestGenerated_001.java
index 9b90fb7..0fbf39c 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestGenerated_001.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestGenerated_001.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestGrouping_001.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestGrouping_001.java
index 51a804a..5414ba6 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestGrouping_001.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestGrouping_001.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -30,7 +30,7 @@
 	BundleDescription bundle_2 = null;
 	BundleDescription bundle_3 = null;
 
-	
+
 	public void testTest_001() {
 		State state = buildEmptyState();
 		StateObjectFactory sof = StateObjectFactory.defaultFactory;
@@ -55,7 +55,7 @@
 		checkWiring_a();
 	} // end of method
 
-	
+
 	public void checkWiringState_1() {
 		ExportPackageDescription[] exports = bundle_1.getResolvedImports();
 		assertNotNull("export array is unexpectedly null", exports);
@@ -86,7 +86,7 @@
 		checkWiringState_3();
 	} // end method
 
-	
+
 	public void addBundlesToState_a(State state) {
 		boolean added = false;
 		added = state.addBundle(bundle_1);
@@ -97,14 +97,14 @@
 		assertTrue("failed to add bundle ", added);
 	} // end method
 
-	
+
 	public void checkBundlesResolved_a() {
 		assertTrue("unexpected bundle resolution state", bundle_1.isResolved());
 		assertTrue("unexpected bundle resolution state", bundle_2.isResolved());
 		assertTrue("unexpected bundle resolution state", bundle_3.isResolved());
 	} // end method
 
-	
+
 	public BundleDescription create_bundle_1(StateObjectFactory sof) {
 		java.util.Dictionary dictionary_1 = new java.util.Properties();
 		BundleDescription bundle = null;
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestGrouping_002.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestGrouping_002.java
index 1767488..0a2b063 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestGrouping_002.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestGrouping_002.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -29,7 +29,7 @@
 	BundleDescription bundle_2 = null;
 	BundleDescription bundle_3 = null;
 
-	
+
 	public void testTest_002() {
 		State state = buildEmptyState();
 		StateObjectFactory sof = StateObjectFactory.defaultFactory;
@@ -54,7 +54,7 @@
 		checkWiring_a();
 	} // end of method
 
-	
+
 	public void checkWiringState_1() {
 	} // end method
 
@@ -71,7 +71,7 @@
 		checkWiringState_3();
 	} // end method
 
-	
+
 	public void addBundlesToState_a(State state) {
 		boolean added = false;
 		added = state.addBundle(bundle_1);
@@ -82,14 +82,14 @@
 		assertTrue("failed to add bundle ", added);
 	} // end method
 
-	
+
 	public void checkBundlesResolved_a() {
 		assertTrue("unexpected bundle resolution state", !bundle_1.isResolved());
 		assertTrue("unexpected bundle resolution state", bundle_2.isResolved());
 		assertTrue("unexpected bundle resolution state", bundle_3.isResolved());
 	} // end method
 
-	
+
 	public BundleDescription create_bundle_1(StateObjectFactory sof) {
 		java.util.Dictionary dictionary_1 = new java.util.Properties();
 		BundleDescription bundle = null;
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestGrouping_003.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestGrouping_003.java
index 053ff32..d22487c 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestGrouping_003.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestGrouping_003.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -32,7 +32,7 @@
 	BundleDescription bundle_4 = null;
 	BundleDescription bundle_5 = null;
 
-	
+
 	public void testTest_003() {
 		State state = buildEmptyState();
 		StateObjectFactory sof = StateObjectFactory.defaultFactory;
@@ -59,7 +59,7 @@
 		checkWiring_a();
 	} // end of method
 
-	
+
 	public void checkWiringState_1() {
 		ExportPackageDescription[] exports = bundle_1.getResolvedImports();
 		assertNotNull("export array is unexpectedly null", exports);
@@ -102,7 +102,7 @@
 
 	public void checkWiringState_5() {
 	} // end method
-	
+
 
 	public void checkWiring_a() {
 		checkWiringState_1();
@@ -112,7 +112,7 @@
 		checkWiringState_5();
 	} // end method
 
-	
+
 	public void addBundlesToState_a(State state) {
 		boolean added = false;
 		added = state.addBundle(bundle_1);
@@ -127,7 +127,7 @@
 		assertTrue("failed to add bundle ", added);
 	} // end method
 
-	
+
 	public void checkBundlesResolved_a() {
 		assertTrue("unexpected bundle resolution state", bundle_1.isResolved());
 		assertTrue("unexpected bundle resolution state", bundle_2.isResolved());
@@ -136,7 +136,7 @@
 		assertTrue("unexpected bundle resolution state", bundle_5.isResolved());
 	} // end method
 
-	
+
 	public BundleDescription create_bundle_1(StateObjectFactory sof) {
 		java.util.Dictionary dictionary_1 = new java.util.Properties();
 		BundleDescription bundle = null;
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestGrouping_006.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestGrouping_006.java
index 2861ad3..fb3aee6 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestGrouping_006.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestGrouping_006.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -29,7 +29,7 @@
 	BundleDescription bundle_2 = null;
 	BundleDescription bundle_3 = null;
 
-	
+
 	public void testTest_001() {
 		State state = buildEmptyState();
 		StateObjectFactory sof = StateObjectFactory.defaultFactory;
@@ -54,7 +54,7 @@
 		checkWiring_a();
 	} // end of method
 
-	
+
 	public void checkWiringState_1() {
 	} // end method
 
@@ -71,7 +71,7 @@
 		checkWiringState_3();
 	} // end method
 
-	
+
 	public void addBundlesToState_a(State state) {
 		boolean added = false;
 		added = state.addBundle(bundle_1);
@@ -82,14 +82,14 @@
 		assertTrue("failed to add bundle ", added);
 	} // end method
 
-	
+
 	public void checkBundlesResolved_a() {
 		assertTrue("unexpected bundle resolution state", !bundle_1.isResolved());
 		assertTrue("unexpected bundle resolution state", bundle_2.isResolved());
 		assertTrue("unexpected bundle resolution state", bundle_3.isResolved());
 	} // end method
 
-	
+
 	public BundleDescription create_bundle_1(StateObjectFactory sof) {
 		java.util.Dictionary dictionary_1 = new java.util.Properties();
 		BundleDescription bundle = null;
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestGrouping_008.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestGrouping_008.java
index 26cf349..08879aa 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestGrouping_008.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestGrouping_008.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -30,7 +30,7 @@
 	BundleDescription bundle_2 = null;
 	BundleDescription bundle_3 = null;
 
-	
+
 	public void testTest_008() {
 		State state = buildEmptyState();
 		StateObjectFactory sof = StateObjectFactory.defaultFactory;
@@ -55,7 +55,7 @@
 		checkWiring_a();
 	} // end of method
 
-	
+
 	public void checkWiringState_1() {
 		BundleDescription[] requires = bundle_1.getResolvedRequires();
 		assertNotNull("requires array is unexpectedly null", requires);
@@ -87,7 +87,7 @@
 	public void checkWiringState_3() {
 	} // end method
 
-	
+
 
 	public void checkWiring_a() {
 		checkWiringState_1();
@@ -95,7 +95,7 @@
 		checkWiringState_3();
 	} // end method
 
-	
+
 	public void addBundlesToState_a(State state) {
 		boolean added = false;
 		added = state.addBundle(bundle_1);
@@ -106,14 +106,14 @@
 		assertTrue("failed to add bundle ", added);
 	} // end method
 
-	
+
 	public void checkBundlesResolved_a() {
 		assertTrue("unexpected bundle resolution state", bundle_1.isResolved());
 		assertTrue("unexpected bundle resolution state", bundle_2.isResolved());
 		assertTrue("unexpected bundle resolution state", bundle_3.isResolved());
 	} // end method
 
-	
+
 	public BundleDescription create_bundle_1(StateObjectFactory sof) {
 		java.util.Dictionary dictionary_1 = new java.util.Properties();
 		BundleDescription bundle = null;
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestOptional_001.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestOptional_001.java
index 68c1d85..611d4f1 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestOptional_001.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestOptional_001.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -30,7 +30,7 @@
 	BundleDescription bundle_2 = null;
 	BundleDescription bundle_3 = null;
 
-	
+
 	public void testTest_002() {
 		State state = buildEmptyState();
 		StateObjectFactory sof = StateObjectFactory.defaultFactory;
@@ -55,7 +55,7 @@
 		checkWiring_a();
 	} // end of method
 
-	
+
 	public void checkWiringState_1() {
 		ExportPackageDescription[] exports = bundle_1.getResolvedImports();
 		assertNotNull("export array is unexpectedly null", exports);
@@ -88,7 +88,7 @@
 		checkWiringState_3();
 	} // end method
 
-	
+
 	public void addBundlesToState_a(State state) {
 		boolean added = false;
 		added = state.addBundle(bundle_1);
@@ -99,14 +99,14 @@
 		assertTrue("failed to add bundle ", added);
 	} // end method
 
-	
+
 	public void checkBundlesResolved_a() {
 		assertTrue("unexpected bundle resolution state", bundle_1.isResolved());
 		assertTrue("unexpected bundle resolution state", bundle_2.isResolved());
 		assertTrue("unexpected bundle resolution state", bundle_3.isResolved());
 	} // end method
 
-	
+
 	public BundleDescription create_bundle_1(StateObjectFactory sof) {
 		java.util.Dictionary dictionary_1 = new java.util.Properties();
 		BundleDescription bundle = null;
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestOptional_002.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestOptional_002.java
index 536ced1..68e1f4e 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestOptional_002.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestOptional_002.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -30,7 +30,7 @@
 	BundleDescription bundle_2 = null;
 	BundleDescription bundle_3 = null;
 
-	
+
 	public void testTest_002() {
 		State state = buildEmptyState();
 		StateObjectFactory sof = StateObjectFactory.defaultFactory;
@@ -55,7 +55,7 @@
 		checkWiring_a();
 	} // end of method
 
-	
+
 	public void checkWiringState_1() {
 		ExportPackageDescription[] exports = bundle_1.getResolvedImports();
 		assertNotNull("export array is unexpectedly null", exports);
@@ -88,7 +88,7 @@
 		checkWiringState_3();
 	} // end method
 
-	
+
 	public void addBundlesToState_a(State state) {
 		boolean added = false;
 		added = state.addBundle(bundle_1);
@@ -99,14 +99,14 @@
 		assertTrue("failed to add bundle ", added);
 	} // end method
 
-	
+
 	public void checkBundlesResolved_a() {
 		assertTrue("unexpected bundle resolution state", bundle_1.isResolved());
 		assertTrue("unexpected bundle resolution state", bundle_2.isResolved());
 		assertTrue("unexpected bundle resolution state", bundle_3.isResolved());
 	} // end method
 
-	
+
 	public BundleDescription create_bundle_1(StateObjectFactory sof) {
 		java.util.Dictionary dictionary_1 = new java.util.Properties();
 		BundleDescription bundle = null;
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestPropagation_001.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestPropagation_001.java
index 10b24a7..13558be 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestPropagation_001.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestPropagation_001.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -31,7 +31,7 @@
 	BundleDescription bundle_3 = null;
 	BundleDescription bundle_4 = null;
 
-	
+
 	public void testTest_001() {
 		State state = buildEmptyState();
 		StateObjectFactory sof = StateObjectFactory.defaultFactory;
@@ -57,7 +57,7 @@
 		checkWiring_a();
 	} // end of method
 
-	
+
 	public void checkWiringState_1() {
 		ExportPackageDescription[] exports = bundle_1.getResolvedImports();
 		assertNotNull("export array is unexpectedly null", exports);
@@ -103,7 +103,7 @@
 		checkWiringState_4();
 	} // end method
 
-	
+
 	public void addBundlesToState_a(State state) {
 		boolean added = false;
 		added = state.addBundle(bundle_1);
@@ -116,7 +116,7 @@
 		assertTrue("failed to add bundle ", added);
 	} // end method
 
-	
+
 	public void checkBundlesResolved_a() {
 		assertTrue("unexpected bundle resolution state", bundle_1.isResolved());
 		assertTrue("unexpected bundle resolution state", bundle_2.isResolved());
@@ -124,7 +124,7 @@
 		assertTrue("unexpected bundle resolution state", bundle_4.isResolved());
 	} // end method
 
-	
+
 	public BundleDescription create_bundle_1(StateObjectFactory sof) {
 		java.util.Dictionary dictionary_1 = new java.util.Properties();
 		BundleDescription bundle = null;
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestPropagation_003.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestPropagation_003.java
index 2c184e8..9b38077 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestPropagation_003.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestPropagation_003.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -31,7 +31,7 @@
 	BundleDescription bundle_3 = null;
 	BundleDescription bundle_4 = null;
 
-	
+
 	public void testTest_001() {
 		State state = buildEmptyState();
 		StateObjectFactory sof = StateObjectFactory.defaultFactory;
@@ -57,7 +57,7 @@
 		checkWiring_a();
 	} // end of method
 
-	
+
 	public void checkWiringState_1() {
 	} // end method
 
@@ -89,7 +89,7 @@
 		checkWiringState_4();
 	} // end method
 
-	
+
 	public void addBundlesToState_a(State state) {
 		boolean added = false;
 		added = state.addBundle(bundle_1);
@@ -102,7 +102,7 @@
 		assertTrue("failed to add bundle ", added);
 	} // end method
 
-	
+
 	public void checkBundlesResolved_a() {
 		assertTrue("unexpected bundle resolution state", !bundle_1.isResolved());
 		assertTrue("unexpected bundle resolution state", bundle_2.isResolved());
@@ -110,7 +110,7 @@
 		assertTrue("unexpected bundle resolution state", bundle_4.isResolved());
 	} // end method
 
-	
+
 	public BundleDescription create_bundle_1(StateObjectFactory sof) {
 		java.util.Dictionary dictionary_1 = new java.util.Properties();
 		BundleDescription bundle = null;
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestRFC79_001.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestRFC79_001.java
index 86d5dd1..1498cb3 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestRFC79_001.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestRFC79_001.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -30,7 +30,7 @@
 	BundleDescription bundle_2 = null;
 	BundleDescription bundle_3 = null;
 
-	
+
 	public void testTest_001() {
 		State state = buildEmptyState();
 		StateObjectFactory sof = StateObjectFactory.defaultFactory;
@@ -55,7 +55,7 @@
 		checkWiring_a();
 	} // end of method
 
-	
+
 	public void checkWiringState_1() {
 		ExportPackageDescription[] exports = bundle_1.getResolvedImports();
 		assertNotNull("export array is unexpectedly null", exports);
@@ -105,7 +105,7 @@
 		checkWiringState_3();
 	} // end method
 
-	
+
 	public void addBundlesToState_a(State state) {
 		boolean added = false;
 		added = state.addBundle(bundle_1);
@@ -116,14 +116,14 @@
 		assertTrue("failed to add bundle ", added);
 	} // end method
 
-	
+
 	public void checkBundlesResolved_a() {
 		assertTrue("unexpected bundle resolution state", bundle_1.isResolved());
 		assertTrue("unexpected bundle resolution state", bundle_2.isResolved());
 		assertTrue("unexpected bundle resolution state", bundle_3.isResolved());
 	} // end method
 
-	
+
 	public BundleDescription create_bundle_1(StateObjectFactory sof) {
 		java.util.Dictionary dictionary_1 = new java.util.Properties();
 		BundleDescription bundle = null;
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestRFC79_002.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestRFC79_002.java
index 9922c9f..c45da1b 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestRFC79_002.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestRFC79_002.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -32,7 +32,7 @@
 	BundleDescription bundle_4 = null;
 	BundleDescription bundle_5 = null;
 
-	
+
 	public void testTest_002() {
 		State state = buildEmptyState();
 		StateObjectFactory sof = StateObjectFactory.defaultFactory;
@@ -59,7 +59,7 @@
 		checkWiring_a();
 	} // end of method
 
-	
+
 	public void checkWiringState_1() {
 		ExportPackageDescription[] exports = bundle_1.getResolvedImports();
 		assertNotNull("export array is unexpectedly null", exports);
@@ -135,7 +135,7 @@
 			}
 		} // end for
 	} // end method
-	
+
 
 	public void checkWiring_a() {
 		checkWiringState_1();
@@ -145,7 +145,7 @@
 		checkWiringState_5();
 	} // end method
 
-	
+
 	public void addBundlesToState_a(State state) {
 		boolean added = false;
 		added = state.addBundle(bundle_1);
@@ -160,7 +160,7 @@
 		assertTrue("failed to add bundle ", added);
 	} // end method
 
-	
+
 	public void checkBundlesResolved_a() {
 		assertTrue("unexpected bundle resolution state", bundle_1.isResolved());
 		assertTrue("unexpected bundle resolution state", bundle_2.isResolved());
@@ -169,7 +169,7 @@
 		assertTrue("unexpected bundle resolution state", bundle_5.isResolved());
 	} // end method
 
-	
+
 	public BundleDescription create_bundle_1(StateObjectFactory sof) {
 		java.util.Dictionary dictionary_1 = new java.util.Properties();
 		BundleDescription bundle = null;
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestRFC79_003.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestRFC79_003.java
index bc7f554..d116a16 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestRFC79_003.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestRFC79_003.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -31,7 +31,7 @@
 	BundleDescription bundle_3 = null;
 	BundleDescription bundle_4 = null;
 
-	
+
 	public void testTest_003() {
 		State state = buildEmptyState();
 		StateObjectFactory sof = StateObjectFactory.defaultFactory;
@@ -57,7 +57,7 @@
 		checkWiring_a();
 	} // end of method
 
-	
+
 	public void checkWiringState_1() {
 		ExportPackageDescription[] exports = bundle_1.getResolvedImports();
 		assertNotNull("export array is unexpectedly null", exports);
@@ -120,7 +120,7 @@
 		} // end for
 	} // end method
 
-	
+
 
 	public void checkWiring_a() {
 		checkWiringState_1();
@@ -129,7 +129,7 @@
 		checkWiringState_4();
 	} // end method
 
-	
+
 	public void addBundlesToState_a(State state) {
 		boolean added = false;
 		added = state.addBundle(bundle_1);
@@ -142,7 +142,7 @@
 		assertTrue("failed to add bundle ", added);
 	} // end method
 
-	
+
 	public void checkBundlesResolved_a() {
 		assertTrue("unexpected bundle resolution state", bundle_1.isResolved());
 		assertTrue("unexpected bundle resolution state", bundle_2.isResolved());
@@ -150,7 +150,7 @@
 		assertTrue("unexpected bundle resolution state", bundle_4.isResolved());
 	} // end method
 
-	
+
 	public BundleDescription create_bundle_1(StateObjectFactory sof) {
 		java.util.Dictionary dictionary_1 = new java.util.Properties();
 		BundleDescription bundle = null;
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestRFC79_004.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestRFC79_004.java
index e53a8e6..b04b783 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestRFC79_004.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestRFC79_004.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -31,7 +31,7 @@
 	BundleDescription bundle_3 = null;
 	BundleDescription bundle_4 = null;
 
-	
+
 	public void testTest_004() {
 		State state = buildEmptyState();
 		StateObjectFactory sof = StateObjectFactory.defaultFactory;
@@ -57,7 +57,7 @@
 		checkWiring_a();
 	} // end of method
 
-	
+
 	public void checkWiringState_1() {
 		ExportPackageDescription[] exports = bundle_1.getResolvedImports();
 		assertNotNull("export array is unexpectedly null", exports);
@@ -98,7 +98,7 @@
 	public void checkWiringState_4() {
 	} // end method
 
-	
+
 
 	public void checkWiring_a() {
 		checkWiringState_1();
@@ -107,7 +107,7 @@
 		checkWiringState_4();
 	} // end method
 
-	
+
 	public void addBundlesToState_a(State state) {
 		boolean added = false;
 		added = state.addBundle(bundle_1);
@@ -120,7 +120,7 @@
 		assertTrue("failed to add bundle ", added);
 	} // end method
 
-	
+
 	public void checkBundlesResolved_a() {
 		assertTrue("unexpected bundle resolution state", bundle_1.isResolved());
 		assertTrue("unexpected bundle resolution state", bundle_2.isResolved());
@@ -128,7 +128,7 @@
 		assertTrue("unexpected bundle resolution state", bundle_4.isResolved());
 	} // end method
 
-	
+
 	public BundleDescription create_bundle_1(StateObjectFactory sof) {
 		java.util.Dictionary dictionary_1 = new java.util.Properties();
 		BundleDescription bundle = null;
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestRFC79_005.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestRFC79_005.java
index e8bd44a..8a5bbad 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestRFC79_005.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestRFC79_005.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -30,7 +30,7 @@
 	BundleDescription bundle_2 = null;
 	BundleDescription bundle_3 = null;
 
-	
+
 	public void testTest_005() {
 		State state = buildEmptyState();
 		StateObjectFactory sof = StateObjectFactory.defaultFactory;
@@ -55,7 +55,7 @@
 		checkWiring_a();
 	} // end of method
 
-	
+
 	public void checkWiringState_1() {
 		ExportPackageDescription[] exports = bundle_1.getResolvedImports();
 		assertNotNull("export array is unexpectedly null", exports);
@@ -86,7 +86,7 @@
 
 	public void checkWiringState_3() {
 	} // end method
-	
+
 
 	public void checkWiring_a() {
 		checkWiringState_1();
@@ -94,7 +94,7 @@
 		checkWiringState_3();
 	} // end method
 
-	
+
 	public void addBundlesToState_a(State state) {
 		boolean added = false;
 		added = state.addBundle(bundle_1);
@@ -105,14 +105,14 @@
 		assertTrue("failed to add bundle ", added);
 	} // end method
 
-	
+
 	public void checkBundlesResolved_a() {
 		assertTrue("unexpected bundle resolution state", bundle_1.isResolved());
 		assertTrue("unexpected bundle resolution state", bundle_2.isResolved());
 		assertTrue("unexpected bundle resolution state", !bundle_3.isResolved());
 	} // end method
 
-	
+
 	public BundleDescription create_bundle_1(StateObjectFactory sof) {
 		java.util.Dictionary dictionary_1 = new java.util.Properties();
 		BundleDescription bundle = null;
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestRFC79_006.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestRFC79_006.java
index db80346..6b2d9b0 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestRFC79_006.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestRFC79_006.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -33,7 +33,7 @@
 	BundleDescription bundle_5 = null;
 	BundleDescription bundle_6 = null;
 
-	
+
 	public void testTest_006() {
 		State state = buildEmptyState();
 		StateObjectFactory sof = StateObjectFactory.defaultFactory;
@@ -61,7 +61,7 @@
 		checkWiring_a();
 	} // end of method
 
-	
+
 	public void checkWiringState_1() {
 		ExportPackageDescription[] exports = bundle_1.getResolvedImports();
 		assertNotNull("export array is unexpectedly null", exports);
@@ -120,7 +120,7 @@
 		checkWiringState_6();
 	} // end method
 
-	
+
 	public void addBundlesToState_a(State state) {
 		boolean added = false;
 		added = state.addBundle(bundle_1);
@@ -137,7 +137,7 @@
 		assertTrue("failed to add bundle ", added);
 	} // end method
 
-	
+
 	public void checkBundlesResolved_a() {
 		assertTrue("unexpected bundle resolution state", bundle_1.isResolved());
 		assertTrue("unexpected bundle resolution state", !bundle_2.isResolved());
@@ -147,7 +147,7 @@
 		assertTrue("unexpected bundle resolution state", bundle_6.isResolved());
 	} // end method
 
-	
+
 	public BundleDescription create_bundle_1(StateObjectFactory sof) {
 		java.util.Dictionary dictionary_1 = new java.util.Properties();
 		BundleDescription bundle = null;
@@ -232,5 +232,5 @@
 		}
 		return bundle;
 	} // end of method
-	
+
 } // end of testcase
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestRFC79_007.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestRFC79_007.java
index ee34e7d..9fe9e5a 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestRFC79_007.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestRFC79_007.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -32,7 +32,7 @@
 	BundleDescription bundle_4 = null;
 	BundleDescription bundle_5 = null;
 
-	
+
 	public void testTest_007() {
 		State state = buildEmptyState();
 		StateObjectFactory sof = StateObjectFactory.defaultFactory;
@@ -59,7 +59,7 @@
 		checkWiring_a();
 	} // end of method
 
-	
+
 	public void checkWiringState_1() {
 		ExportPackageDescription[] exports = bundle_1.getResolvedImports();
 		assertNotNull("export array is unexpectedly null", exports);
@@ -109,7 +109,7 @@
 		checkWiringState_5();
 	} // end method
 
-	
+
 	public void addBundlesToState_a(State state) {
 		boolean added = false;
 		added = state.addBundle(bundle_1);
@@ -124,7 +124,7 @@
 		assertTrue("failed to add bundle ", added);
 	} // end method
 
-	
+
 	public void checkBundlesResolved_a() {
 		assertTrue("unexpected bundle resolution state", bundle_1.isResolved());
 		assertTrue("unexpected bundle resolution state", bundle_2.isResolved());
@@ -133,7 +133,7 @@
 		assertTrue("unexpected bundle resolution state", bundle_5.isResolved());
 	} // end method
 
-	
+
 	public BundleDescription create_bundle_1(StateObjectFactory sof) {
 		java.util.Dictionary dictionary_1 = new java.util.Properties();
 		BundleDescription bundle = null;
@@ -204,5 +204,5 @@
 		}
 		return bundle;
 	} // end of method
-	
+
 } // end of testcase
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestVersion_001.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestVersion_001.java
index bf8ca3f..dad687e 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestVersion_001.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestVersion_001.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -30,7 +30,7 @@
 	BundleDescription bundle_2 = null;
 	BundleDescription bundle_3 = null;
 
-	
+
 	public void testTest_001() {
 		State state = buildEmptyState();
 		StateObjectFactory sof = StateObjectFactory.defaultFactory;
@@ -55,7 +55,7 @@
 		checkWiring_a();
 	} // end of method
 
-	
+
 	public void checkWiringState_1() {
 		ExportPackageDescription[] exports = bundle_1.getResolvedImports();
 		assertNotNull("export array is unexpectedly null", exports);
@@ -105,7 +105,7 @@
 		checkWiringState_3();
 	} // end method
 
-	
+
 	public void addBundlesToState_a(State state) {
 		boolean added = false;
 		added = state.addBundle(bundle_1);
@@ -116,14 +116,14 @@
 		assertTrue("failed to add bundle ", added);
 	} // end method
 
-	
+
 	public void checkBundlesResolved_a() {
 		assertTrue("unexpected bundle resolution state", bundle_1.isResolved());
 		assertTrue("unexpected bundle resolution state", bundle_2.isResolved());
 		assertTrue("unexpected bundle resolution state", bundle_3.isResolved());
 	} // end method
 
-	
+
 	public BundleDescription create_bundle_1(StateObjectFactory sof) {
 		java.util.Dictionary dictionary_1 = new java.util.Properties();
 		BundleDescription bundle = null;
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestVersion_002.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestVersion_002.java
index 11f3dce..1609beb 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestVersion_002.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestVersion_002.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -30,7 +30,7 @@
 	BundleDescription bundle_2 = null;
 	BundleDescription bundle_3 = null;
 
-	
+
 	public void testTest_002() {
 		State state = buildEmptyState();
 		StateObjectFactory sof = StateObjectFactory.defaultFactory;
@@ -55,7 +55,7 @@
 		checkWiring_a();
 	} // end of method
 
-	
+
 	public void checkWiringState_1() {
 		ExportPackageDescription[] exports = bundle_1.getResolvedImports();
 		assertNotNull("export array is unexpectedly null", exports);
@@ -94,7 +94,7 @@
 		checkWiringState_3();
 	} // end method
 
-	
+
 	public void addBundlesToState_a(State state) {
 		boolean added = false;
 		added = state.addBundle(bundle_1);
@@ -105,14 +105,14 @@
 		assertTrue("failed to add bundle ", added);
 	} // end method
 
-	
+
 	public void checkBundlesResolved_a() {
 		assertTrue("unexpected bundle resolution state", bundle_1.isResolved());
 		assertTrue("unexpected bundle resolution state", bundle_2.isResolved());
 		assertTrue("unexpected bundle resolution state", bundle_3.isResolved());
 	} // end method
 
-	
+
 	public BundleDescription create_bundle_1(StateObjectFactory sof) {
 		java.util.Dictionary dictionary_1 = new java.util.Properties();
 		BundleDescription bundle = null;
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestVersion_003.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestVersion_003.java
index 4640d7a..ec5f65f 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestVersion_003.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resolver/TestVersion_003.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -30,7 +30,7 @@
 	BundleDescription bundle_2 = null;
 	BundleDescription bundle_3 = null;
 
-	
+
 	public void testTest_003() {
 		State state = buildEmptyState();
 		StateObjectFactory sof = StateObjectFactory.defaultFactory;
@@ -55,7 +55,7 @@
 		checkWiring_a();
 	} // end of method
 
-	
+
 	public void checkWiringState_1() {
 		ExportPackageDescription[] exports = bundle_1.getResolvedImports();
 		assertNotNull("export array is unexpectedly null", exports);
@@ -83,7 +83,7 @@
 		checkWiringState_3();
 	} // end method
 
-	
+
 	public void addBundlesToState_a(State state) {
 		boolean added = false;
 		added = state.addBundle(bundle_1);
@@ -94,14 +94,14 @@
 		assertTrue("failed to add bundle ", added);
 	} // end method
 
-	
+
 	public void checkBundlesResolved_a() {
 		assertTrue("unexpected bundle resolution state", bundle_1.isResolved());
 		assertTrue("unexpected bundle resolution state", !bundle_2.isResolved());
 		assertTrue("unexpected bundle resolution state", bundle_3.isResolved());
 	} // end method
 
-	
+
 	public BundleDescription create_bundle_1(StateObjectFactory sof) {
 		java.util.Dictionary dictionary_1 = new java.util.Properties();
 		BundleDescription bundle = null;
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resource/AbstractResourceTest.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resource/AbstractResourceTest.java
index 53b1d78..01ea6f2 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resource/AbstractResourceTest.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resource/AbstractResourceTest.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resource/AllTests.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resource/AllTests.java
index af04fdd..4070be3 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resource/AllTests.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resource/AllTests.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resource/BasicTest.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resource/BasicTest.java
index 79e85f1..2857c0e 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resource/BasicTest.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resource/BasicTest.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resource/ResolverHookTests.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resource/ResolverHookTests.java
index a639195..128fa0f 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resource/ResolverHookTests.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/resource/ResolverHookTests.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/security/BaseSecurityTest.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/security/BaseSecurityTest.java
index a3d356d..4ea5ea5 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/security/BaseSecurityTest.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/security/BaseSecurityTest.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/security/KeyStoreTrustEngineTest.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/security/KeyStoreTrustEngineTest.java
index aea0a0f..7d37dbe 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/security/KeyStoreTrustEngineTest.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/security/KeyStoreTrustEngineTest.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/security/OSGiAPICertificateTest.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/security/OSGiAPICertificateTest.java
index 1f4122b..fa4d097 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/security/OSGiAPICertificateTest.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/security/OSGiAPICertificateTest.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -275,7 +275,7 @@
 	}
 
 	public void testAdminPermission03() {
-		// test trusted cert with exact match pattern + ! operation 
+		// test trusted cert with exact match pattern + ! operation
 		try {
 			getTrustEngine().addTrustAnchor(getTestCertificate("ca1_leafa"), "ca1_leafa"); //$NON-NLS-1$ //$NON-NLS-2$
 			Bundle testBundle = installBundle(getTestJarPath("signed")); //$NON-NLS-1$
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/security/SecurityTestSuite.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/security/SecurityTestSuite.java
index f8bc0d8..cec31c6 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/security/SecurityTestSuite.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/security/SecurityTestSuite.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/security/SignedBundleTest.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/security/SignedBundleTest.java
index fbce8b1..12ea547 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/security/SignedBundleTest.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/security/SignedBundleTest.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -31,7 +31,7 @@
 
 	/*
 	private static Test[] s_tests = {
-	// positive tests 
+	// positive tests
 	new SignedBundleTest("testSignedContent01", "unsigned", new String[] {}) {
 		public void runTest() {
 			testSignedContent01();
@@ -55,19 +55,19 @@
 	n/a		n/a		n/a		= positive, unsigned				('unsigned.jar')
 	yes		n/a		yes		= positive, 1 signer				('signed.jar','ca1_leafa')
 	yes		yes		yes		= positive, 2 signers				('multiply_signed.jar','ca1_leafa,'ca1_leafb')
-	
+
 	//negative = untrusted tests
-	no		n/a		yes		= negative, 1 signer, 1 untrusted	('signed.jar')		
+	no		n/a		yes		= negative, 1 signer, 1 untrusted	('signed.jar')
 	no		no		yes		= negative, 2 signers, 2 untrusted  ('multiply_signed.jar')
 	yes		no		yes		= negative, 2 signers, 1 untrusted	('multiply_signed.jar', 'ca1_leafa')
-	
+
 	//negative = validity tests
 	yes		n/a		no		= negative, 1 signer, 1 corrupt		('signed_with_corrupt.jar','ca1_leafa')
 	yes		yes		no		= negative, 2 signers, 2 corrupt
-	
+
 	//TODO: OSGi-specific partial signer cases
 	//TODO: TSA tests (w/TSA signer trusted, untrusted, etc)
-	//TODO: More? NESTED JARS? 		
+	//TODO: More? NESTED JARS?
 	*/
 
 	//private String jarName;
@@ -97,11 +97,11 @@
 		registerEclipseTrustEngine();
 		/*
 				TrustEngine engine = getTrustEngine();
-		
+
 				if (supportStore == null) {
 					fail("Could not open keystore with test certificates!");
 				}
-		
+
 				// get the certs from the support store and add
 				for (int i = 0; i < aliases.length; i++) {
 					Certificate cert = supportStore.getCertificate(aliases[i]);
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/securityadmin/SecurityAdminUnitTests.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/securityadmin/SecurityAdminUnitTests.java
index 447c80c..83d7aba 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/securityadmin/SecurityAdminUnitTests.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/securityadmin/SecurityAdminUnitTests.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/securityadmin/SecurityManagerTests.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/securityadmin/SecurityManagerTests.java
index 6d21765..8068ca0 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/securityadmin/SecurityManagerTests.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/securityadmin/SecurityManagerTests.java
@@ -215,7 +215,7 @@
 
 		BundleContext systemContext = equinox.getBundleContext();
 		assertNotNull("System context is null", systemContext); //$NON-NLS-1$
-		// try installing a bundle to tests bug 
+		// try installing a bundle to tests bug
 		String locationSecurityA = installer.getBundleLocation("security.a"); //$NON-NLS-1$
 		// set the security for the bundle
 		ConditionalPermissionAdmin ca = (ConditionalPermissionAdmin) systemContext.getService(systemContext.getServiceReference(ConditionalPermissionAdmin.class.getName()));
@@ -284,7 +284,7 @@
 
 		BundleContext systemContext = equinox.getBundleContext();
 		assertNotNull("System context is null", systemContext); //$NON-NLS-1$
-		// try installing a bundle to tests bug 
+		// try installing a bundle to tests bug
 		String locationLinkA = installer.getBundleLocation("test.link.a"); //$NON-NLS-1$
 		String locationLinkAClient = installer.getBundleLocation("test.link.a.client"); //$NON-NLS-1$
 
@@ -354,7 +354,7 @@
 
 		BundleContext systemContext = equinox.getBundleContext();
 		assertNotNull("System context is null", systemContext); //$NON-NLS-1$
-		// try installing a bundle to tests bug 
+		// try installing a bundle to tests bug
 		String locationLinkA = installer.getBundleLocation("test.link.a"); //$NON-NLS-1$
 		String locationLinkAClient = installer.getBundleLocation("test.link.a.client"); //$NON-NLS-1$
 
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/serviceregistry/ServiceExceptionTests.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/serviceregistry/ServiceExceptionTests.java
index b50dabb..0917cf4 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/serviceregistry/ServiceExceptionTests.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/serviceregistry/ServiceExceptionTests.java
@@ -30,7 +30,7 @@
 		// test a service factory which returns wrong object types
 		ServiceExceptionServiceFactory wrongObjectFactory = new ServiceExceptionServiceFactory("A String"); //$NON-NLS-1$
 		Hashtable props = new Hashtable();
-		props.put("name", testMethodName); //$NON-NLS-1$ 
+		props.put("name", testMethodName); //$NON-NLS-1$
 		ServiceRegistration reg = OSGiTestsActivator.getContext().registerService(Runnable.class.getName(), wrongObjectFactory, props);
 		ServiceExceptionFrameworkListener listener = new ServiceExceptionFrameworkListener(OSGiTestsActivator.getContext().getBundle(), null, ServiceException.FACTORY_ERROR);
 		OSGiTestsActivator.getContext().addFrameworkListener(listener);
@@ -68,7 +68,7 @@
 		// test a service factory which returns null objects
 		ServiceExceptionServiceFactory nullObjectFactory = new ServiceExceptionServiceFactory(null);
 		Hashtable props = new Hashtable();
-		props.put("name", testMethodName); //$NON-NLS-1$ 
+		props.put("name", testMethodName); //$NON-NLS-1$
 		ServiceRegistration reg = OSGiTestsActivator.getContext().registerService(Runnable.class.getName(), nullObjectFactory, props);
 		ServiceExceptionFrameworkListener listener = new ServiceExceptionFrameworkListener(OSGiTestsActivator.getContext().getBundle(), null, ServiceException.FACTORY_ERROR);
 		OSGiTestsActivator.getContext().addFrameworkListener(listener);
@@ -107,7 +107,7 @@
 		RuntimeException cause = new RuntimeException(testMethodName);
 		ServiceExceptionServiceFactory runtimeExceptionFactory = new ServiceExceptionServiceFactory(cause);
 		Hashtable props = new Hashtable();
-		props.put("name", testMethodName); //$NON-NLS-1$ 
+		props.put("name", testMethodName); //$NON-NLS-1$
 		ServiceRegistration reg = OSGiTestsActivator.getContext().registerService(Runnable.class.getName(), runtimeExceptionFactory, props);
 		ServiceExceptionFrameworkListener listener = new ServiceExceptionFrameworkListener(OSGiTestsActivator.getContext().getBundle(), cause, ServiceException.FACTORY_EXCEPTION);
 		OSGiTestsActivator.getContext().addFrameworkListener(listener);
@@ -146,7 +146,7 @@
 		Error cause = new Error(testMethodName);
 		ServiceExceptionServiceFactory errorFactory = new ServiceExceptionServiceFactory(cause);
 		Hashtable props = new Hashtable();
-		props.put("name", testMethodName); //$NON-NLS-1$ 
+		props.put("name", testMethodName); //$NON-NLS-1$
 		ServiceRegistration reg = OSGiTestsActivator.getContext().registerService(Runnable.class.getName(), errorFactory, props);
 		ServiceExceptionFrameworkListener listener = new ServiceExceptionFrameworkListener(OSGiTestsActivator.getContext().getBundle(), cause, ServiceException.FACTORY_EXCEPTION);
 		OSGiTestsActivator.getContext().addFrameworkListener(listener);
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/serviceregistry/ServiceRegistryTests.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/serviceregistry/ServiceRegistryTests.java
index 04940a5..0e4e0c5 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/serviceregistry/ServiceRegistryTests.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/serviceregistry/ServiceRegistryTests.java
@@ -367,7 +367,7 @@
 			}
 		};
 		Hashtable props = new Hashtable();
-		props.put("name", testMethodName); //$NON-NLS-1$ 
+		props.put("name", testMethodName); //$NON-NLS-1$
 		props.put(Constants.SERVICE_DESCRIPTION, "min value"); //$NON-NLS-1$
 		props.put(Constants.SERVICE_RANKING, Integer.valueOf(Integer.MIN_VALUE));
 		ServiceRegistration reg1 = OSGiTestsActivator.getContext().registerService(Runnable.class.getName(), runIt, props);
@@ -422,7 +422,7 @@
 			}
 		};
 		Hashtable props = new Hashtable();
-		props.put("name", testMethodName); //$NON-NLS-1$ 
+		props.put("name", testMethodName); //$NON-NLS-1$
 		props.put(Constants.SERVICE_DESCRIPTION, "min value"); //$NON-NLS-1$
 		props.put(Constants.SERVICE_RANKING, Integer.valueOf(Integer.MIN_VALUE));
 		ServiceRegistration reg1 = OSGiTestsActivator.getContext().registerService(Runnable.class.getName(), runIt, props);
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/datalocation/AllTests.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/datalocation/AllTests.java
index ce5c67d..0ac39c4 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/datalocation/AllTests.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/datalocation/AllTests.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/datalocation/BasicLocationTests.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/datalocation/BasicLocationTests.java
index a655f7c..21de7fe 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/datalocation/BasicLocationTests.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/datalocation/BasicLocationTests.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/datalocation/FileManagerTests.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/datalocation/FileManagerTests.java
index 729f1b1..d1e3cc9 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/datalocation/FileManagerTests.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/datalocation/FileManagerTests.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -153,9 +153,9 @@
 	}
 
 	/**
-	 * This tests a FM update where the a specific file is managed with a 
+	 * This tests a FM update where the a specific file is managed with a
 	 * revision number of (n) and an update is requested while there already
-	 * exists a file with revision number (n+1). FM should skip that generation 
+	 * exists a file with revision number (n+1). FM should skip that generation
 	 * number and update the database with file version set to (n+2). This test is
 	 * possible if a power loss occurs between FM rename() and FM save().
 	 */
@@ -219,7 +219,7 @@
 
 	/**
 	 * This tests that FM apis throw exceptions if FM has not yet been opened
-	 * or if FM has been closed.  
+	 * or if FM has been closed.
 	 */
 	public void testNotOpen() {
 		String permanentFile = "testNotOpen.txt";
@@ -314,10 +314,10 @@
 	 * This tests FM remove() then add().  On a remove(), the file can not be deleted as it may
 	 * be in use by another FM. Then add() the file back and see if the version number written to
 	 * is (n+1) where (n) is the version when remove() called.  This is likely if framework uses
-	 * -clean where on clean we remove the file, then on exit we add the file back.  Make sure 
+	 * -clean where on clean we remove the file, then on exit we add the file back.  Make sure
 	 * this is orderly.
-	 * 
-	 * Currently is is a known issues that remove() will never delete any old manager contents. 
+	 *
+	 * Currently is is a known issues that remove() will never delete any old manager contents.
 	 */
 	public void testRemoveThenAdd() {
 		String fileName = "testRemoveThenAdd.txt";
@@ -384,7 +384,7 @@
 	 */
 	public void testMultipleFileManagers() {
 		// This test relies on a file lock to fail if the same process already
-		// holds a file lock. This is true on Win32 but not on Linux/Mac unless using Java 6. 
+		// holds a file lock. This is true on Win32 but not on Linux/Mac unless using Java 6.
 		// So run this test for windows only.
 		String ee = System.getProperty(Constants.FRAMEWORK_EXECUTIONENVIRONMENT);
 		if (!"win32".equalsIgnoreCase(System.getProperty("osgi.os")) && ee.indexOf("JavaSE-1.6") == -1)
@@ -545,7 +545,7 @@
 			assertTrue(file3.toString(), file3.exists());
 
 			// This test relies on a file lock to fail if the same process already
-			// holds a file lock. This is true on Win32 but not on Linux/Mac unless using Java 6. 
+			// holds a file lock. This is true on Win32 but not on Linux/Mac unless using Java 6.
 			// So run this test for windows only or Java 6 or higher.
 			String ee = System.getProperty(Constants.FRAMEWORK_EXECUTIONENVIRONMENT);
 			if ("win32".equalsIgnoreCase(System.getProperty("osgi.os")) || ee.indexOf("JavaSE-1.6") != -1) {
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/datalocation/LocationAreaSessionTest.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/datalocation/LocationAreaSessionTest.java
index 7112de0..5fb03b8 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/datalocation/LocationAreaSessionTest.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/datalocation/LocationAreaSessionTest.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/datalocation/SimpleTests.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/datalocation/SimpleTests.java
index bcc898f..b3b4b85 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/datalocation/SimpleTests.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/datalocation/SimpleTests.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/datalocation/StreamManagerTests.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/datalocation/StreamManagerTests.java
index 3faa6b2..290119f 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/datalocation/StreamManagerTests.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/datalocation/StreamManagerTests.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -107,7 +107,7 @@
 	/**
 	 * This tests that FM will keep a backup version of a reliableFile and that
 	 * corrupting the reliableFile will recover the previous contents.
-	 * 
+	 *
 	 */
 	public void testReliableFile() {
 		String fileName = "testReliableFile.txt";
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/resolver/AbstractStateTest.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/resolver/AbstractStateTest.java
index b368614..1cda30d 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/resolver/AbstractStateTest.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/resolver/AbstractStateTest.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/resolver/AllTests.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/resolver/AllTests.java
index 6f32c94..3a286a6 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/resolver/AllTests.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/resolver/AllTests.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/resolver/DevModeTest.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/resolver/DevModeTest.java
index e8c914a..da3243f 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/resolver/DevModeTest.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/resolver/DevModeTest.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/resolver/DisabledInfoTest.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/resolver/DisabledInfoTest.java
index 649b60e..7372a97 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/resolver/DisabledInfoTest.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/resolver/DisabledInfoTest.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/resolver/GenericCapabilityTest.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/resolver/GenericCapabilityTest.java
index 9184508..74d36cb 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/resolver/GenericCapabilityTest.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/resolver/GenericCapabilityTest.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/resolver/NewResolverTest.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/resolver/NewResolverTest.java
index 97a1435..33c42d1 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/resolver/NewResolverTest.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/resolver/NewResolverTest.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -24,7 +24,7 @@
 	public NewResolverTest(String testName) {
 		super(testName);
 	}
-	
+
 	public static Test suite() {
 		return new TestSuite(NewResolverTest.class);
 	}
@@ -33,28 +33,28 @@
 		State state = buildEmptyState();
 		state.resolve();
 	}
-	
+
 	public void testBasicScenario1() throws BundleException {
 		State state = buildEmptyState();
-		
-		final String MAN_A = "Bundle-SymbolicName: A\n" + 
+
+		final String MAN_A = "Bundle-SymbolicName: A\n" +
 		                     "Export-Package: servlet; specification-version=2.1";
 		BundleDescription bA = state.getFactory().createBundleDescription(parseManifest(MAN_A),
 																		"org.eclipse.basic1A", 0);
 		state.addBundle(bA);
-		
-		final String MAN_B = "Bundle-SymbolicName: B\n" + 
+
+		final String MAN_B = "Bundle-SymbolicName: B\n" +
         					 "Import-Package: servlet; specification-version=2.1";
 		BundleDescription bB = state.getFactory().createBundleDescription(parseManifest(MAN_B),
 													"org.eclipse.basic1B", 1);
 		state.addBundle(bB);
 
 		state.resolve();
-		
+
 		BundleDescription b0 = state.getBundle(0);
 		assertNotNull("0.1", b0);
 		assertFullyResolved("0.2", b0);
-		
+
 		BundleDescription b1 = state.getBundle(1);
 		assertNotNull("0.3", b1);
 		assertFullyResolved("0.4", b1);
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/resolver/OSGiCapabilityTest.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/resolver/OSGiCapabilityTest.java
index c584387..e5d4f9f 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/resolver/OSGiCapabilityTest.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/resolver/OSGiCapabilityTest.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/resolver/PlatformAdminTest.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/resolver/PlatformAdminTest.java
index eb1c2d1..1e31fff 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/resolver/PlatformAdminTest.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/resolver/PlatformAdminTest.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/resolver/R4ResolverTest.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/resolver/R4ResolverTest.java
index e5473ec..97aac13 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/resolver/R4ResolverTest.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/resolver/R4ResolverTest.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/resolver/StateComparisonTest.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/resolver/StateComparisonTest.java
index d5dd596..b65390b 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/resolver/StateComparisonTest.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/resolver/StateComparisonTest.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/resolver/StateCycleTest.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/resolver/StateCycleTest.java
index c5b70f4..0c19c67 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/resolver/StateCycleTest.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/resolver/StateCycleTest.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/resolver/StateResolverTest.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/resolver/StateResolverTest.java
index 3715242..4c3fc82 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/resolver/StateResolverTest.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/resolver/StateResolverTest.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -66,7 +66,7 @@
 	 * Tests adding 3 new bundles to an already resolved state and then
 	 * resolving only one of the bundles. The result should be all 3 added
 	 * bundles being resolved.
-	 *  
+	 *
 	 */
 	public void testAdd3Resolve1() throws BundleException {
 		State state = buildInitialState();
@@ -455,7 +455,7 @@
 	 * resolving only one of the bundles. The result should be all 3 added
 	 * bundles being resolved. Then re-resolving the same bundle. The result
 	 * should be only the one bundle being resolved.
-	 *  
+	 *
 	 */
 	public void testReresolveBundle() throws BundleException {
 		State state = buildInitialState();
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/resolver/SubstitutableExportsTest.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/resolver/SubstitutableExportsTest.java
index f9a7c01..58deafa 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/resolver/SubstitutableExportsTest.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/resolver/SubstitutableExportsTest.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/resolver/VersionRangeTests.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/resolver/VersionRangeTests.java
index 3f450a5..501e6b5 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/resolver/VersionRangeTests.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/resolver/VersionRangeTests.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -43,7 +43,7 @@
 	}
 
 	public void testGreaterThan() {
-		// any version equal or greater than 1.0 is ok 
+		// any version equal or greater than 1.0 is ok
 		VersionRange lowerBound = new VersionRange("1.0.0"); //$NON-NLS-1$
 		assertTrue("1.0", !lowerBound.isIncluded(Version.parseVersion("0.9"))); //$NON-NLS-1$ //$NON-NLS-2$
 		assertTrue("1.1", lowerBound.isIncluded(Version.parseVersion("1.0"))); //$NON-NLS-1$ //$NON-NLS-2$
@@ -52,7 +52,7 @@
 	}
 
 	public void testLowerThan() {
-		// any version lower than 2.0 is ok 		
+		// any version lower than 2.0 is ok
 		VersionRange upperBound = new VersionRange("[0,2.0)"); //$NON-NLS-1$
 		assertTrue("1.0", upperBound.isIncluded(Version.parseVersion("0.0"))); //$NON-NLS-1$ //$NON-NLS-2$
 		assertTrue("1.1", upperBound.isIncluded(Version.parseVersion("0.9"))); //$NON-NLS-1$ //$NON-NLS-2$
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/resolver/XFriendsInternalResolverTest.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/resolver/XFriendsInternalResolverTest.java
index 6fcc03a..c30c484 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/resolver/XFriendsInternalResolverTest.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/services/resolver/XFriendsInternalResolverTest.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -31,7 +31,7 @@
 	/**
 	 * Tests the x-friends directive.  A bundle should not be allowed to import a package which
 	 * declares an x-friends directive and the importer is not a friend.  When a bundle requires
-	 * anther bundle which exports packages which declare an x-friends directive it should not 
+	 * anther bundle which exports packages which declare an x-friends directive it should not
 	 * have access to the packages unless the requiring bundle is a friend.
 	 * @throws BundleException
 	 */
@@ -44,7 +44,7 @@
 		manifest.put(Constants.BUNDLE_MANIFESTVERSION, "2");
 		manifest.put(Constants.BUNDLE_SYMBOLICNAME, "test.exporter");
 		manifest.put(Constants.BUNDLE_VERSION, "1.0");
-		manifest.put(Constants.EXPORT_PACKAGE, 
+		manifest.put(Constants.EXPORT_PACKAGE,
 				"test.exporter.foo1; x-friends:=\"test.importer1, test.requirer1\"," +
 				"test.exporter.foo2; x-friends:=\"test.importer2, test.requirer2\"," +
 				"test.exporter.bar1; x-friends:=\"test.importer1, test.requirer1\"," +
@@ -55,7 +55,7 @@
 		manifest.put(Constants.BUNDLE_MANIFESTVERSION, "2");
 		manifest.put(Constants.BUNDLE_SYMBOLICNAME, "test.importer1");
 		manifest.put(Constants.BUNDLE_VERSION, "1.0");
-		manifest.put(Constants.IMPORT_PACKAGE, 
+		manifest.put(Constants.IMPORT_PACKAGE,
 				"test.exporter.foo1," +
 				"test.exporter.bar1," +
 				"test.exporter.foo2; resolution:=optional," +
@@ -66,7 +66,7 @@
 		manifest.put(Constants.BUNDLE_MANIFESTVERSION, "2");
 		manifest.put(Constants.BUNDLE_SYMBOLICNAME, "test.importer2");
 		manifest.put(Constants.BUNDLE_VERSION, "1.0");
-		manifest.put(Constants.IMPORT_PACKAGE, 
+		manifest.put(Constants.IMPORT_PACKAGE,
 				"test.exporter.foo1; resolution:=optional," +
 				"test.exporter.bar1; resolution:=optional," +
 				"test.exporter.foo2," +
@@ -77,7 +77,7 @@
 		manifest.put(Constants.BUNDLE_MANIFESTVERSION, "2");
 		manifest.put(Constants.BUNDLE_SYMBOLICNAME, "test.importer3");
 		manifest.put(Constants.BUNDLE_VERSION, "1.0");
-		manifest.put(Constants.IMPORT_PACKAGE, 
+		manifest.put(Constants.IMPORT_PACKAGE,
 				"test.exporter.foo1," +
 				"test.exporter.bar1," +
 				"test.exporter.foo2; resolution:=optional," +
@@ -200,7 +200,7 @@
 		manifest.put(Constants.BUNDLE_MANIFESTVERSION, "2");
 		manifest.put(Constants.BUNDLE_SYMBOLICNAME, "test.base.exporter");
 		manifest.put(Constants.BUNDLE_VERSION, "1.0");
-		manifest.put(Constants.EXPORT_PACKAGE, 
+		manifest.put(Constants.EXPORT_PACKAGE,
 				"test.base; base.exporter=split; mandatory:=base.exporter");
 		BundleDescription baseExporter = state.getFactory().createBundleDescription(state, manifest, (String) manifest.get(Constants.BUNDLE_SYMBOLICNAME), bundleID++);
 
@@ -209,7 +209,7 @@
 		manifest.put(Constants.BUNDLE_SYMBOLICNAME, "test.base.exporter.require");
 		manifest.put(Constants.BUNDLE_VERSION, "1.0");
 		manifest.put(Constants.REQUIRE_BUNDLE, "test.base.exporter");
-		manifest.put(Constants.EXPORT_PACKAGE, 
+		manifest.put(Constants.EXPORT_PACKAGE,
 				"test.base; base.exporter.require=split; mandatory:=base.exporter.require");
 		BundleDescription baseExporterRequire = state.getFactory().createBundleDescription(state, manifest, (String) manifest.get(Constants.BUNDLE_SYMBOLICNAME), bundleID++);
 
@@ -217,7 +217,7 @@
 		manifest.put(Constants.BUNDLE_MANIFESTVERSION, "2");
 		manifest.put(Constants.BUNDLE_SYMBOLICNAME, "test.base.exporter.require2");
 		manifest.put(Constants.BUNDLE_VERSION, "1.0");
-		manifest.put(Constants.REQUIRE_BUNDLE, 
+		manifest.put(Constants.REQUIRE_BUNDLE,
 				"test.base.exporter.require");
 		manifest.put(Constants.EXPORT_PACKAGE, "test.base.exporter.require");
 		BundleDescription baseExporterRequire2 = state.getFactory().createBundleDescription(state, manifest, (String) manifest.get(Constants.BUNDLE_SYMBOLICNAME), bundleID++);
@@ -227,7 +227,7 @@
 		manifest.put(Constants.BUNDLE_MANIFESTVERSION, "2");
 		manifest.put(Constants.BUNDLE_SYMBOLICNAME, "test.base.importer");
 		manifest.put(Constants.BUNDLE_VERSION, "1.0");
-		manifest.put(Constants.REQUIRE_BUNDLE, 
+		manifest.put(Constants.REQUIRE_BUNDLE,
 				"test.base.exporter.require");
 		BundleDescription baseImporter = state.getFactory().createBundleDescription(state, manifest, (String) manifest.get(Constants.BUNDLE_SYMBOLICNAME), bundleID++);
 
@@ -332,7 +332,7 @@
 		manifest.put(Constants.BUNDLE_MANIFESTVERSION, "2");
 		manifest.put(Constants.BUNDLE_SYMBOLICNAME, "A");
 		manifest.put(Constants.BUNDLE_VERSION, "1.0");
-		manifest.put(Constants.REQUIRE_BUNDLE, "B; " + Constants.VISIBILITY_DIRECTIVE + ":=" + Constants.VISIBILITY_REEXPORT + 
+		manifest.put(Constants.REQUIRE_BUNDLE, "B; " + Constants.VISIBILITY_DIRECTIVE + ":=" + Constants.VISIBILITY_REEXPORT +
 																	",C");
 		BundleDescription a = state.getFactory().createBundleDescription(state, manifest, (String) manifest.get(Constants.BUNDLE_SYMBOLICNAME), bundleID++);
 
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/util/BidiTextProcessorTestCase.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/util/BidiTextProcessorTestCase.java
index 07dfac7..0b28ad0 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/util/BidiTextProcessorTestCase.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/util/BidiTextProcessorTestCase.java
@@ -18,7 +18,7 @@
 
 /**
  * Tests for strings that use the TextProcessor and are run in a bidi locale.
- * 
+ *
  * NOTE: Run these tests as a session test in order to have the correct
  *		 locale set.  Run class AllTests.
  */
@@ -28,7 +28,7 @@
 	protected static final char LRM = '\u200e';
 	// left to right embedding
 	protected static final char LRE = '\u202a';
-	// pop directional format	
+	// pop directional format
 	protected static final char PDF = '\u202c';
 
 	private static String PATH_1_RESULT = LRE + PATH_1 + PDF;
@@ -71,7 +71,7 @@
 	private static String OTHER_STRING_1_RESULT = LRE + "*" + "." + "java" + PDF;
 	private static String OTHER_STRING_2_RESULT = LRE + "*" + "." + "\u05d0\u05d1\u05d2" + PDF;
 	private static String OTHER_STRING_3_RESULT = LRE + "\u05d0\u05d1\u05d2 " + LRM + "=" + " \u05ea\u05e9\u05e8\u05e7\u05e6" + PDF;
-	// result strings if null delimiter is passed 
+	// result strings if null delimiter is passed
 	private static String OTHER_STRING_1_ND_RESULT = LRE + "*" + "." + "java" + PDF;
 	private static String OTHER_STRING_2_ND_RESULT = LRE + "*" + "." + "\u05d0\u05d1\u05d2" + PDF;
 	private static String OTHER_STRING_3_ND_RESULT = LRE + "\u05d0\u05d1\u05d2 " + "=" + " \u05ea\u05e9\u05e8\u05e7\u05e6" + PDF;
@@ -103,7 +103,7 @@
 
 	/**
 	 * Constructor.
-	 * 
+	 *
 	 * @param name test name
 	 */
 	public BidiTextProcessorTestCase(String name) {
@@ -148,7 +148,7 @@
 	}
 
 	/*
-	 * Test other possible uses for TextProcessor, including file associations and 
+	 * Test other possible uses for TextProcessor, including file associations and
 	 * variable assignment statements.
 	 */
 	public void testOtherStrings() {
@@ -211,7 +211,7 @@
 	}
 
 	/*
-	 * Test the result to ensure markers aren't added more than once if the 
+	 * Test the result to ensure markers aren't added more than once if the
 	 * string is processed multiple times.
 	 */
 	public void testDoubleProcessPaths() {
@@ -226,7 +226,7 @@
 	}
 
 	/*
-	 * Test the result to ensure markers aren't added more than once if the 
+	 * Test the result to ensure markers aren't added more than once if the
 	 * string is processed multiple times.
 	 */
 	public void testDoubleProcessOtherStrings() {
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/util/LatinTextProcessorTestCase.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/util/LatinTextProcessorTestCase.java
index 2e9caca..a5a0480 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/util/LatinTextProcessorTestCase.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/util/LatinTextProcessorTestCase.java
@@ -16,7 +16,7 @@
 import org.eclipse.osgi.util.TextProcessor;
 
 /**
- * Test for strings that use the TextProcessor but are not run in a bidi locale. 
+ * Test for strings that use the TextProcessor but are not run in a bidi locale.
  * Latin locales should return the same String that was passed in.
  *
  */
@@ -47,7 +47,7 @@
 
 	/**
 	 * Constructor for class.
-	 * 
+	 *
 	 * @param name test name
 	 */
 	public LatinTextProcessorTestCase(String name) {
@@ -61,14 +61,14 @@
 			verifyResult("Process string " + (i + 1), result, ALL_PATHS[i]);
 		}
 	}
-	
+
 	public void testLatinPathsDeprocess(){
 		// test all strings using process(String) method
 		for (int i = 0; i < ALL_PATHS.length; i++) {
 			String result = TextProcessor.process(ALL_PATHS[i]);
 			String resultDP = TextProcessor.deprocess(result);
 			verifyResult("Deprocess string " + (i + 1), resultDP, ALL_PATHS[i]);
-		}		
+		}
 	}
 
 	public void testLatinPathsWithNullDelimiter() {
@@ -78,7 +78,7 @@
 			verifyResult("Process string " + (i + 1), result, ALL_PATHS[i]);
 		}
 	}
-	
+
 	public void testLatinOtherStrings() {
 		// test the process(String, String) method
 		for (int i = 0; i < TEST_STAR_PATHS.length; i++) {
@@ -91,7 +91,7 @@
 			verifyResult("Equals expression " + (i + 1), result, TEST_EQUALS_PATHS[i]);
 		}
 	}
-	
+
 	public void testLatinOtherStringsDeprocess() {
 		// test the process(String, String) method
 		for (int i = 0; i < TEST_STAR_PATHS.length; i++) {
@@ -105,7 +105,7 @@
 			String resultDP = TextProcessor.deprocess(result);
 			verifyResult("Equals expression " + (i + 1), resultDP, TEST_EQUALS_PATHS[i]);
 		}
-	}	
+	}
 
 	public void testLatinOtherStringsWithNoDelimiter() {
 		for (int i = 0; i < TEST_STAR_PATHS.length; i++) {
@@ -123,17 +123,17 @@
 		verifyResult("TextProcessor.process(String) for empty string ", TextProcessor.process(""), EMPTY_STRING);
 		verifyResult("TextProcessor.process(String, String) for empty strings ", TextProcessor.process("", ""), EMPTY_STRING);
 	}
-	
+
 	public void testEmptyStringParamsDeprocess() {
 		verifyResult("TextProcessor.deprocess(String) for empty string ", TextProcessor.deprocess(""), EMPTY_STRING);
 	}
-	
+
 	public void testNullParams() {
 		assertNull("TextProcessor.process(String) for null param ", TextProcessor.process(null));
 		assertNull("TextProcessor.process(String, String) for params ", TextProcessor.process(null, null));
 	}
-	
+
 	public void testNullParamsDeprocess() {
 		assertNull("TextProcessor.deprocess(String) for null param ", TextProcessor.deprocess(null));
-	}	
+	}
 }
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/util/TextProcessorSessionTest.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/util/TextProcessorSessionTest.java
index 93fc182..e7616b5 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/util/TextProcessorSessionTest.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/util/TextProcessorSessionTest.java
@@ -21,7 +21,7 @@
 	private String lang = null;
 
 	/**
-	 * Create a session test for the given class.  
+	 * Create a session test for the given class.
 	 * @param pluginId tests plugin id
 	 * @param clazz the test class to run
 	 * @param language the language to run the tests under (the -nl parameter value)
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/util/TextProcessorTestCase.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/util/TextProcessorTestCase.java
index f0186c2..685b537 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/util/TextProcessorTestCase.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/util/TextProcessorTestCase.java
@@ -26,7 +26,7 @@
 	protected static String HEBREW_STRING_3 = "\u05e5\u05e4\u05e3";
 	protected static String HEBREW_STRING_4 = "\u05e2\u05e1\u05e0";
 	protected static String HEBREW_STRING_5 = "\u05df\u05fd\u05dd";
-	protected static String HEBREW_STRING_6 = "\u05dc\u05db\u05da";	
+	protected static String HEBREW_STRING_6 = "\u05dc\u05db\u05da";
 	protected static String HEBREW_STRING_7 = "\u05d0";
 	protected static String HEBREW_STRING_8 = "\u05e9";
 	protected static String HEBREW_STRING_9 = "\u05dc";
@@ -34,9 +34,9 @@
 	protected static String HEBREW_STRING_11 = "\u05d4";
 	protected static String HEBREW_STRING_12 = "\u05da";
 	protected static String HEBREW_STRING_13 = "\u05df";
-		
+
 	// strings to test
-	
+
 	// paths
 	protected static String PATH_1 = "d:\\test\\" + HEBREW_STRING_1 + "\\segment";
 	protected static String PATH_2 = "\\test\\" + HEBREW_STRING_1 + "\\segment";
@@ -51,7 +51,7 @@
 	protected static String PATH_11 = "\\t\\" + HEBREW_STRING_7 + "\\segment";
 	protected static String PATH_12 = "d:\\";
 	protected static String PATH_13 = "\\t";
-	
+
 	protected static String STRING_1 = "d:\\all\\english";
 	protected static String STRING_2 = "all english with neutrals (spaces) in the middle";
 	protected static String STRING_3 = "_d:all/english with leading neutral";
@@ -67,7 +67,7 @@
 	protected static String STRING_13 = "d:\\myFolder\\" + HEBREW_STRING_2 + "\\123/myfile." + HEBREW_STRING_6;
 	protected static String STRING_14 = "d:\\myFolder\\" + HEBREW_STRING_2 + "\\123myfile." + HEBREW_STRING_6;
 	protected static String STRING_15= "d:\\myFolder\\" + HEBREW_STRING_2 + "12-=\\<>?34" + HEBREW_STRING_6 + ".java";
-	protected static String STRING_16 = HEBREW_STRING_2 + "/" + HEBREW_STRING_6 + "/" + HEBREW_STRING_4 + "." + HEBREW_STRING_5; 
+	protected static String STRING_16 = HEBREW_STRING_2 + "/" + HEBREW_STRING_6 + "/" + HEBREW_STRING_4 + "." + HEBREW_STRING_5;
 	protected static String STRING_17 = HEBREW_STRING_7 + "/" + HEBREW_STRING_8 + "/" + HEBREW_STRING_9 + "/" + HEBREW_STRING_10 + "/" +HEBREW_STRING_11 + "/" + HEBREW_STRING_12 + "/" + HEBREW_STRING_13;
 	protected static String STRING_18 = "_" + HEBREW_STRING_2 + " mixed text starts and ends with neutral.";
 	protected static String STRING_19 = "english and " + HEBREW_STRING_2 + " text starts with LTR ends with neutral _";
@@ -94,7 +94,7 @@
 
 	/**
 	 * Constructor for class
-	 * 
+	 *
 	 * @param name
 	 */
 	public TextProcessorTestCase(String name) {
@@ -102,7 +102,7 @@
 	}
 
 	protected void verifyResult(String testName, String expected, String result){
-		assertTrue(testName + " result string is not the same as string passed in.", result.equals(expected));		
+		assertTrue(testName + " result string is not the same as string passed in.", result.equals(expected));
 	}
-	
+
 }
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/core/runtime/adaptor/EclipseStarter.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/core/runtime/adaptor/EclipseStarter.java
index d3d81e0..7b41681 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/core/runtime/adaptor/EclipseStarter.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/core/runtime/adaptor/EclipseStarter.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Alex Blewitt (bug 172969)
@@ -53,16 +53,16 @@
 import org.osgi.util.tracker.ServiceTracker;
 
 /**
- * Special startup class for the Eclipse Platform. This class cannot be 
- * instantiated; all functionality is provided by static methods. 
+ * Special startup class for the Eclipse Platform. This class cannot be
+ * instantiated; all functionality is provided by static methods.
  * <p>
- * The Eclipse Platform makes heavy use of Java class loaders for loading 
+ * The Eclipse Platform makes heavy use of Java class loaders for loading
  * plug-ins. Even the Eclipse Runtime itself and the OSGi framework need
- * to be loaded by special class loaders. The upshot is that a 
- * client program (such as a Java main program, a servlet) cannot  
- * reference any part of Eclipse directly. Instead, a client must use this 
- * loader class to start the platform, invoking functionality defined 
- * in plug-ins, and shutting down the platform when done. 
+ * to be loaded by special class loaders. The upshot is that a
+ * client program (such as a Java main program, a servlet) cannot
+ * reference any part of Eclipse directly. Instead, a client must use this
+ * loader class to start the platform, invoking functionality defined
+ * in plug-ins, and shutting down the platform when done.
  * </p>
  * <p>Note that the fields on this class are not API. </p>
  * @since 3.0
@@ -89,12 +89,12 @@
 	private static final String ARCH = "-arch"; //$NON-NLS-1$
 	private static final String NL = "-nl"; //$NON-NLS-1$
 	private static final String NL_EXTENSIONS = "-nlExtensions"; //$NON-NLS-1$
-	private static final String CONFIGURATION = "-configuration"; //$NON-NLS-1$	
+	private static final String CONFIGURATION = "-configuration"; //$NON-NLS-1$
 	private static final String USER = "-user"; //$NON-NLS-1$
 	private static final String NOEXIT = "-noExit"; //$NON-NLS-1$
 	private static final String LAUNCHER = "-launcher"; //$NON-NLS-1$
 
-	// this is more of an Eclipse argument but this OSGi implementation stores its 
+	// this is more of an Eclipse argument but this OSGi implementation stores its
 	// metadata alongside Eclipse's.
 	private static final String DATA = "-data"; //$NON-NLS-1$
 
@@ -232,13 +232,13 @@
 
 	/**
 	 * Launches the platform and runs a single application. The application is either identified
-	 * in the given arguments (e.g., -application &lt;app id&gt;) or in the <code>eclipse.application</code> 
-	 * System property.  This convenience method starts 
-	 * up the platform, runs the indicated application, and then shuts down the 
-	 * platform. The platform must not be running already. 
-	 * 
+	 * in the given arguments (e.g., -application &lt;app id&gt;) or in the <code>eclipse.application</code>
+	 * System property.  This convenience method starts
+	 * up the platform, runs the indicated application, and then shuts down the
+	 * platform. The platform must not be running already.
+	 *
 	 * @param args the command line-style arguments used to configure the platform
-	 * @param endSplashHandler the block of code to run to tear down the splash 
+	 * @param endSplashHandler the block of code to run to tear down the splash
 	 * 	screen or <code>null</code> if no tear down is required
 	 * @return the result of running the application
 	 * @throws Exception if anything goes wrong
@@ -300,7 +300,7 @@
 	/**
 	 * Starts the platform and sets it up to run a single application. The application is either identified
 	 * in the given arguments (e.g., -application &lt;app id&gt;) or in the <code>eclipse.application</code>
-	 * System property.  The platform must not be running already. 
+	 * System property.  The platform must not be running already.
 	 * <p>
 	 * The given runnable (if not <code>null</code>) is used to tear down the splash screen if required.
 	 * </p>
@@ -371,8 +371,8 @@
 	}
 
 	/**
-	 * Runs the application for which the platform was started. The platform 
-	 * must be running. 
+	 * Runs the application for which the platform was started. The platform
+	 * must be running.
 	 * <p>
 	 * The given argument is passed to the application being run.  If it is <code>null</code>
 	 * then the command line arguments used in starting the platform, and not consumed
@@ -395,8 +395,8 @@
 				// create the ApplicationLauncher and register it as a service
 				appLauncher = new EclipseAppLauncher(context, Boolean.parseBoolean(getProperty(PROP_ALLOW_APPRELAUNCH)), launchDefault, log, equinoxConfig);
 				appLauncherRegistration = context.registerService(ApplicationLauncher.class.getName(), appLauncher, null);
-				// must start the launcher AFTER service restration because this method 
-				// blocks and runs the application on the current thread.  This method 
+				// must start the launcher AFTER service restration because this method
+				// blocks and runs the application on the current thread.  This method
 				// will return only after the application has stopped.
 				return appLauncher.start(argument);
 			}
@@ -415,19 +415,19 @@
 	}
 
 	/**
-	 * Shuts down the Platform. The state of the Platform is not automatically 
-	 * saved before shutting down. 
+	 * Shuts down the Platform. The state of the Platform is not automatically
+	 * saved before shutting down.
 	 * <p>
-	 * On return, the Platform will no longer be running (but could be re-launched 
+	 * On return, the Platform will no longer be running (but could be re-launched
 	 * with another call to startup). If relaunching, care must be taken to reinitialize
 	 * any System properties which the platform uses (e.g., osgi.instance.area) as
-	 * some policies in the platform do not allow resetting of such properties on 
+	 * some policies in the platform do not allow resetting of such properties on
 	 * subsequent runs.
 	 * </p><p>
-	 * Any objects handed out by running Platform, 
-	 * including Platform runnables obtained via getRunnable, will be 
-	 * permanently invalid. The effects of attempting to invoke methods 
-	 * on invalid objects is undefined. 
+	 * Any objects handed out by running Platform,
+	 * including Platform runnables obtained via getRunnable, will be
+	 * permanently invalid. The effects of attempting to invoke methods
+	 * on invalid objects is undefined.
 	 * </p>
 	 * @throws Exception if anything goes wrong
 	 */
@@ -516,8 +516,8 @@
 			url = createURL(new File(parent).toURL(), name);
 		} catch (MalformedURLException e) {
 			// TODO this is legacy support for non-URL names.  It should be removed eventually.
-			// if name was not a URL then construct one.  
-			// Assume it should be a reference and that it is relative.  This support need not 
+			// if name was not a URL then construct one.
+			// Assume it should be a reference and that it is relative.  This support need not
 			// be robust as it is temporary..
 			File child = new File(name);
 			fileLocation = child.isAbsolute() ? child : new File(parent, name);
@@ -543,7 +543,7 @@
 			if (!fileLocation.isAbsolute())
 				fileLocation = new File(parent, fileLocation.toString());
 		}
-		// If the result is a reference then search for the real result and 
+		// If the result is a reference then search for the real result and
 		// reconstruct the answer.
 		if (reference) {
 			String result = searchFor(fileLocation.getName(), new File(fileLocation.getParent()).getAbsolutePath());
@@ -553,7 +553,7 @@
 				return null;
 		}
 
-		// finally we have something worth trying	
+		// finally we have something worth trying
 		try {
 			URLConnection result = LocationHelper.getConnection(url);
 			result.connect();
@@ -567,7 +567,7 @@
 
 	/*
 	 * Ensure all basic bundles are installed, resolved and scheduled to start. Returns an array containing
-	 * all basic bundles that are marked to start. 
+	 * all basic bundles that are marked to start.
 	 * Returns null if the framework has been shutdown as a result of refreshPackages
 	 */
 	private static Bundle[] loadBasicBundles() throws InterruptedException {
@@ -586,7 +586,7 @@
 
 		// list of bundles to be refreshed
 		List<Bundle> toRefresh = new ArrayList<>(curInitBundles.length);
-		// uninstall any of the currently installed bundles that do not exist in the 
+		// uninstall any of the currently installed bundles that do not exist in the
 		// initial bundle list from installEntries.
 		uninstallBundles(curInitBundles, initialBundles, toRefresh);
 
@@ -705,7 +705,7 @@
 			// check for args without parameters (i.e., a flag arg)
 
 			// check if debug should be enabled for the entire platform
-			// If this is the last arg or there is a following arg (i.e., arg+1 has a leading -), 
+			// If this is the last arg or there is a following arg (i.e., arg+1 has a leading -),
 			// simply enable debug.  Otherwise, assume that that the following arg is
 			// actually the filename of an options file.  This will be processed below.
 			if (args[i].equalsIgnoreCase(DEBUG) && ((i + 1 == args.length) || ((i + 1 < args.length) && (args[i + 1].startsWith("-"))))) { //$NON-NLS-1$
@@ -715,7 +715,7 @@
 			}
 
 			// check if development mode should be enabled for the entire platform
-			// If this is the last arg or there is a following arg (i.e., arg+1 has a leading -), 
+			// If this is the last arg or there is a following arg (i.e., arg+1 has a leading -),
 			// simply enable development mode.  Otherwise, assume that that the following arg is
 			// actually some additional development time class path entries.  This will be processed below.
 			if (args[i].equalsIgnoreCase(DEV) && ((i + 1 == args.length) || ((i + 1 < args.length) && (args[i + 1].startsWith("-"))))) { //$NON-NLS-1$
@@ -741,7 +741,7 @@
 				found = true;
 			}
 
-			// look for the console with no port.  
+			// look for the console with no port.
 			if (args[i].equalsIgnoreCase(CONSOLE) && ((i + 1 == args.length) || ((i + 1 < args.length) && (args[i + 1].startsWith("-"))))) { //$NON-NLS-1$
 				setProperty(PROP_CONSOLE, ""); //$NON-NLS-1$
 				found = true;
@@ -763,25 +763,25 @@
 			}
 			String arg = args[++i];
 
-			// look for the console and port.  
+			// look for the console and port.
 			if (args[i - 1].equalsIgnoreCase(CONSOLE)) {
 				setProperty(PROP_CONSOLE, arg);
 				found = true;
 			}
 
-			// look for the configuration location .  
+			// look for the configuration location .
 			if (args[i - 1].equalsIgnoreCase(CONFIGURATION)) {
 				setProperty(EquinoxLocations.PROP_CONFIG_AREA, arg);
 				found = true;
 			}
 
-			// look for the data location for this instance.  
+			// look for the data location for this instance.
 			if (args[i - 1].equalsIgnoreCase(DATA)) {
 				setProperty(EquinoxLocations.PROP_INSTANCE_AREA, arg);
 				found = true;
 			}
 
-			// look for the user location for this instance.  
+			// look for the user location for this instance.
 			if (args[i - 1].equalsIgnoreCase(USER)) {
 				setProperty(EquinoxLocations.PROP_USER_AREA, arg);
 				found = true;
@@ -792,20 +792,20 @@
 				setProperty(EquinoxLocations.PROP_LAUNCHER, arg);
 				found = true;
 			}
-			// look for the development mode and class path entries.  
+			// look for the development mode and class path entries.
 			if (args[i - 1].equalsIgnoreCase(DEV)) {
 				setProperty(PROP_DEV, arg);
 				found = true;
 			}
 
-			// look for the debug mode and option file location.  
+			// look for the debug mode and option file location.
 			if (args[i - 1].equalsIgnoreCase(DEBUG)) {
 				setProperty(PROP_DEBUG, arg);
 				debug = true;
 				found = true;
 			}
 
-			// look for the window system.  
+			// look for the window system.
 			if (args[i - 1].equalsIgnoreCase(WS)) {
 				setProperty(PROP_WS, arg);
 				found = true;
@@ -835,7 +835,7 @@
 				found = true;
 			}
 
-			// done checking for args.  Remember where an arg was found 
+			// done checking for args.  Remember where an arg was found
 			if (found) {
 				configArgs[configArgIndex++] = i - 1;
 				configArgs[configArgIndex++] = i;
@@ -865,7 +865,7 @@
 
 	/**
 	 * Returns the result of converting a list of comma-separated tokens into an array
-	 * 
+	 *
 	 * @return the array of string tokens
 	 * @param prop the initial comma-separated string
 	 */
@@ -1076,7 +1076,7 @@
 	/**
 	 * Returns a URL which is equivalent to the given URL relative to the
 	 * specified base URL. Works only for file: URLs
-	 * @throws MalformedURLException 
+	 * @throws MalformedURLException
 	 */
 	private static URL makeRelative(URL base, URL location) throws MalformedURLException {
 		if (base == null)
@@ -1090,7 +1090,7 @@
 		if (!base.getProtocol().equals(nonReferenceLocation.getProtocol()))
 			return location;
 		File locationPath = new File(nonReferenceLocation.getPath());
-		// if location is not absolute, return original location 
+		// if location is not absolute, return original location
 		if (!locationPath.isAbsolute())
 			return location;
 		File relativePath = makeRelative(new File(base.getPath()), locationPath);
@@ -1098,9 +1098,9 @@
 		if (File.separatorChar != '/')
 			urlPath = urlPath.replace(File.separatorChar, '/');
 		if (nonReferenceLocation.getPath().endsWith("/")) //$NON-NLS-1$
-			// restore original trailing slash 
+			// restore original trailing slash
 			urlPath += '/';
-		// couldn't use File to create URL here because it prepends the path with user.dir 
+		// couldn't use File to create URL here because it prepends the path with user.dir
 		URL relativeURL = createURL(base.getProtocol(), base.getHost(), base.getPort(), urlPath);
 		// now make it back to a reference URL
 		relativeURL = createURL(REFERENCE_SCHEME + relativeURL.toExternalForm());
@@ -1205,9 +1205,9 @@
 
 	/**
 	 * Searches for the given target directory immediately under
-	 * the given start location.  If one is found then this location is returned; 
+	 * the given start location.  If one is found then this location is returned;
 	 * otherwise an exception is thrown.
-	 * 
+	 *
 	 * @return the location where target directory was found
 	 * @param start the location to begin searching
 	 */
@@ -1239,7 +1239,7 @@
 					continue;
 			}
 			// Note: directory with version suffix is always > than directory without version suffix
-			String version = candidateName.length() > target.length() + 1 && (versionSep == '_' || versionSep == '-') ? candidateName.substring(target.length() + 1) : ""; //$NON-NLS-1$ 
+			String version = candidateName.length() > target.length() + 1 && (versionSep == '_' || versionSep == '-') ? candidateName.substring(target.length() + 1) : ""; //$NON-NLS-1$
 			Object[] currentVersion = getVersionElements(version);
 			if (currentVersion != null && compareVersion(maxVersion, currentVersion) < 0) {
 				File candidate = new File(start, candidateName);
@@ -1263,7 +1263,7 @@
 	 * with suitable defaults.
 	 * @return an array of size 4; first three elements are of type Integer (representing
 	 * major, minor and service) and the fourth element is of type String (representing
-	 * qualifier).  A value of null is returned if there are no valid Integers.  Note, that 
+	 * qualifier).  A value of null is returned if there are no valid Integers.  Note, that
 	 * returning anything else will cause exceptions in the caller.
 	 */
 	private static Object[] getVersionElements(String version) {
@@ -1291,7 +1291,7 @@
 	}
 
 	/**
-	 * Compares version strings. 
+	 * Compares version strings.
 	 * @return result of comparison, as integer;
 	 * <code><0</code> if left < right;
 	 * <code>0</code> if left == right;
@@ -1330,12 +1330,12 @@
 	}
 
 	/**
-	 * Sets the initial properties for the platform.  
-	 * This method must be called before calling the {@link  #run(String[], Runnable)} or 
-	 * {@link #startup(String[], Runnable)} methods for the properties to be used in 
-	 * a launched instance of the platform.  
+	 * Sets the initial properties for the platform.
+	 * This method must be called before calling the {@link  #run(String[], Runnable)} or
+	 * {@link #startup(String[], Runnable)} methods for the properties to be used in
+	 * a launched instance of the platform.
 	 * <p>
-	 * If the specified properties contains a null value then the key for that value 
+	 * If the specified properties contains a null value then the key for that value
 	 * will be cleared from the properties of the platform.
 	 * </p>
 	 * @param initialProperties the initial properties to set for the platform.
@@ -1353,7 +1353,7 @@
 	}
 
 	/**
-	 * Returns the context of the system bundle.  A value of 
+	 * Returns the context of the system bundle.  A value of
 	 * <code>null</code> is returned if the platform is not running.
 	 * @return the context of the system bundle
 	 * @throws java.lang.SecurityException If the caller does not have the
@@ -1373,15 +1373,15 @@
 	/*
 	 * NOTE: This is an internal/experimental method used by launchers that need to react when the framework
 	 * is shutdown internally.
-	 * 
+	 *
 	 * Adds a framework shutdown handler. <p>
 	 * A handler implements the {@link Runnable} interface.  When the framework is shutdown
-	 * the {@link Runnable#run()} method is called for each registered handler.  Handlers should 
-	 * make no assumptions on the thread it is being called from.  If a handler object is 
+	 * the {@link Runnable#run()} method is called for each registered handler.  Handlers should
+	 * make no assumptions on the thread it is being called from.  If a handler object is
 	 * registered multiple times it will be called once for each registration.
 	 * <p>
-	 * At the time a handler is called the framework is shutdown.  Handlers must not depend on 
-	 * a running framework to execute or attempt to load additional classes from bundles 
+	 * At the time a handler is called the framework is shutdown.  Handlers must not depend on
+	 * a running framework to execute or attempt to load additional classes from bundles
 	 * installed in the framework.
 	 * @param handler the framework shutdown handler
 	 * @throws IllegalStateException if the platform is already running
@@ -1399,7 +1399,7 @@
 	/*
 	 * NOTE: This is an internal/experimental method used by launchers that need to react when the framework
 	 * is shutdown internally.
-	 * 
+	 *
 	 * Removes a framework shutdown handler. <p>
 	 * @param handler the framework shutdown handler
 	 * @throws IllegalStateException if the platform is already running
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/core/runtime/internal/adaptor/ConsoleManager.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/core/runtime/internal/adaptor/ConsoleManager.java
index e7055df..ef4a320 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/core/runtime/internal/adaptor/ConsoleManager.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/core/runtime/internal/adaptor/ConsoleManager.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/core/runtime/internal/adaptor/DefaultStartupMonitor.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/core/runtime/internal/adaptor/DefaultStartupMonitor.java
index 583ddd5..bad1d89 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/core/runtime/internal/adaptor/DefaultStartupMonitor.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/core/runtime/internal/adaptor/DefaultStartupMonitor.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     Andrew Niefer - IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -28,7 +28,7 @@
 	/**
 	 * Create a new startup monitor using the given splash handler.  The splash handle must
 	 * have an updateSplash method.
-	 * 
+	 *
 	 * @param splashHandler
 	 * @throws IllegalStateException
 	 */
@@ -42,7 +42,7 @@
 			//TODO maybe we could do something else in the update method in this case, like print something to the console?
 			throw new IllegalStateException(e.getMessage(), e);
 		}
-    
+
 	}
 
 	/* (non-Javadoc)
@@ -64,7 +64,7 @@
 	@Override
 	public void applicationRunning() {
 		if (EclipseStarter.debug) {
-			String timeString = equinoxConfig.getConfiguration("eclipse.startTime"); //$NON-NLS-1$ 
+			String timeString = equinoxConfig.getConfiguration("eclipse.startTime"); //$NON-NLS-1$
 			long time = timeString == null ? 0L : Long.parseLong(timeString);
 			Debug.println("Application started in : " + (System.currentTimeMillis() - time) + "ms"); //$NON-NLS-1$ //$NON-NLS-2$
 		}
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/core/runtime/internal/adaptor/EclipseAppLauncher.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/core/runtime/internal/adaptor/EclipseAppLauncher.java
index ffc771c..fef62df 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/core/runtime/internal/adaptor/EclipseAppLauncher.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/core/runtime/internal/adaptor/EclipseAppLauncher.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -71,7 +71,7 @@
 
 	/*
 	 * Starts this application launcher on the current thread.  This method
-	 * should be called by the main thread to ensure that applications are 
+	 * should be called by the main thread to ensure that applications are
 	 * launched in the main thread.
 	 */
 	public Object start(Object defaultContext) throws Exception {
@@ -128,9 +128,9 @@
 			// this must happen after we have acquired an application (by acquiring waitForAppLock above).
 			runningLock.acquire();
 			if (EclipseStarter.debug) {
-				String timeString = equinoxConfig.getConfiguration("eclipse.startTime"); //$NON-NLS-1$ 
+				String timeString = equinoxConfig.getConfiguration("eclipse.startTime"); //$NON-NLS-1$
 				long time = timeString == null ? 0L : Long.parseLong(timeString);
-				Debug.println("Starting application: " + (System.currentTimeMillis() - time)); //$NON-NLS-1$ 
+				Debug.println("Starting application: " + (System.currentTimeMillis() - time)); //$NON-NLS-1$
 			}
 			try {
 				// run the actual application on the current thread (main).
@@ -179,7 +179,7 @@
 
 	/*
 	 * Similar to the start method this method will restart the default method on current thread.
-	 * This method assumes that the default application was launched at least once and that an ApplicationDescriptor 
+	 * This method assumes that the default application was launched at least once and that an ApplicationDescriptor
 	 * exists that can be used to relaunch the default application.
 	 */
 	public Object reStart(Object argument) throws Exception {
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/Module.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/Module.java
index 3e38958..8f92194 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/Module.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/Module.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -44,7 +44,7 @@
 	 */
 	public static enum StartOptions {
 		/**
-		 * The module start operation is transient and the persistent 
+		 * The module start operation is transient and the persistent
 		 * autostart or activation policy setting of the module is not modified.
 		 */
 		TRANSIENT,
@@ -87,7 +87,7 @@
 	 */
 	public static enum StopOptions {
 		/**
-		 * The module stop operation is transient and the persistent 
+		 * The module stop operation is transient and the persistent
 		 * autostart setting of the module is not modified.
 		 */
 		TRANSIENT;
@@ -379,7 +379,7 @@
 	}
 
 	/**
-	 * Returns the thread that currently owns the state change lock for this module, or 
+	 * Returns the thread that currently owns the state change lock for this module, or
 	 * <code>null</code> if not owned.
 	 * @return the owner, or <code>null</code> if not owned.
 	 */
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/ModuleCapability.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/ModuleCapability.java
index fb49562..0da9f66 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/ModuleCapability.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/ModuleCapability.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/ModuleCollisionHook.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/ModuleCollisionHook.java
index ceccd8d..7f2193d 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/ModuleCollisionHook.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/ModuleCollisionHook.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -41,17 +41,17 @@
 	 * <li> {@link #INSTALLING installing} - The target is the module associated
 	 * which is performing the install operation. The
 	 * collision candidate collection contains the existing modules installed
-	 * which have a current revision with the same symbolic name and version as the 
+	 * which have a current revision with the same symbolic name and version as the
 	 * module being installed.
-	 * <li> {@link #UPDATING updating} - The target is the module being updated. 
+	 * <li> {@link #UPDATING updating} - The target is the module being updated.
 	 * The collision candidate collection contains the existing modules installed which have
-	 * a current revision with the same symbolic name and version as the content the target 
+	 * a current revision with the same symbolic name and version as the content the target
 	 * module is being updated to.
 	 * </ul>
 	 * This method can filter the collection of collision candidates by removing
 	 * potential collisions. For the specified operation to succeed, the
 	 * collection of collision candidates must be empty when this method returns.
-	 * 
+	 *
 	 * @param operationType The operation type. Must be the value of
 	 *        {@link #INSTALLING installing} or {@link #UPDATING updating}.
 	 * @param target The target module used to determine what collision
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/ModuleContainer.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/ModuleContainer.java
index c248ff4..a45fafd 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/ModuleContainer.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/ModuleContainer.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -117,7 +117,7 @@
 	final ModuleContainerAdaptor adaptor;
 
 	/**
-	 * The module resolver which implements the ResolverContext and handles calling the 
+	 * The module resolver which implements the ResolverContext and handles calling the
 	 * resolver service.
 	 */
 	private final ModuleResolver moduleResolver;
@@ -191,7 +191,7 @@
 	}
 
 	/**
-	 * Returns the module installed with the specified id, or null if no 
+	 * Returns the module installed with the specified id, or null if no
 	 * such module is installed.
 	 * @param id the id of the module
 	 * @return the module with the specified id, or null of no such module is installed.
@@ -201,7 +201,7 @@
 	}
 
 	/**
-	 * Returns the module installed with the specified location, or null if no 
+	 * Returns the module installed with the specified location, or null if no
 	 * such module is installed.
 	 * @param location the location of the module
 	 * @return the module with the specified location, or null of no such module is installed.
@@ -224,17 +224,17 @@
 
 	/**
 	 * Installs a new module using the specified location.  The specified
-	 * builder is used to create a new {@link ModuleRevision revision} 
+	 * builder is used to create a new {@link ModuleRevision revision}
 	 * which will become the {@link Module#getCurrentRevision() current}
 	 * revision of the new module.
 	 * <p>
-	 * If a module already exists with the specified location then the 
+	 * If a module already exists with the specified location then the
 	 * existing module is returned and the builder is not used.
 	 * @param origin the module performing the install, may be {@code null}.
-	 * @param location The location identifier of the module to install. 
+	 * @param location The location identifier of the module to install.
 	 * @param builder the builder used to create the revision to install.
 	 * @param revisionInfo the revision info for the new revision, may be {@code null}.
-	 * @return a new module or a existing module if one exists at the 
+	 * @return a new module or a existing module if one exists at the
 	 *     specified location.
 	 * @throws BundleException if some error occurs installing the module
 	 */
@@ -325,7 +325,7 @@
 
 	/**
 	 * Updates the specified module with a new revision.  The specified
-	 * builder is used to create a new {@link ModuleRevision revision} 
+	 * builder is used to create a new {@link ModuleRevision revision}
 	 * which will become the {@link Module#getCurrentRevision() current}
 	 * revision of the new module.
 	 * @param module the module to update
@@ -481,7 +481,7 @@
 	 * Attempts to resolve the current revisions of the specified modules.
 	 * @param triggers the modules to resolve or {@code null} to resolve all unresolved
 	 *    current revisions.
-	 * @param triggersMandatory true if the triggers must be resolved.  This will result in 
+	 * @param triggersMandatory true if the triggers must be resolved.  This will result in
 	 *   a {@link ResolutionException} if set to true and one of the triggers could not be resolved.
 	 * @see FrameworkWiring#resolveBundles(Collection)
 	 * @return A resolution report for the resolve operation
@@ -562,7 +562,7 @@
 	 * Attempts to resolve the specified dynamic package name request for the specified revision.
 	 * @param dynamicPkgName the package name to attempt a dynamic resolution for
 	 * @param revision the module revision the dynamic resolution request is for
-	 * @return the new resolution wire establishing a dynamic package resolution or null if 
+	 * @return the new resolution wire establishing a dynamic package resolution or null if
 	 * a dynamic wire could not be established.
 	 */
 	public ModuleWire resolveDynamic(String dynamicPkgName, ModuleRevision revision) {
@@ -1141,8 +1141,8 @@
 	/**
 	 * Returns the dependency closure of for the specified modules.
 	 * @param initial The initial modules for which to generate the dependency closure
-	 * @return A collection containing a snapshot of the dependency closure of the specified 
-	 *    modules, or an empty collection if there were no specified modules. 
+	 * @return A collection containing a snapshot of the dependency closure of the specified
+	 *    modules, or an empty collection if there were no specified modules.
 	 */
 	public Collection<Module> getDependencyClosure(Collection<Module> initial) {
 		moduleDatabase.readLock();
@@ -1164,11 +1164,11 @@
 
 	/**
 	 * Return the active start level value of this container.
-	 * 
+	 *
 	 * If the container is in the process of changing the start level this
 	 * method must return the active start level if this differs from the
 	 * requested start level.
-	 * 
+	 *
 	 * @return The active start level value of the Framework.
 	 */
 	public int getStartLevel() {
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/ModuleContainerAdaptor.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/ModuleContainerAdaptor.java
index df8838e..5e067a8 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/ModuleContainerAdaptor.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/ModuleContainerAdaptor.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -242,7 +242,7 @@
 	}
 
 	/**
-	 * This is called when a wiring is made invalid and allows the adaptor to react 
+	 * This is called when a wiring is made invalid and allows the adaptor to react
 	 * to this.  This method is called while holding state change lock for the
 	 * module as well as for the module database.  Care must be taken not to introduce
 	 * deadlock.
@@ -256,7 +256,7 @@
 	/**
 	 * This is called if a request to refresh modules causes the system module
 	 * to be refreshed.  This causes the system module to be stopped in a back
-	 * ground thread.  This method is called before the background thread is 
+	 * ground thread.  This method is called before the background thread is
 	 * started to stop the system module.
 	 */
 	public void refreshedSystemModule() {
@@ -303,7 +303,7 @@
 	}
 
 	/**
-	 * Returns the executor used to by the 
+	 * Returns the executor used to by the
 	 * {@link ModuleContainer#getFrameworkStartLevel() FrameworkStartLevel} implementation to
 	 * start bundles that have the same start level.  This allows bundles to be
 	 * started in parallel.
@@ -319,11 +319,11 @@
 	 * call when a new module is {@link ModuleContainer#install(Module, String, ModuleRevisionBuilder, Object) installed}
 	 * into the container or when an existing module is {@link ModuleContainer#update(Module, ModuleRevisionBuilder, Object) updated}
 	 * with a new revision.  The container does not call any methods on the builder before calling this method.
-	 * @param operation The lifecycle operation event that is in progress using the supplied builder. 
+	 * @param operation The lifecycle operation event that is in progress using the supplied builder.
 	 * This will be either {@link ModuleEvent#INSTALLED installed} or {@link ModuleEvent#UPDATED updated}.
 	 * @param origin The module which originated the lifecycle operation. The origin may be {@code null} for
 	 * {@link ModuleEvent#INSTALLED installed} operations.  This is the module
-	 * passed to the {@link ModuleContainer#install(Module, String, ModuleRevisionBuilder, Object) install} or 
+	 * passed to the {@link ModuleContainer#install(Module, String, ModuleRevisionBuilder, Object) install} or
 	 * {@link ModuleContainer#update(Module, ModuleRevisionBuilder, Object) update} method.
 	 * @param builder the builder that will be used to create a new {@link ModuleRevision}.
 	 * @param revisionInfo the revision info that will be used for the new revision, may be {@code null}.
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/ModuleDatabase.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/ModuleDatabase.java
index 1b27d8d..e1af371 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/ModuleDatabase.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/ModuleDatabase.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -59,7 +59,7 @@
  * the wiring states.
  * <p>
  * <strong>Concurrent Semantics</strong><br />
- * 
+ *
  * Implementations must be thread safe.  The database allows for concurrent
  * read operations and all read operations are protected by the
  * {@link #readLock() read} lock.  All write operations are
@@ -72,7 +72,7 @@
  * to upgrade from a read to a write lock.
  * <p>
  * A database is associated with a {@link ModuleContainer container}.  The container
- * associated with a database provides public API for manipulating the modules 
+ * associated with a database provides public API for manipulating the modules
  * and their wiring states.  For example, installing, updating, uninstalling,
  * resolving and unresolving modules.  Except for the {@link #load(DataInputStream)},
  * all other methods that perform write operations are intended to be used by
@@ -481,13 +481,13 @@
 
 	/**
 	 * Returns a cloned snapshot of the wirings of all revisions.  This
-	 * performs a clone of each {@link ModuleWiring}.  The 
+	 * performs a clone of each {@link ModuleWiring}.  The
 	 * {@link ModuleWiring#getRevision() revision},
 	 * {@link ModuleWiring#getModuleCapabilities(String) capabilities},
 	 * {@link ModuleWiring#getModuleRequirements(String) requirements},
 	 * {@link ModuleWiring#getProvidedModuleWires(String) provided wires},
 	 * {@link ModuleWiring#getRequiredModuleWires(String) required wires}, and
-	 * {@link ModuleWiring#getSubstitutedNames()} of 
+	 * {@link ModuleWiring#getSubstitutedNames()} of
 	 * each wiring are copied into a cloned copy of the wiring.
 	 * <p>
 	 * The returned map of wirings may be safely read from while not holding
@@ -813,7 +813,7 @@
 
 	/**
 	 * Adds the {@link ModuleRevision#getModuleCapabilities(String) capabilities}
-	 * provided by the specified revision to this database.  These capabilities must 
+	 * provided by the specified revision to this database.  These capabilities must
 	 * become available for lookup with the {@link ModuleDatabase#findCapabilities(Requirement)}
 	 * method.
 	 * <p>
@@ -832,7 +832,7 @@
 	/**
 	 * Removes the {@link ModuleRevision#getModuleCapabilities(String) capabilities}
 	 * provided by the specified revision from this database.  These capabilities
-	 * must no longer be available for lookup with the 
+	 * must no longer be available for lookup with the
 	 * {@link ModuleDatabase#findCapabilities(Requirement)} method.
 	 * <p>
 	 * This method must be called while holding the {@link #writeLock() write} lock.
@@ -844,7 +844,7 @@
 	}
 
 	/**
-	 * Returns a mutable snapshot of capabilities that are candidates for 
+	 * Returns a mutable snapshot of capabilities that are candidates for
 	 * satisfying the specified requirement.
 	 * <p>
 	 * A read operation protected by the {@link #readLock() read} lock.
@@ -866,14 +866,14 @@
 	 * Writes this database in a format suitable for using the {@link #load(DataInputStream)}
 	 * method.  All modules are stored which have a current {@link ModuleRevision revision}.
 	 * Only the current revision of each module is stored (no removal pending revisions
-	 * are stored).  Optionally the {@link ModuleWiring wiring} of each current revision 
+	 * are stored).  Optionally the {@link ModuleWiring wiring} of each current revision
 	 * may be stored.  Wiring can only be stored if there are no {@link #getRemovalPending()
 	 * removal pending} revisions.
 	 * <p>
 	 * This method acquires the {@link #readLock() read} lock while writing this
 	 * database.
 	 * <p>
-	 * After this database have been written, the output stream is flushed.  
+	 * After this database have been written, the output stream is flushed.
 	 * The output stream remains open after this method returns.
 	 * @param out the data output steam.
 	 * @param persistWirings true if wirings should be persisted.  This option will be ignored
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/ModuleLoader.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/ModuleLoader.java
index 2377471..9e2c390 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/ModuleLoader.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/ModuleLoader.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -37,7 +37,7 @@
 	protected abstract List<URL> findEntries(String path, String filePattern, int options);
 
 	/**
-	 * 
+	 *
 	 * @param path
 	 * @param filePattern
 	 * @param options
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/ModuleRequirement.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/ModuleRequirement.java
index 4cacf4e..42f69c1 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/ModuleRequirement.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/ModuleRequirement.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -24,7 +24,7 @@
 import org.osgi.resource.Namespace;
 
 /**
- * An implementation of {@link BundleRequirement}.  This requirement implements 
+ * An implementation of {@link BundleRequirement}.  This requirement implements
  * the matches method according to the OSGi specification which includes
  * implementing the mandatory directive for the osgi.wiring.* namespaces.
  * @since 3.10
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/ModuleResolver.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/ModuleResolver.java
index 7766a670..cf8318a 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/ModuleResolver.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/ModuleResolver.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -150,11 +150,11 @@
 
 	/**
 	 * Attempts to resolve all unresolved modules installed in the specified module database.
-	 * returns a delta containing the new wirings or modified wirings that should be 
+	 * returns a delta containing the new wirings or modified wirings that should be
 	 * merged into the specified moduleDatabase.
 	 * <p>
 	 * This method only does read operations on the database no wirings are modified
-	 * directly by this method.  The returned wirings need to be merged into 
+	 * directly by this method.  The returned wirings need to be merged into
 	 * the database.
 	 * @param triggers the triggers that caused the resolver operation to occur
 	 * @param triggersMandatory true if the triggers must be resolved by the resolve process
@@ -563,12 +563,12 @@
 		private final Collection<ModuleRevision> unresolved;
 		/*
 		 * Contains unresolved revisions that should not be resolved as part of
-		 * this process. The reasons they should not be resolved will vary. For 
+		 * this process. The reasons they should not be resolved will vary. For
 		 * example, some might have been filtered out by the resolver hook while
 		 * others represent singleton collisions. It is assumed that all
 		 * unresolved revisions are disabled at the start of the resolve
 		 * process (see initialization in constructors). Any not filtered out
-		 * by ResolverHook.filterResolvable are then removed but may be added 
+		 * by ResolverHook.filterResolvable are then removed but may be added
 		 * back later for other reasons.
 		 */
 		private final Collection<ModuleRevision> disabled;
@@ -589,7 +589,7 @@
 		private AtomicReference<ScheduledFuture<?>> timoutFuture = new AtomicReference<>();
 		/*
 		 * Used to generate the UNRESOLVED_PROVIDER resolution report entries.
-		 * 
+		 *
 		 * The inner map associates a requirement to the set of all matching
 		 * capabilities that were found. The outer map associates the requiring
 		 * resource to the inner map so that its contents may easily be looked
@@ -973,7 +973,7 @@
 						Map<Resource, List<Wire>> dynamicAttachWirings = resolveNonPayLoadFragments();
 						applyInterimResultToWiringCopy(dynamicAttachWirings);
 						if (!dynamicAttachWirings.isEmpty()) {
-							// be sure to remove the revisions from the optional and triggers 
+							// be sure to remove the revisions from the optional and triggers
 							// so they no longer attempt to be resolved
 							Set<Resource> fragmentResources = dynamicAttachWirings.keySet();
 							triggers.removeAll(fragmentResources);
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/ModuleRevision.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/ModuleRevision.java
index 2239908..b7261b4 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/ModuleRevision.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/ModuleRevision.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -119,8 +119,8 @@
 
 	/**
 	 * Returns the capabilities declared by this revision
-	 * @param namespace The namespace of the declared capabilities to return or 
-	 * {@code null} to return the declared capabilities from all namespaces. 
+	 * @param namespace The namespace of the declared capabilities to return or
+	 * {@code null} to return the declared capabilities from all namespaces.
 	 * @return An unmodifiable list containing the declared capabilities.
 	 */
 	public List<ModuleCapability> getModuleCapabilities(String namespace) {
@@ -137,8 +137,8 @@
 
 	/**
 	 * Returns the requirements declared by this revision
-	 * @param namespace The namespace of the declared requirements to return or 
-	 * {@code null} to return the declared requirements from all namespaces. 
+	 * @param namespace The namespace of the declared requirements to return or
+	 * {@code null} to return the declared requirements from all namespaces.
 	 * @return An unmodifiable list containing the declared requirements.
 	 */
 	public List<ModuleRequirement> getModuleRequirements(String namespace) {
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/ModuleRevisionBuilder.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/ModuleRevisionBuilder.java
index a3b5e4b..ca895ae 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/ModuleRevisionBuilder.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/ModuleRevisionBuilder.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -32,9 +32,9 @@
 import org.osgi.resource.Namespace;
 
 /**
- * A builder for creating module {@link ModuleRevision} objects.  A builder can only be used by 
- * the module {@link ModuleContainer container} to build revisions when 
- * {@link ModuleContainer#install(Module, String, ModuleRevisionBuilder, Object) 
+ * A builder for creating module {@link ModuleRevision} objects.  A builder can only be used by
+ * the module {@link ModuleContainer container} to build revisions when
+ * {@link ModuleContainer#install(Module, String, ModuleRevisionBuilder, Object)
  * installing} or {@link ModuleContainer#update(Module, ModuleRevisionBuilder, Object) updating} a module.
  * <p>
  * The builder provides the instructions to the container for creating a {@link ModuleRevision}.
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/ModuleRevisions.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/ModuleRevisions.java
index 00af04e..2570138 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/ModuleRevisions.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/ModuleRevisions.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -20,10 +20,10 @@
 import org.osgi.framework.wiring.BundleRevisions;
 
 /**
- * An implementation of {@link BundleRevisions} which represent a 
+ * An implementation of {@link BundleRevisions} which represent a
  * {@link Module} installed in a {@link ModuleContainer container}.
- * The ModuleRevisions provides a bridge between the revisions, the 
- * module and the container they are associated with.  The 
+ * The ModuleRevisions provides a bridge between the revisions, the
+ * module and the container they are associated with.  The
  * ModuleRevisions holds the information about the installation of
  * a module in a container such as the module id and location.
  * @since 3.10
@@ -77,7 +77,7 @@
 
 	/**
 	 * Returns the current {@link ModuleRevision revision} associated with this revisions.
-	 * 
+	 *
 	 * @return the current {@link ModuleRevision revision} associated with this revisions
 	 *     or {@code null} if the current revision does not exist.
 	 */
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/ModuleWire.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/ModuleWire.java
index 1de66ab..8fa836b 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/ModuleWire.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/ModuleWire.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/ModuleWiring.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/ModuleWiring.java
index 5d72c4f..7f21644 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/ModuleWiring.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/ModuleWiring.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -261,7 +261,7 @@
 	}
 
 	/**
-	 * Returns the module loader for this wiring.  If the module 
+	 * Returns the module loader for this wiring.  If the module
 	 * loader does not exist yet then one will be created
 	 * @return the module loader for this wiring.
 	 */
@@ -384,7 +384,7 @@
 	}
 
 	/**
-	 * Returns an unmodifiable collection of package names for 
+	 * Returns an unmodifiable collection of package names for
 	 * package capabilities that have been substituted.
 	 * @return the substituted package names
 	 */
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/SystemModule.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/SystemModule.java
index e7e8426..31f9e80 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/SystemModule.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/SystemModule.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -179,7 +179,7 @@
 	}
 
 	/**
-	 * @throws BundleException  
+	 * @throws BundleException
 	 */
 	protected void initWorker() throws BundleException {
 		// Do nothing
@@ -197,7 +197,7 @@
 	@Override
 	public void stop(StopOptions... options) throws BundleException {
 		ContainerEvent containerEvent = ContainerEvent.STOPPED_TIMEOUT;
-		// Need to lock the state change lock with no state to prevent 
+		// Need to lock the state change lock with no state to prevent
 		// other threads from starting the framework while we are shutting down
 		try {
 			if (stateChangeLock.tryLock(10, TimeUnit.SECONDS)) {
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/builders/OSGiManifestBuilderFactory.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/builders/OSGiManifestBuilderFactory.java
index adcce44..6748504 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/builders/OSGiManifestBuilderFactory.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/builders/OSGiManifestBuilderFactory.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/namespaces/EclipsePlatformNamespace.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/namespaces/EclipsePlatformNamespace.java
index 3be5157..9376db0 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/namespaces/EclipsePlatformNamespace.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/namespaces/EclipsePlatformNamespace.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -17,14 +17,14 @@
 
 /**
  * Eclipse Platform and Requirement Namespace.
- * 
+ *
  * <p>
  * This class defines the names for the attributes and directives for this
  * namespace. All unspecified capability attributes are of type {@code String}
  * and are used as arbitrary matching attributes for the capability. The values
  * associated with the specified directive and attribute keys are of type
  * {@code String}, unless otherwise indicated.
- * 
+ *
  * @Immutable
  * @noinstantiate This class is not intended to be instantiated by clients.
  * @since 3.10
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/namespaces/EquinoxFragmentNamespace.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/namespaces/EquinoxFragmentNamespace.java
index 96aeba1..ef050fc 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/namespaces/EquinoxFragmentNamespace.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/namespaces/EquinoxFragmentNamespace.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -17,14 +17,14 @@
 
 /**
  * Equinox Namespace for fragment capabilities.
- * 
+ *
  * <p>
  * This class defines the names for the attributes and directives for this
  * namespace. All unspecified capability attributes are of type {@code String}
  * and are used as arbitrary matching attributes for the capability. The values
  * associated with the specified directive and attribute keys are of type
  * {@code String}, unless otherwise indicated.
- * 
+ *
  * @Immutable
  * @noinstantiate This class is not intended to be instantiated by clients.
  * @since 3.10
@@ -34,7 +34,7 @@
 	/**
 	/**
 	 * Namespace name for fragment capabilities and requirements.
-	 * 
+	 *
 	 * <p>
 	 * Also, the capability attribute used to specify the symbolic name of the host the
 	 * resource is providing a fragment for.
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/namespaces/EquinoxModuleDataNamespace.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/namespaces/EquinoxModuleDataNamespace.java
index 35f6c2a..bd51bc8 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/namespaces/EquinoxModuleDataNamespace.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/container/namespaces/EquinoxModuleDataNamespace.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -28,14 +28,14 @@
  *       header.</li>
  *   <li>The bundle class loading policy.
  * </ul>
- * 
- * This capability is provided for informational purposes and 
+ *
+ * This capability is provided for informational purposes and
  * should not be considered as effective by the resolver.
  * <p>
  * This class defines the names for the attributes and directives for this
  * namespace.  Capabilities in this namespace are not intended to be used to
  * match requirements and should not be considered as effective by a resolver.
- * 
+ *
  * @Immutable
  * @noinstantiate This class is not intended to be instantiated by clients.
  * @since 3.10
@@ -59,8 +59,8 @@
 	/** An Eclipse-LazyStart header attribute used to specify exception classes for auto start */
 	public static final String LAZYSTART_EXCEPTIONS_ATTRIBUTE = "exceptions"; //$NON-NLS-1$
 
-	/** 
-	 * The Equinox specific header for specifying the lazy start policy 
+	/**
+	 * The Equinox specific header for specifying the lazy start policy
 	 * @deprecated use {@link #LAZYSTART_HEADER}
 	 */
 	public static final String AUTOSTART_HEADER = "Eclipse-AutoStart"; //$NON-NLS-1$
@@ -75,7 +75,7 @@
 	 * The directive value identifying a {@link #CAPABILITY_EFFECTIVE_DIRECTIVE
 	 * capability} that is effective for information purposes.  Capabilities
 	 * in this namespace must have an effective directive value of information.
-	 * 
+	 *
 	 * @see #CAPABILITY_EFFECTIVE_DIRECTIVE
 	 */
 	public final static String EFFECTIVE_INFORMATION = "information"; //$NON-NLS-1$
@@ -95,19 +95,19 @@
 	public final static String CAPABILITY_ACTIVATION_POLICY_LAZY = "lazy"; //$NON-NLS-1$
 
 	/**
-	 * When the {@link #CAPABILITY_ACTIVATION_POLICY_LAZY lazy} policy is used this 
+	 * When the {@link #CAPABILITY_ACTIVATION_POLICY_LAZY lazy} policy is used this
 	 * attribute contains the package names that must
 	 * trigger the activation when a class is loaded of these packages.
-	 * If the attribute is not defined then the default is all package names. 
+	 * If the attribute is not defined then the default is all package names.
 	 * The value of this attribute must be of type {@code List<String>}.
 	 */
 	public final static String CAPABILITY_LAZY_INCLUDE_ATTRIBUTE = "lazy.include"; //$NON-NLS-1$
 
 	/**
-	 * When the {@link #CAPABILITY_ACTIVATION_POLICY_LAZY lazy} policy is used this 
+	 * When the {@link #CAPABILITY_ACTIVATION_POLICY_LAZY lazy} policy is used this
 	 * attribute contains the package names that must not
 	 * trigger the activation when a class is loaded of these packages.
-	 * If the attribute is not defined then the default is no package names. 
+	 * If the attribute is not defined then the default is no package names.
 	 * The value of this attribute must be of type {@code List<String>}.
 	 */
 	public final static String CAPABILITY_LAZY_EXCLUDE_ATTRIBUTE = "lazy.exclude"; //$NON-NLS-1$
@@ -129,7 +129,7 @@
 
 	/**
 	 * The capability attribute contains the list buddy loading policies
-	 * for the providing module revision as specified in the Eclipse-BuddyPolicy header.  
+	 * for the providing module revision as specified in the Eclipse-BuddyPolicy header.
 	 * The value of this attribute must be of type
 	 * {@code List<String>}.
 	 */
@@ -137,7 +137,7 @@
 
 	/**
 	 * The capability attribute contains the list of symbolic names the
-	 * providing module revision is a registered buddy of as specified by 
+	 * providing module revision is a registered buddy of as specified by
 	 * the Eclipse-BuddyPolicy header.  The value of this attribute must be of type
 	 * {@code List<String>}.
 	 */
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/framework/util/CaseInsensitiveDictionaryMap.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/framework/util/CaseInsensitiveDictionaryMap.java
index 6edaf1c..a067b69 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/framework/util/CaseInsensitiveDictionaryMap.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/framework/util/CaseInsensitiveDictionaryMap.java
@@ -293,7 +293,7 @@
 	}
 
 	/**
-	 * Returns the specified key or, if the key is a String, returns 
+	 * Returns the specified key or, if the key is a String, returns
 	 * a case-insensitive wrapping of the key.
 	 *
 	 * @param key
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/framework/util/FilePath.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/framework/util/FilePath.java
index e1d5cfc..e3b5793 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/framework/util/FilePath.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/framework/util/FilePath.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -15,13 +15,13 @@
 
 import java.io.File;
 
-/** 
+/**
  * A utility class for manipulating file system paths.
  * <p>
  * This class is not intended to be subclassed by clients but
  * may be instantiated.
  * </p>
- * 
+ *
  * @since 3.1
  */
 public class FilePath {
@@ -44,7 +44,7 @@
 
 	/**
 	 * Constructs a new file path from the given File object.
-	 * 
+	 *
 	 * @param location
 	 */
 	public FilePath(File location) {
@@ -57,7 +57,7 @@
 
 	/**
 	 * Constructs a new file path from the given string path.
-	 * 
+	 *
 	 * @param original
 	 */
 	public FilePath(String original) {
@@ -85,7 +85,7 @@
 	}
 
 	/*
-	 * Splits the given path string into an array of segments. 
+	 * Splits the given path string into an array of segments.
 	 */
 	private String[] computeSegments(String path) {
 		int maxSegmentCount = computeSegmentCount(path);
@@ -96,7 +96,7 @@
 		// allways absolute
 		int firstPosition = isAbsolute() ? 1 : 0;
 		int lastPosition = hasTrailingSlash() ? len - 2 : len - 1;
-		// for non-empty paths, the number of segments is 
+		// for non-empty paths, the number of segments is
 		// the number of slashes plus 1, ignoring any leading
 		// and trailing slashes
 		int next = firstPosition;
@@ -125,10 +125,10 @@
 	}
 
 	/**
-	 * Returns the device for this file system path, or <code>null</code> if 
+	 * Returns the device for this file system path, or <code>null</code> if
 	 * none exists. The device string ends with a colon.
-	 * 
-	 * @return the device string or null 
+	 *
+	 * @return the device string or null
 	 */
 	public String getDevice() {
 		return device;
@@ -136,8 +136,8 @@
 
 	/**
 	 * Returns the segments in this path. If this path has no segments, returns an empty array.
-	 * 
-	 * @return an array containing all segments for this path 
+	 *
+	 * @return an array containing all segments for this path
 	 */
 	public String[] getSegments() {
 		return segments.clone();
@@ -145,7 +145,7 @@
 
 	/**
 	 * Returns whether this path ends with a slash.
-	 * 
+	 *
 	 * @return <code>true</code> if the path ends with a slash, false otherwise
 	 */
 	public boolean hasTrailingSlash() {
@@ -158,7 +158,7 @@
 			// only deal with devices/UNC paths on Windows
 			int deviceSeparatorPos = original.indexOf(DEVICE_SEPARATOR);
 			if (deviceSeparatorPos >= 0) {
-				//extract device if any				
+				//extract device if any
 				//remove leading slash from device part to handle output of URL.getFile()
 				int start = original.charAt(0) == SEPARATOR ? 1 : 0;
 				device = original.substring(start, deviceSeparatorPos + 1);
@@ -186,7 +186,7 @@
 
 	/**
 	 * Returns whether this path is absolute (begins with a slash).
-	 * 
+	 *
 	 * @return <code>true</code> if this path is absolute, <code>false</code> otherwise
 	 */
 	public boolean isAbsolute() {
@@ -197,11 +197,11 @@
 	 * Returns a string representing this path as a relative to the given base path.
 	 * <p>
 	 * If this path and the given path do not use the same device letter, this path's
-	 * string representation is returned as is. 
+	 * string representation is returned as is.
 	 * </p>
-	 * 
+	 *
 	 * @param base the path this path should be made relative to
-	 * @return a string representation for this path as relative to the given base path 
+	 * @return a string representation for this path as relative to the given base path
 	 */
 	public String makeRelative(FilePath base) {
 		if (base.device != null && !base.device.equalsIgnoreCase(this.device))
@@ -210,7 +210,7 @@
 		int count = this.matchingFirstSegments(base);
 		if (baseCount == count && count == base.segments.length)
 			return base.hasTrailingSlash() ? ("." + SEPARATOR) : "."; //$NON-NLS-1$ //$NON-NLS-2$
-		StringBuilder relative = new StringBuilder(); //	
+		StringBuilder relative = new StringBuilder(); //
 		for (int j = 0; j < baseCount - count; j++)
 			relative.append(PARENT_DIR + SEPARATOR);
 		for (int i = 0; i < base.segments.length - count; i++) {
@@ -222,7 +222,7 @@
 		return relative.toString();
 	}
 
-	/* 
+	/*
 	 * Returns the number of segments in this matching the first segments of the
 	 * given path.
 	 */
@@ -240,7 +240,7 @@
 
 	/**
 	 * Returns a string representation of this path.
-	 * 
+	 *
 	 * @return  a string representation of this path
 	 */
 	@Override
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/framework/util/Headers.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/framework/util/Headers.java
index 02ea3af..bc6e00a 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/framework/util/Headers.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/framework/util/Headers.java
@@ -157,8 +157,8 @@
 	 * @param key Key name.
 	 * @param value Value of the key or null to remove key.
 	 * @param replace A value of true will allow a previous
-	 * value of the key to be replaced.  A value of false 
-	 * will cause an IllegalArgumentException to be thrown 
+	 * value of the key to be replaced.  A value of false
+	 * will cause an IllegalArgumentException to be thrown
 	 * if a previous value of the key exists.
 	 * @return the previous value to which the key was mapped,
 	 * or null if the key did not have a previous mapping.
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/framework/util/KeyedElement.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/framework/util/KeyedElement.java
index 33bb142..10bc792 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/framework/util/KeyedElement.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/framework/util/KeyedElement.java
@@ -20,7 +20,7 @@
  * A keyed element can easily be put into a standard Map implementation by using the keyed element
  * key for the mapping.
  * <p>
- * An element of an <code>KeyedHashSet</code>.  A KeyedElement privides the key which is used to hash 
+ * An element of an <code>KeyedHashSet</code>.  A KeyedElement privides the key which is used to hash
  * the elements in an <code>KeyedHashSet</code>.
  * @since 3.2
  */
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/framework/util/ObjectPool.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/framework/util/ObjectPool.java
index 7d0ed38..44853f0 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/framework/util/ObjectPool.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/framework/util/ObjectPool.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/framework/util/SecureAction.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/framework/util/SecureAction.java
index 89684a9..1fc1693 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/framework/util/SecureAction.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/framework/util/SecureAction.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -41,9 +41,9 @@
 	});
 
 	/*
-	 * Package privaet constructor a new SecureAction object.  
-	 * The constructed SecureAction object uses the caller's AccessControlContext 
-	 * to perform security checks 
+	 * Package privaet constructor a new SecureAction object.
+	 * The constructed SecureAction object uses the caller's AccessControlContext
+	 * to perform security checks
 	 */
 	SecureAction() {
 		// save the control context to be used.
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/framework/util/ThreadInfoReport.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/framework/util/ThreadInfoReport.java
index 89e8e5d..405b96c 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/framework/util/ThreadInfoReport.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/framework/util/ThreadInfoReport.java
@@ -4,7 +4,7 @@
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/cds/CDSBundleEntry.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/cds/CDSBundleEntry.java
index 746af6c..1c60e02 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/cds/CDSBundleEntry.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/cds/CDSBundleEntry.java
@@ -61,7 +61,7 @@
 	 * @see org.eclipse.osgi.baseadaptor.bundlefile.BundleEntry#getFileURL()
 	 * uses the wrapped bundle file to get the actual file url to the content of
 	 * the class on disk.
-	 * 
+	 *
 	 * This should is likely never to be called.
 	 */
 	@Override
@@ -85,7 +85,7 @@
 	/*
 	 * (non-Javadoc)
 	 * @see org.eclipse.osgi.baseadaptor.bundlefile.BundleEntry#getBytes()
-	 * if classbytes is not null, it returns the magic cookie for the shared class.  This is used to define 
+	 * if classbytes is not null, it returns the magic cookie for the shared class.  This is used to define
 	 * the class during class loading.
 	 * if classbytes is null, it gets the contents from actual BundleEntry and caches it in classbytes.
 	 */
@@ -99,7 +99,7 @@
 	 * @see org.eclipse.osgi.baseadaptor.bundlefile.BundleEntry#getLocalURL()
 	 * uses the wrapped bundle file to get the actual local url to the content of
 	 * the class on disk.
-	 * 
+	 *
 	 * This should is likely never to be called.
 	 */
 	@Override
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/cds/CDSBundleFile.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/cds/CDSBundleFile.java
index 29a8dd7..beb6373 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/cds/CDSBundleFile.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/cds/CDSBundleFile.java
@@ -31,7 +31,7 @@
 
 /**
  * Wraps an actual BundleFile object for purposes of loading classes from the
- * shared classes cache. 
+ * shared classes cache.
  */
 public class CDSBundleFile extends BundleFileWrapper {
 	private final static String classFileExt = ".class"; //$NON-NLS-1$
@@ -63,10 +63,10 @@
 	/*
 	 * (non-Javadoc)
 	 * @see org.eclipse.osgi.storage.bundlefile.BundleFile#getEntry(java.lang.String)
-	 * 
-	 * If path is not for a class then just use the wrapped bundle file to answer the call. 
+	 *
+	 * If path is not for a class then just use the wrapped bundle file to answer the call.
 	 * If the path is for a class, it returns a CDSBundleEntry object.
-	 * If the path is for a class, it will look for the magic cookie in the 
+	 * If the path is for a class, it will look for the magic cookie in the
 	 * shared classes cache. If found, the bytes representing the magic cookie are stored in CDSBundleEntry object.
 	 */
 	@Override
@@ -88,7 +88,7 @@
 	}
 
 	/**
-	 * Returns the file url to the content of the actual bundle file 
+	 * Returns the file url to the content of the actual bundle file
 	 * @return the file url to the content of the actual bundle file
 	 */
 	URL getURL() {
@@ -96,7 +96,7 @@
 	}
 
 	/**
-	 * Returns the url helper for this bundle file.  This is set by the 
+	 * Returns the url helper for this bundle file.  This is set by the
 	 * class loading hook
 	 * @return the url helper for this bundle file
 	 */
@@ -105,7 +105,7 @@
 	}
 
 	/**
-	 * Sets the url helper for this bundle file.  This is called by the 
+	 * Sets the url helper for this bundle file.  This is called by the
 	 * class loading hook.
 	 * @param urlHelper the url helper
 	 */
@@ -115,8 +115,8 @@
 	}
 
 	/**
-	 * Sets the primed flag for the bundle file.  This is called by the 
-	 * class loading hook after the first class has been loaded from disk for 
+	 * Sets the primed flag for the bundle file.  This is called by the
+	 * class loading hook after the first class has been loaded from disk for
 	 * this bundle file.
 	 * @param primed the primed flag
 	 */
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/cds/CDSHookImpls.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/cds/CDSHookImpls.java
index 3f1507a..5eddeaf 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/cds/CDSHookImpls.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/cds/CDSHookImpls.java
@@ -82,7 +82,7 @@
 					modified = true;
 				}
 				if (modified) {
-					// Class bytes have been modified by weaving hooks. 
+					// Class bytes have been modified by weaving hooks.
 					// Such classes need to be stored as Orphans, so skip the call to storeSharedClass()
 					return;
 				}
@@ -169,7 +169,7 @@
 				}
 			}
 		} catch (HelperAlreadyDefinedException e) {
-			// We should never get here. 
+			// We should never get here.
 			// If we do, we simply won't share for this ClassLoader
 		}
 	}
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/container/AtomicLazyInitializer.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/container/AtomicLazyInitializer.java
index 71e45b3..071ab61 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/container/AtomicLazyInitializer.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/container/AtomicLazyInitializer.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -17,8 +17,8 @@
 import java.util.concurrent.atomic.AtomicReference;
 
 /**
- * A helper class for doing lazy initialization 
- * 
+ * A helper class for doing lazy initialization
+ *
  * @param <V> the type of object to lazy initialize
  */
 public class AtomicLazyInitializer<V> {
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/container/Capabilities.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/container/Capabilities.java
index 25f1ac8..68318a6 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/container/Capabilities.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/container/Capabilities.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -207,7 +207,7 @@
 
 	/**
 	 * Adds the {@link ModuleRevision#getModuleCapabilities(String) capabilities}
-	 * provided by the specified revision to this database.  These capabilities must 
+	 * provided by the specified revision to this database.  These capabilities must
 	 * become available for lookup with the {@link #findCapabilities(Requirement)}
 	 * method.
 	 * @param revision the revision which has capabilities to add
@@ -240,7 +240,7 @@
 	/**
 	 * Removes the {@link ModuleRevision#getModuleCapabilities(String) capabilities}
 	 * provided by the specified revision from this database.  These capabilities
-	 * must no longer be available for lookup with the 
+	 * must no longer be available for lookup with the
 	 * {@link #findCapabilities(Requirement)} method.
 	 * @param revision
 	 */
@@ -254,7 +254,7 @@
 	}
 
 	/**
-	 * Returns a mutable snapshot of capabilities that are candidates for 
+	 * Returns a mutable snapshot of capabilities that are candidates for
 	 * satisfying the specified requirement.
 	 * @param requirement the requirement
 	 * @return the candidates for the requirement
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/container/ComputeNodeOrder.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/container/ComputeNodeOrder.java
index f54d5e1..6c0c8cf 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/container/ComputeNodeOrder.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/container/ComputeNodeOrder.java
@@ -17,11 +17,11 @@
 import java.util.*;
 
 /**
- * Borrowed from org.eclipse.core.internal.resources.ComputeProjectOrder 
+ * Borrowed from org.eclipse.core.internal.resources.ComputeProjectOrder
  * to be used when computing the stop order.
  * Implementation of a sort algorithm for computing the node order. This
  * algorithm handles cycles in the node reference graph in a reasonable way.
- * 
+ *
  * @since 3.0
  */
 public class ComputeNodeOrder {
@@ -93,14 +93,14 @@
 			 * Ordered list of adjacent vertexes. In other words, "this" is the
 			 * "from" vertex and the elements of this list are all "to"
 			 * vertexes.
-			 * 
+			 *
 			 * Element type: <code>Vertex</code>
 			 */
 			public List<Vertex> adjacent = new ArrayList<>(3);
 
 			/**
 			 * Creates a new vertex with the given id.
-			 * 
+			 *
 			 * @param id the vertex id
 			 */
 			public Vertex(Object id) {
@@ -110,14 +110,14 @@
 
 		/**
 		 * Ordered list of all vertexes in this graph.
-		 * 
+		 *
 		 * Element type: <code>Vertex</code>
 		 */
 		private List<Vertex> vertexList = new ArrayList<>(100);
 
 		/**
 		 * Map from id to vertex.
-		 * 
+		 *
 		 * Key type: <code>Object</code>; value type: <code>Vertex</code>
 		 */
 		private Map<Object, Vertex> vertexMap = new HashMap<>(100);
@@ -170,7 +170,7 @@
 		 * Defines a new vertex with the given id. The depth-first search is
 		 * performed in the relative order in which vertexes were added to the
 		 * graph.
-		 * 
+		 *
 		 * @param id the id of the vertex
 		 * @exception IllegalArgumentException if the vertex id is
 		 * already defined or if the graph is frozen
@@ -194,7 +194,7 @@
 		 * <code>addVertex</code>. The depth-first search is performed in the
 		 * relative order in which adjacent "to" vertexes were added to a given
 		 * "from" index.
-		 * 
+		 *
 		 * @param fromId the id of the "from" vertex
 		 * @param toId the id of the "to" vertex
 		 * @exception IllegalArgumentException if either vertex is undefined or
@@ -215,7 +215,7 @@
 		/**
 		 * Returns the ids of the vertexes in this graph ordered by depth-first
 		 * search finish time. The graph must be frozen.
-		 * 
+		 *
 		 * @param increasing <code>true</code> if objects are to be arranged
 		 * into increasing order of depth-first search finish time, and
 		 * <code>false</code> if objects are to be arranged into decreasing
@@ -244,7 +244,7 @@
 
 		/**
 		 * Returns whether the graph contains cycles. The graph must be frozen.
-		 * 
+		 *
 		 * @return <code>true</code> if this graph contains at least one cycle,
 		 * and <code>false</code> if this graph is cycle free
 		 * @exception IllegalArgumentException if the graph is not frozen
@@ -260,9 +260,9 @@
 		 * Returns the non-trivial components of this graph. A non-trivial
 		 * component is a set of 2 or more vertexes that were traversed
 		 * together. The graph must be frozen.
-		 * 
+		 *
 		 * @return the possibly empty list of non-trivial components, where
-		 * each component is an array of ids (element type: 
+		 * each component is an array of ids (element type:
 		 * <code>Object[]</code>)
 		 * @exception IllegalArgumentException if the graph is not frozen
 		 */
@@ -311,7 +311,7 @@
 		//		 * </p>
 		//		 */
 		//		private void recursiveDFS() {
-		//			// initialize 
+		//			// initialize
 		//			// all vertex.color initially Vertex.WHITE;
 		//			// all vertex.predecessor initially null;
 		//			time = 0;
@@ -325,7 +325,7 @@
 		//
 		//		/**
 		//		 * Helper method. Performs a depth first search of this graph.
-		//		 * 
+		//		 *
 		//		 * @param vertex the vertex to visit
 		//		 */
 		//		private void DFSVisit(Vertex vertex) {
@@ -364,7 +364,7 @@
 			// use precomputed objects to avoid garbage
 			final Integer NEXT_VERTEX_OBJECT = Integer.valueOf(NEXT_VERTEX);
 			final Integer AFTER_NEXTED_DFS_VISIT_OBJECT = Integer.valueOf(AFTER_NEXTED_DFS_VISIT);
-			// initialize 
+			// initialize
 			// all vertex.color initially Vertex.WHITE;
 			// all vertex.predecessor initially null;
 			time = 0;
@@ -460,7 +460,7 @@
 	 * Algorithms</it>, McGraw-Hill, 1990. The strongly-connected-components
 	 * algorithm is in section 23.5.
 	 * </p>
-	 * 
+	 *
 	 * @param objects a list of projects (element type:
 	 * <code>IProject</code>)
 	 * @param references a list of project references [A,B] meaning that A
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/container/InternalUtils.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/container/InternalUtils.java
index f2f3e75..d563aa1 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/container/InternalUtils.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/container/InternalUtils.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/container/LockSet.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/container/LockSet.java
index 531fe02..67dd60b 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/container/LockSet.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/container/LockSet.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -25,7 +25,7 @@
  * over and over then new ReentrantLocks are created each time.  This set should be
  * used with care.  If the same object is going to be locked/unlocked over and over then
  * consider using a different locking strategy.
- * 
+ *
  * Previous implementations of this class attempted to use a WeakHashMap to cache
  * the locks, but this proved to be a flawed approach because of the unpredictable
  * timing of garbage collection, particularly with autoboxed types (e.g. bundle
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/debug/Debug.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/debug/Debug.java
index 645b99b..00bb826 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/debug/Debug.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/debug/Debug.java
@@ -21,7 +21,7 @@
 import org.eclipse.osgi.service.debug.DebugOptionsListener;
 
 /**
- * This class has debug constants which can be used by the Framework implementation 
+ * This class has debug constants which can be used by the Framework implementation
  * and Adaptor implementations
  * @since 3.1
  */
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/debug/EclipseDebugTrace.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/debug/EclipseDebugTrace.java
index 846ced8..f948815 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/debug/EclipseDebugTrace.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/debug/EclipseDebugTrace.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -110,8 +110,8 @@
 
 	/**
 	 * Construct a new EclipseDebugTrace for the specified bundle symbolic name and write messages to the specified
-	 * trace file.  
-	 * 
+	 * trace file.
+	 *
 	 * @param bundleSymbolicName The symbolic name of the bundle being traced
 	 * @param debugOptions Used to determine if the specified bundle symbolic name + option-path has tracing enabled
 	 * @param traceClass The class that the client is using to perform trace API calls
@@ -126,7 +126,7 @@
 
 	/**
 	 * Is debugging enabled for the specified option-path
-	 * 
+	 *
 	 * @param optionPath The <i>option-path</i>
 	 * @return Returns true if debugging is enabled for the specified option-path on this bundle; Otherwise false.
 	 */
@@ -288,7 +288,7 @@
 	/**
 	 * Set the trace message for the specified record to include class and method information
 	 * if verbose debugging is disabled.
-	 *  
+	 *
 	 * @param record The {@link FrameworkDebugTraceEntry} containing the information to persist to the trace file.
 	 * @param originalMessage The original tracing message
 	 */
@@ -310,7 +310,7 @@
 
 	/**
 	 * Utility method to convert an array of StackTraceElement objects to form a String representation of a stack dump
-	 * 
+	 *
 	 * @param elements
 	 *            The array of StackTraceElement objects
 	 * @return A String of the stack dump produced by the list of elements
@@ -336,7 +336,7 @@
 
 	/**
 	 * Write the specified FrameworkTraceEntry to trace file
-	 * 
+	 *
 	 * @param entry The FrameworkTraceEntry to write to the log file.
 	 */
 	private void writeRecord(final FrameworkDebugTraceEntry entry) {
@@ -357,7 +357,7 @@
 					// flush the writer
 					traceWriter.flush();
 				} catch (Exception ex) {
-					// any exceptions during tracing should be caught 
+					// any exceptions during tracing should be caught
 					System.err.println("An exception occurred while writing to the platform trace file: ");//$NON-NLS-1$
 					ex.printStackTrace(System.err);
 				} finally {
@@ -394,8 +394,8 @@
 	}
 
 	/**
-	 * Checks the trace file size.  If the file size reaches the limit then the trace file is rotated. 
-	 * 
+	 * Checks the trace file size.  If the file size reaches the limit then the trace file is rotated.
+	 *
 	 * @param traceFile The tracing file
 	 * @param timestamp the timestamp for the session; this is the same timestamp as the first entry
 	 * @return false if an error occurred trying to rotate the trace file
@@ -419,7 +419,7 @@
 					final File backupFile = new File(backupFilename);
 					if (backupFile.exists()) {
 						if (!backupFile.delete()) {
-							System.err.println("Error when trying to delete old trace file: " + backupFile.getName());//$NON-NLS-1$ 
+							System.err.println("Error when trying to delete old trace file: " + backupFile.getName());//$NON-NLS-1$
 							if (backupFile.renameTo(new File(backupFile.getAbsolutePath() + System.currentTimeMillis()))) {
 								System.err.println("So we rename it to filename: " + backupFile.getName()); //$NON-NLS-1$
 							} else {
@@ -436,8 +436,8 @@
 						isBackupOK = false;
 					}
 					/*
-					 * Write a header to new log file stating that this new file is a continuation file. 
-					 * This method should already be called with the file lock set so we should be safe 
+					 * Write a header to new log file stating that this new file is a continuation file.
+					 * This method should already be called with the file lock set so we should be safe
 					 * to update it here.
 					*/
 					Writer traceWriter = null;
@@ -478,7 +478,7 @@
 
 	/**
 	 * Accessor to retrieve the time stamp in a formatted manner.
-	 * 
+	 *
 	 * @return A formatted time stamp based on the {@link EclipseDebugTrace#TRACE_FILE_DATE_FORMATTER} formatter
 	 */
 	private final String getFormattedDate(long timestamp) {
@@ -488,8 +488,8 @@
 
 	/**
 	 * Accessor to retrieve the text of a {@link Throwable} in a formatted manner so that it can be written to the
-	 * trace file. 
-	 * 
+	 * trace file.
+	 *
 	 * @param error The {@lnk Throwable} to format
 	 * @return The complete text of a {@link Throwable} as a {@link String} or null if the input error is null.
 	 */
@@ -514,17 +514,17 @@
 
 	/**
 	 * Writes header information to a new trace file
-	 * 
+	 *
 	 * @param traceWriter the trace writer
 	 * @param timestamp the timestamp for the session; this is the same timestamp as the first entry
-	 * @throws IOException If an error occurs while writing this session information 
+	 * @throws IOException If an error occurs while writing this session information
 	 */
 	private void writeSession(final Writer traceWriter, long timestamp) throws IOException {
 
 		writeComment(traceWriter, EclipseDebugTrace.TRACE_NEW_SESSION + this.getFormattedDate(timestamp));
 		writeComment(traceWriter, EclipseDebugTrace.TRACE_FILE_VERSION_COMMENT + EclipseDebugTrace.TRACE_FILE_VERSION);
 		writeComment(traceWriter, EclipseDebugTrace.TRACE_FILE_VERBOSE_COMMENT + debugOptions.isVerbose());
-		writeComment(traceWriter, "The following option strings are specified for this debug session:"); //$NON-NLS-1$ 
+		writeComment(traceWriter, "The following option strings are specified for this debug session:"); //$NON-NLS-1$
 		final String[] allOptions = debugOptions.getAllOptions();
 		for (String allOption : allOptions) {
 			writeComment(traceWriter, "\t" + allOption); //$NON-NLS-1$
@@ -532,10 +532,10 @@
 	}
 
 	/**
-	 * Writes the specified trace entry object to the trace file using the 
+	 * Writes the specified trace entry object to the trace file using the
 	 * {@link EclipseDebugTrace#TRACE_ELEMENT_DELIMITER} as the delimiter between
 	 * each element of the entry.
-	 * 
+	 *
 	 * @param traceWriter the trace writer
 	 * @param entry The trace entry object to write to the trace file
 	 * @throws IOException If an error occurs while writing this message
@@ -598,11 +598,11 @@
 	 * Encodes the specified string to replace any occurrence of the {@link EclipseDebugTrace#TRACE_ELEMENT_DELIMITER}
 	 * string with the {@link EclipseDebugTrace#TRACE_ELEMENT_DELIMITER_ENCODED}
 	 * string.  This can be used to ensure that the delimiter character does not break parsing when
-	 * the entry text contains the delimiter character. 
-	 * 
-	 * @param inputString The original string to be written to the trace file. 
+	 * the entry text contains the delimiter character.
+	 *
+	 * @param inputString The original string to be written to the trace file.
 	 * @return The original input string with all occurrences of
-	 * {@link EclipseDebugTrace#TRACE_ELEMENT_DELIMITER} replaced with 
+	 * {@link EclipseDebugTrace#TRACE_ELEMENT_DELIMITER} replaced with
 	 * {@link EclipseDebugTrace#TRACE_ELEMENT_DELIMITER_ENCODED}. A <code>null</code> value will be
 	 * returned if the input string is <code>null</code>.
 	 */
@@ -630,9 +630,9 @@
 	/**
 	 * Creates the trace writer.
 	 * If the tracing file is null then the writer will use System.out to print any messages.
-	 * 
+	 *
 	 * @param traceFile The tracing file
-	 * @return Returns a new Writer object  
+	 * @return Returns a new Writer object
 	 */
 	private Writer openWriter(final File traceFile) {
 		OutputStream out = null;
@@ -647,7 +647,7 @@
 		if (out == null) {
 			out = new FilterOutputStream(System.out) {
 				/**
-				 * @throws IOException  
+				 * @throws IOException
 				 */
 				@Override
 				public void close() throws IOException {
@@ -685,7 +685,7 @@
 
 	/**
 	 * Close the trace writer
-	 * 
+	 *
 	 * @param traceWriter The trace writer
 	 */
 	private void closeWriter(Writer traceWriter) {
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/debug/FrameworkDebugOptions.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/debug/FrameworkDebugOptions.java
index 6f11c7b..cbea861 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/debug/FrameworkDebugOptions.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/debug/FrameworkDebugOptions.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -39,7 +39,7 @@
  * The DebugOptions implementation class that allows accessing the list of debug options specified
  * for the application as well as creating {@link DebugTrace} objects for the purpose of having
  * dynamic enablement of debug tracing.
- * 
+ *
  * @since 3.1
  */
 public class FrameworkDebugOptions implements DebugOptions, ServiceTrackerCustomizer<DebugOptionsListener, DebugOptionsListener> {
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/debug/FrameworkDebugTraceEntry.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/debug/FrameworkDebugTraceEntry.java
index f466752..90c1f13 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/debug/FrameworkDebugTraceEntry.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/debug/FrameworkDebugTraceEntry.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -27,7 +27,7 @@
 
 	/**
 	 * The date and time when the trace occurred.
-	 * 
+	 *
 	 */
 	private final long timestamp;
 
@@ -68,7 +68,7 @@
 
 	/**
 	 * Construct a new FrameworkTraceRecord object
-	 * 
+	 *
 	 * @param bundleSymbolicName
 	 *            The symbolic name of the bundle being traced
 	 * @param optionPath
@@ -84,7 +84,7 @@
 
 	/**
 	 * Construct a new FrameworkTraceRecord object
-	 * 
+	 *
 	 * @param bundleSymbolicName
 	 *            The symbolic name of the bundle being traced
 	 * @param optionPath
@@ -94,7 +94,7 @@
 	 * @param error
 	 *            An exception to be traced
 	 * @param traceClass
-	 *            The class that calls the trace API 
+	 *            The class that calls the trace API
 	 */
 	public FrameworkDebugTraceEntry(String bundleSymbolicName, final String optionPath, final String message, final Throwable error, final String traceClass) {
 		threadName = Thread.currentThread().getName();
@@ -123,7 +123,7 @@
 				 * is likely that class so we should find out who called it.  If a
 				 * trace class has not been specified, or has been specified and this
 				 * stack element is not that class, then we assume this stack element
-				 * is the caller of the trace API. 
+				 * is the caller of the trace API.
 				 */
 				if ((traceClass == null) || !fullClassName.equals(traceClass)) {
 					determineClassName = stackElements[i].getClassName();
@@ -142,7 +142,7 @@
 
 	/*
 	 * (non-Javadoc)
-	 * 
+	 *
 	 * @see java.lang.Object#toString()
 	 */
 	@Override
@@ -173,7 +173,7 @@
 
 	/**
 	 * Accessor to the threads name
-	 * 
+	 *
 	 * @return the name of the thread
 	 */
 	public final String getThreadName() {
@@ -183,7 +183,7 @@
 
 	/**
 	 * Accessor to the timestamp for this trace record
-	 * 
+	 *
 	 * @return the date
 	 */
 	public final long getTimestamp() {
@@ -193,7 +193,7 @@
 
 	/**
 	 * Accessor for the symbolic name of the bundle being traced
-	 * 
+	 *
 	 * @return The symbolic name of the bundle being traced
 	 */
 	public final String getBundleSymbolicName() {
@@ -203,7 +203,7 @@
 
 	/**
 	 * Accessor for the trace message
-	 * 
+	 *
 	 * @return the trace message
 	 */
 	public final String getMessage() {
@@ -213,7 +213,7 @@
 
 	/**
 	 * Accessor for the trace exception. This may be null if there is no exception.
-	 * 
+	 *
 	 * @return the trace exception or null if none was defined.
 	 */
 	public final Throwable getThrowable() {
@@ -223,7 +223,7 @@
 
 	/**
 	 * Accessor for the name of the class being traced.
-	 * 
+	 *
 	 * @return The name of the class being traced.
 	 */
 	public final String getClassName() {
@@ -233,7 +233,7 @@
 
 	/**
 	 * Accessor for the method being traced.
-	 * 
+	 *
 	 * @return The name of the method being traced.
 	 */
 	public final String getMethodName() {
@@ -244,14 +244,14 @@
 	/**
 	 * Accessor for the option-path being traced. The <i>&lt;option-path&gt;</i> part of the debug option string
 	 * required for the Eclipse debugging framework.
-	 * 
+	 *
 	 * <pre>
 	 *    Examples:
 	 *       1) If a trace string com.ibm.myplugin.core/debug=true is specified then 'debug' is the option-path value.
 	 *       2) If a trace string com.ibm.myplugin.core/debug/perf=true is specified then 'debug/perf' is the option-path value.
 	 * </pre>
-	 * 
-	 * 
+	 *
+	 *
 	 * @return The option-path being traced.
 	 */
 	public final String getOptionPath() {
@@ -261,7 +261,7 @@
 
 	/**
 	 * Return the line number in the class/method where the trace originator
-	 * 
+	 *
 	 * @return The line number from the class and method where the trace request originated
 	 */
 	public final int getLineNumber() {
@@ -270,7 +270,7 @@
 	}
 
 	/**
-	 * 
+	 *
 	 * @param newMessage
 	 */
 	void setMessage(final String newMessage) {
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/BundleContextImpl.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/BundleContextImpl.java
index 5d900bf..29b20c0 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/BundleContextImpl.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/BundleContextImpl.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -264,7 +264,7 @@
 
 	void notifyFindHooksPriviledged(final BundleContextImpl context, final Collection<Bundle> allBundles) {
 		if (debug.DEBUG_HOOKS) {
-			Debug.println("notifyBundleFindHooks(" + allBundles + ")"); //$NON-NLS-1$ //$NON-NLS-2$ 
+			Debug.println("notifyBundleFindHooks(" + allBundles + ")"); //$NON-NLS-1$ //$NON-NLS-2$
 		}
 		container.getServiceRegistry().notifyHooksPrivileged(new HookContext() {
 			@Override
@@ -281,7 +281,7 @@
 
 			@Override
 			public String getHookMethodName() {
-				return "find"; //$NON-NLS-1$ 
+				return "find"; //$NON-NLS-1$
 			}
 
 			@Override
@@ -860,7 +860,7 @@
 			String clazz = null;
 			clazz = bundleActivator.getClass().getName();
 
-			throw new BundleException(NLS.bind(Msg.BUNDLE_ACTIVATOR_EXCEPTION, new Object[] {clazz, "start", bundle.getSymbolicName() == null ? "" + bundle.getBundleId() : bundle.getSymbolicName()}), BundleException.ACTIVATOR_ERROR, t); //$NON-NLS-1$ //$NON-NLS-2$ 
+			throw new BundleException(NLS.bind(Msg.BUNDLE_ACTIVATOR_EXCEPTION, new Object[] {clazz, "start", bundle.getSymbolicName() == null ? "" + bundle.getBundleId() : bundle.getSymbolicName()}), BundleException.ACTIVATOR_ERROR, t); //$NON-NLS-1$ //$NON-NLS-2$
 		}
 	}
 
@@ -916,16 +916,16 @@
 
 			String clazz = (activator == null) ? "" : activator.getClass().getName(); //$NON-NLS-1$
 
-			throw new BundleException(NLS.bind(Msg.BUNDLE_ACTIVATOR_EXCEPTION, new Object[] {clazz, "stop", bundle.getSymbolicName() == null ? "" + bundle.getBundleId() : bundle.getSymbolicName()}), BundleException.ACTIVATOR_ERROR, t); //$NON-NLS-1$ //$NON-NLS-2$ 
+			throw new BundleException(NLS.bind(Msg.BUNDLE_ACTIVATOR_EXCEPTION, new Object[] {clazz, "stop", bundle.getSymbolicName() == null ? "" + bundle.getBundleId() : bundle.getSymbolicName()}), BundleException.ACTIVATOR_ERROR, t); //$NON-NLS-1$ //$NON-NLS-2$
 		} finally {
 			activator = null;
 		}
 	}
 
-	/** 
+	/**
 	 * Return the map of ServiceRegistrationImpl to ServiceUse for services being
 	 * used by this context.
-	 * @return A map of ServiceRegistrationImpl to ServiceUse for services in use by 
+	 * @return A map of ServiceRegistrationImpl to ServiceUse for services in use by
 	 * this context.
 	 */
 	public Map<ServiceRegistrationImpl<?>, ServiceUse<?>> getServicesInUseMap() {
@@ -1057,7 +1057,7 @@
 	}
 
 	/**
-	 * This method checks that the context is still valid. 
+	 * This method checks that the context is still valid.
 	 *
 	 * @return true if the context is still valid; false otherwise
 	 */
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/ContextFinder.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/ContextFinder.java
index 0c3cf1e..2ea40c9 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/ContextFinder.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/ContextFinder.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -60,7 +60,7 @@
 		this.parentContextClassLoader = contextClassLoader != null ? contextClassLoader : bootLoader;
 	}
 
-	// Return a list of all classloaders on the stack that are neither the 
+	// Return a list of all classloaders on the stack that are neither the
 	// ContextFinder classloader nor the boot classloader.  The last classloader
 	// in the list is either a bundle classloader or the framework's classloader
 	// We assume that the bootclassloader never uses the context classloader to find classes in itself.
@@ -85,7 +85,7 @@
 		return result;
 	}
 
-	// ensures that a classloader does not have the ContextFinder as part of the 
+	// ensures that a classloader does not have the ContextFinder as part of the
 	// parent hierachy.  A classloader which has the ContextFinder as a parent must
 	// not be used as a delegate, otherwise we endup in endless recursion.
 	private boolean checkClassLoader(ClassLoader classloader) {
@@ -109,7 +109,7 @@
 	}
 
 	//Return whether the request for loading "name" should proceed.
-	//False is returned when a cycle is being detected 
+	//False is returned when a cycle is being detected
 	private boolean startLoading(String name) {
 		Set<String> classesAndResources = cycleDetector.get();
 		if (classesAndResources != null && classesAndResources.contains(name))
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/DTOBuilder.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/DTOBuilder.java
index a54e9ba..9607429 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/DTOBuilder.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/DTOBuilder.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/EquinoxBundle.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/EquinoxBundle.java
index aefaac6..684d805 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/EquinoxBundle.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/EquinoxBundle.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/EquinoxConfiguration.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/EquinoxConfiguration.java
index da2fb2d..2cb16eb 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/EquinoxConfiguration.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/EquinoxConfiguration.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -160,7 +160,7 @@
 	public static final String ECLIPSE_FRAMEWORK_VENDOR = "Eclipse"; //$NON-NLS-1$
 
 	public static final String PROP_OSGI_JAVA_PROFILE = "osgi.java.profile"; //$NON-NLS-1$
-	public static final String PROP_OSGI_JAVA_PROFILE_NAME = "osgi.java.profile.name"; //$NON-NLS-1$ 
+	public static final String PROP_OSGI_JAVA_PROFILE_NAME = "osgi.java.profile.name"; //$NON-NLS-1$
 	// OSGi java profile bootdelegation; used to indicate how the org.osgi.framework.bootdelegation
 	// property defined in the java profile should be processed, (ingnore, override, none). default is ignore
 	public static final String PROP_OSGI_JAVA_PROFILE_BOOTDELEGATION = "osgi.java.profile.bootdelegation"; //$NON-NLS-1$
@@ -186,7 +186,7 @@
 
 	public static final String PROP_ROOT_LOCALE = "equinox.root.locale"; //$NON-NLS-1$
 
-	public static final String PROP_PARENT_CLASSLOADER = "osgi.parentClassloader"; //$NON-NLS-1$	
+	public static final String PROP_PARENT_CLASSLOADER = "osgi.parentClassloader"; //$NON-NLS-1$
 	// A parent classloader type that specifies the framework classlaoder
 	public static final String PARENT_CLASSLOADER_FWK = "fwk"; //$NON-NLS-1$
 	// System property used to set the context classloader parent classloader type (ccl is the default)
@@ -415,7 +415,7 @@
 								Method getenv = System.class.getMethod("getenv", new Class[] {String.class}); //$NON-NLS-1$
 								prop = (String) getenv.invoke(null, new Object[] {var});
 							} catch (Throwable t) {
-								// do nothing; 
+								// do nothing;
 								// on 1.4 VMs this throws an error
 								// on J2ME this method does not exist
 							}
@@ -1036,7 +1036,7 @@
 		/*
 		 * Initializes the execution context for this run of the platform.  The context
 		 * includes information about the locale, operating system and window system.
-		 * 
+		 *
 		 * NOTE: The OS, WS, and ARCH values should never be null. The executable should
 		 * be setting these values and therefore this code path is obsolete for Eclipse
 		 * when run from the executable.
@@ -1053,7 +1053,7 @@
 		nlValue = Locale.getDefault().toString();
 		setConfiguration(PROP_OSGI_NL, nlValue);
 
-		// if the user didn't set the operating system with a command line 
+		// if the user didn't set the operating system with a command line
 		// argument then use the default.
 		String osValue = getConfiguration(PROP_OSGI_OS);
 		if (osValue == null) {
@@ -1061,7 +1061,7 @@
 			setConfiguration(PROP_OSGI_OS, osValue);
 		}
 
-		// if the user didn't set the window system with a command line 
+		// if the user didn't set the window system with a command line
 		// argument then use the default.
 		String wsValue = getConfiguration(PROP_OSGI_WS);
 		if (wsValue == null) {
@@ -1069,7 +1069,7 @@
 			setConfiguration(PROP_OSGI_WS, wsValue);
 		}
 
-		// if the user didn't set the system architecture with a command line 
+		// if the user didn't set the system architecture with a command line
 		// argument then use the default.
 		String archValue = getConfiguration(PROP_OSGI_ARCH);
 		if (archValue == null) {
@@ -1138,22 +1138,22 @@
 	 * <p>
 	 * Converts a String to a Locale.
 	 * </p>
-	 * 
+	 *
 	 * <p>
 	 * This method takes the string format of a locale and creates the locale object from it.
 	 * </p>
-	 * 
+	 *
 	 * <p>
 	 * This method validates the input strictly. The language code must be lowercase. The country
 	 * code must be uppercase. The separator must be an underscore. The length must be correct.
 	 * </p>
-	 * 
+	 *
 	 * <p>
 	 * This method is inspired by <code>org.apache.commons.lang.LocaleUtils.toLocale(String)</code>
 	 * by fixing the parsing error for uncommon Locales like having a language and a variant code
 	 * but no country code, or a Locale that only consists of a country code.
 	 * </p>
-	 * 
+	 *
 	 * @param str
 	 *            the locale String to convert
 	 * @param defaultLocale
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/EquinoxContainer.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/EquinoxContainer.java
index d728c9f..af1b7d0 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/EquinoxContainer.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/EquinoxContainer.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -208,7 +208,7 @@
 		// do this outside of the lock to avoid deadlock
 		currentSaver.close();
 		currentStorage.close();
-		// Must be done last since it will result in termination of the 
+		// Must be done last since it will result in termination of the
 		// framework active thread.
 		currentExecutor.shutdown();
 	}
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/EquinoxContainerAdaptor.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/EquinoxContainerAdaptor.java
index ace518c..e6e3a6e 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/EquinoxContainerAdaptor.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/EquinoxContainerAdaptor.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/EquinoxEventPublisher.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/EquinoxEventPublisher.java
index 19daba4..8df1049 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/EquinoxEventPublisher.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/EquinoxEventPublisher.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -120,7 +120,7 @@
 	/**
 	 * Deliver a BundleEvent to SynchronousBundleListeners (synchronous) and
 	 * BundleListeners (asynchronous).
-	 * 
+	 *
 	 * @param type
 	 *            BundleEvent type.
 	 * @param bundle
@@ -250,7 +250,7 @@
 
 	private void notifyEventHooksPrivileged(final BundleEvent event, final Collection<BundleContext> result) {
 		if (container.getConfiguration().getDebug().DEBUG_HOOKS) {
-			Debug.println("notifyBundleEventHooks(" + event.getType() + ":" + event.getBundle() + ", " + result + " )"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$  
+			Debug.println("notifyBundleEventHooks(" + event.getType() + ":" + event.getBundle() + ", " + result + " )"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
 		}
 
 		ServiceRegistry serviceRegistry = container.getServiceRegistry();
@@ -283,7 +283,7 @@
 
 	/**
 	 * Deliver a FrameworkEvent.
-	 * 
+	 *
 	 * @param type
 	 *            FrameworkEvent type.
 	 * @param bundle
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/FilterImpl.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/FilterImpl.java
index c9f5747..d0ccb36 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/FilterImpl.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/FilterImpl.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -58,7 +58,7 @@
  * <p>
  * The string representation of an LDAP search filter is defined by the
  * following grammar. It uses a prefix format.
- * 
+ *
  * <pre>
  *   &lt;filter&gt; ::= '(' &lt;filtercomp&gt; ')'
  *   &lt;filtercomp&gt; ::= &lt;and&gt; | &lt;or&gt; | &lt;not&gt; | &lt;item&gt;
@@ -80,7 +80,7 @@
  *   &lt;starval&gt; ::= NULL | &lt;value&gt; '*' &lt;starval&gt;
  *   &lt;final&gt; ::= NULL | &lt;value&gt;
  * </pre>
- * 
+ *
  * {@code &lt;attr&gt;} is a string representing an attribute, or key, in the
  * properties objects of the registered services. Attribute names are not case
  * sensitive; that is cn and CN both refer to the same attribute.
@@ -94,7 +94,7 @@
  * presence filter.
  * <p>
  * Examples of LDAP filters are:
- * 
+ *
  * <pre>
  *   &quot;(cn=Babs Jensen)&quot;
  *   &quot;(!(cn=Tim Howes))&quot;
@@ -144,14 +144,14 @@
  * Note: arrays of primitives are also supported. </blockquote> A filter matches
  * a key that has multiple values if it matches at least one of those values.
  * For example,
- * 
+ *
  * <pre>
  * Dictionary d = new Hashtable();
  * d.put(&quot;cn&quot;, new String[] {
  * 		&quot;a&quot;, &quot;b&quot;, &quot;c&quot;
  * });
  * </pre>
- * 
+ *
  * d will match {@code (cn=a)} and also {@code (cn=b)}
  * <p>
  * A filter component that references a key having an unrecognizable data type
@@ -167,7 +167,7 @@
 	 * <p>
 	 * If the filter cannot be parsed, an {@link InvalidSyntaxException} will be
 	 * thrown with a human readable message where the filter became unparsable.
-	 * 
+	 *
 	 * @param filterString the filter string.
 	 * @throws InvalidSyntaxException If the filter parameter contains an
 	 *             invalid filter string that cannot be parsed.
@@ -190,7 +190,7 @@
 	 * This {@code Filter} is executed using the keys and values of the
 	 * referenced service's properties. The keys are looked up in a case
 	 * insensitive manner.
-	 * 
+	 *
 	 * @param reference The reference to the service whose properties are used
 	 *            in the match.
 	 * @return {@code true} if the service's properties match this
@@ -205,7 +205,7 @@
 	 * Filter using a {@code Dictionary} with case insensitive key lookup. This
 	 * {@code Filter} is executed using the specified {@code Dictionary}'s keys
 	 * and values. The keys are looked up in a case insensitive manner.
-	 * 
+	 *
 	 * @param dictionary The {@code Dictionary} whose key/value pairs are used
 	 *            in the match.
 	 * @return {@code true} if the {@code Dictionary}'s values match this
@@ -222,7 +222,7 @@
 	 * Filter using a {@code Dictionary}. This {@code Filter} is executed using
 	 * the specified {@code Dictionary}'s keys and values. The keys are looked
 	 * up in a normal manner respecting case.
-	 * 
+	 *
 	 * @param dictionary The {@code Dictionary} whose key/value pairs are used
 	 *            in the match.
 	 * @return {@code true} if the {@code Dictionary}'s values match this
@@ -238,7 +238,7 @@
 	 * Filter using a {@code Map}. This {@code Filter} is executed using the
 	 * specified {@code Map}'s keys and values. The keys are looked up in a
 	 * normal manner respecting case.
-	 * 
+	 *
 	 * @param map The {@code Map} whose key/value pairs are used in the match.
 	 *            Maps with {@code null} key or values are not supported. A
 	 *            {@code null} value is considered not present to the filter.
@@ -258,7 +258,7 @@
 	 * <p>
 	 * The filter string is normalized by removing whitespace which does not
 	 * affect the meaning of the filter.
-	 * 
+	 *
 	 * @return This {@code Filter}'s filter string.
 	 */
 	@Override
@@ -275,7 +275,7 @@
 	 * <p>
 	 * The filter string is normalized by removing whitespace which does not
 	 * affect the meaning of the filter.
-	 * 
+	 *
 	 * @return This {@code Filter}'s filter string.
 	 */
 	abstract StringBuilder normalize(StringBuilder sb);
@@ -285,7 +285,7 @@
 	 * <p>
 	 * This implementation returns the result of calling
 	 * {@code this.toString().equals(obj.toString()}.
-	 * 
+	 *
 	 * @param obj The object to compare against this {@code Filter}.
 	 * @return If the other object is a {@code Filter} object, then returns the
 	 *         result of calling {@code this.toString().equals(obj.toString()};
@@ -309,7 +309,7 @@
 	 * <p>
 	 * This implementation returns the result of calling
 	 * {@code this.toString().hashCode()}.
-	 * 
+	 *
 	 * @return The hashCode of this {@code Filter}.
 	 */
 	@Override
@@ -714,7 +714,7 @@
 
 		/**
 		 * Encode the value string such that '(', '*', ')' and '\' are escaped.
-		 * 
+		 *
 		 * @param value unencoded value string.
 		 */
 		static StringBuilder encodeValue(StringBuilder sb, String value) {
@@ -1258,7 +1258,7 @@
 		 * Map a string for an APPROX (~=) comparison. This implementation
 		 * removes white spaces. This is the minimum implementation allowed by
 		 * the OSGi spec.
-		 * 
+		 *
 		 * @param input Input string.
 		 * @return String ready for APPROX comparison.
 		 */
@@ -1292,7 +1292,7 @@
 
 	/**
 	 * Returns the leftmost required objectClass value for the filter to evaluate to true.
-	 * 
+	 *
 	 * @return The leftmost required objectClass value or null if none could be determined.
 	 */
 	public String getRequiredObjectClass() {
@@ -1682,7 +1682,7 @@
 
 		/**
 		 * Create a case insensitive map from the specified dictionary.
-		 * 
+		 *
 		 * @param dictionary
 		 * @throws IllegalArgumentException If {@code dictionary} contains case
 		 *             variants of the same key name.
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/OSGiFrameworkHooks.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/OSGiFrameworkHooks.java
index 8f38c2b..feed04d 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/OSGiFrameworkHooks.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/OSGiFrameworkHooks.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -115,7 +115,7 @@
 
 		void notifyCollisionHooksPriviledged(final int operationType, final Bundle target, final Collection<Bundle> collisionCandidates) {
 			if (debug.DEBUG_HOOKS) {
-				Debug.println("notifyCollisionHooks(" + operationType + ", " + target + ", " + collisionCandidates + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ 
+				Debug.println("notifyCollisionHooks(" + operationType + ", " + target + ", " + collisionCandidates + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
 			}
 			ServiceRegistry registry = container.getServiceRegistry();
 			if (registry != null) {
@@ -134,7 +134,7 @@
 
 					@Override
 					public String getHookMethodName() {
-						return "filterCollisions"; //$NON-NLS-1$ 
+						return "filterCollisions"; //$NON-NLS-1$
 					}
 
 					@Override
@@ -150,7 +150,7 @@
 	 * This class encapsulates the delegation to ResolverHooks that are registered with the service
 	 * registry.  This way the resolver implementation only has to call out to a single hook
 	 * which does all the necessary service registry lookups.
-	 * 
+	 *
 	 * This class is not thread safe and expects external synchronization.
 	 *
 	 */
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/StorageSaver.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/StorageSaver.java
index cd85841..13f239f 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/StorageSaver.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/StorageSaver.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/SystemBundleActivator.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/SystemBundleActivator.java
index 4cb0b3c..b1917a1 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/SystemBundleActivator.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/SystemBundleActivator.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/XMLParsingServiceFactory.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/XMLParsingServiceFactory.java
index fbeb96e..84a6e37 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/XMLParsingServiceFactory.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/XMLParsingServiceFactory.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -33,10 +33,10 @@
 			return createService();
 		/*
 		 * Set the TCCL while creating jaxp factory instances to the
-		 * requesting bundles class loader.  This is needed to 
-		 * work around bug 285505.  There are issues if multiple 
+		 * requesting bundles class loader.  This is needed to
+		 * work around bug 285505.  There are issues if multiple
 		 * xerces implementations are available on the bundles class path
-		 * 
+		 *
 		 * The real issue is that the ContextFinder will only delegate
 		 * to the framework class loader in this case.  This class
 		 * loader forces the requesting bundle to be delegated to for
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/legacy/PackageAdminImpl.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/legacy/PackageAdminImpl.java
index 6044e15..c6fe2c7 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/legacy/PackageAdminImpl.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/legacy/PackageAdminImpl.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -57,7 +57,7 @@
 public class PackageAdminImpl implements PackageAdmin {
 	private final ModuleContainer container;
 
-	/* 
+	/*
 	 * We need to make sure that the GetBundleAction class loads early to prevent a ClassCircularityError when checking permissions.
 	 * See bug 161561
 	 */
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/legacy/StartLevelImpl.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/legacy/StartLevelImpl.java
index 2d3f7cf..45e272d 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/legacy/StartLevelImpl.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/framework/legacy/StartLevelImpl.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/hookregistry/BundleFileWrapperFactoryHook.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/hookregistry/BundleFileWrapperFactoryHook.java
index 22efbda..6d38949 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/hookregistry/BundleFileWrapperFactoryHook.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/hookregistry/BundleFileWrapperFactoryHook.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -23,8 +23,8 @@
  */
 public interface BundleFileWrapperFactoryHook {
 	/**
-	 * Wraps a bundle file for the given content and base data.  If the 
-	 * specified bundle file should not be wrapped then null is returned 
+	 * Wraps a bundle file for the given content and base data.  If the
+	 * specified bundle file should not be wrapped then null is returned
 	 * @param bundleFile the bundle file to be wrapped
 	 * @param generation the generation the bundle file is for
 	 * @param base true if the content is for the base bundle (not an inner jar, directory etc.)
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/hookregistry/ClassLoaderHook.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/hookregistry/ClassLoaderHook.java
index 8e0a529..3a906b9 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/hookregistry/ClassLoaderHook.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/hookregistry/ClassLoaderHook.java
@@ -32,7 +32,7 @@
  */
 public abstract class ClassLoaderHook {
 	/**
-	 * Gets called by a classpath manager before defining a class.  This method allows a class loading hook 
+	 * Gets called by a classpath manager before defining a class.  This method allows a class loading hook
 	 * to process the bytes of a class that is about to be defined and return a transformed byte array.
 	 * @param name the name of the class being defined
 	 * @param classbytes the bytes of the class being defined
@@ -47,7 +47,7 @@
 
 	/**
 	 * Gets called by a classpath manager before defining a class.  This method allows a class loading hook
-	 * to reject a transformation to the class bytes by a 
+	 * to reject a transformation to the class bytes by a
 	 * {@link #processClass(String, byte[], ClasspathEntry, BundleEntry, ClasspathManager) processClass} method.
 	 * @param name the name of the class being defined
 	 * @param transformedBytes the transformed bytes of the class being defined
@@ -61,7 +61,7 @@
 	}
 
 	/**
-	 * Gets called by a classpath manager when looking for ClasspathEntry objects.  This method allows 
+	 * Gets called by a classpath manager when looking for ClasspathEntry objects.  This method allows
 	 * a class loading hook to add additional ClasspathEntry objects
 	 * @param cpEntries the list of ClasspathEntry objects currently available for the requested classpath
 	 * @param cp the name of the requested classpath
@@ -75,8 +75,8 @@
 
 	/**
 	 * Gets called by a base data during {@link ModuleClassLoader#findLibrary(String)}.
-	 * A this method is called for each configured class loading hook until one 
-	 * class loading hook returns a non-null value.  If no class loading hook returns 
+	 * A this method is called for each configured class loading hook until one
+	 * class loading hook returns a non-null value.  If no class loading hook returns
 	 * a non-null value then the default behavior will be used.
 	 * @param generation the bundle generation to find a native library for.
 	 * @param libName the name of the native library.
@@ -93,7 +93,7 @@
 	 * returns null indicating the built-in implementation should be used.
 	 * Only one hook is able to provide the implementation of the module class loader
 	 * and the first one to return non-null wins.
-	 * 
+	 *
 	 * @param parent the parent classloader
 	 * @param configuration the equinox configuration
 	 * @param delegate the delegate for this classloader
@@ -107,7 +107,7 @@
 	}
 
 	/**
-	 * Gets called by a classpath manager at the end of 
+	 * Gets called by a classpath manager at the end of
 	 * {@link BundleLoader#getClassLoader()} is called the first time and a class loader is created.
 	 * @param classLoader the newly created bundle classloader
 	 */
@@ -116,10 +116,10 @@
 	}
 
 	/**
-	 * Called by a {@link BundleLoader#findClass(String)} method before delegating to the resolved constraints and 
-	 * local bundle for a class load.  If this method returns null then normal delegation is done.  If this method 
+	 * Called by a {@link BundleLoader#findClass(String)} method before delegating to the resolved constraints and
+	 * local bundle for a class load.  If this method returns null then normal delegation is done.  If this method
 	 * returns a non-null value then the rest of the delegation process is skipped and the returned value is used.
-	 * If this method throws a <code>ClassNotFoundException</code> then the calling 
+	 * If this method throws a <code>ClassNotFoundException</code> then the calling
 	 * {@link BundleLoader#findClass(String)} method re-throws the exception.
 	 * @param name the name of the class to find
 	 * @param classLoader the module class loader
@@ -131,7 +131,7 @@
 	}
 
 	/**
-	 * Called by a {@link BundleLoader#findClass(String)} method after delegating to the resolved constraints and 
+	 * Called by a {@link BundleLoader#findClass(String)} method after delegating to the resolved constraints and
 	 * local bundle for a class load.  This method will only be called if no class was found
 	 * from the normal delegation.
 	 * @param name the name of the class to find
@@ -144,8 +144,8 @@
 	}
 
 	/**
-	 * Called by a {@link BundleLoader#findResource(String)} before delegating to the resolved constraints and 
-	 * local bundle for a resource load.  If this method returns null then normal delegation is done.  
+	 * Called by a {@link BundleLoader#findResource(String)} before delegating to the resolved constraints and
+	 * local bundle for a resource load.  If this method returns null then normal delegation is done.
 	 * If this method returns a non-null value then the rest of the delegation process is skipped and the returned value is used.
 	 * If this method throws an <code>FileNotFoundException</code> then the delegation is terminated.
 	 * @param name the name of the resource to find
@@ -158,7 +158,7 @@
 	}
 
 	/**
-	 * Called by a {@link BundleLoader#findResource(String)} after delegating to the resolved constraints and 
+	 * Called by a {@link BundleLoader#findResource(String)} after delegating to the resolved constraints and
 	 * local bundle for a resource load.  This method will only be called if no resource was found
 	 * from the normal delegation.
 	 * @param name the name of the resource to find
@@ -171,8 +171,8 @@
 	}
 
 	/**
-	 * Called by a {@link BundleLoader#findResources(String)} before delegating to the resolved constraints and 
-	 * local bundle for a resource load.  If this method returns null then normal delegation is done.  
+	 * Called by a {@link BundleLoader#findResources(String)} before delegating to the resolved constraints and
+	 * local bundle for a resource load.  If this method returns null then normal delegation is done.
 	 * If this method returns  a non-null value then the rest of the delegation process is skipped and the returned value is used.
 	 * If this method throws an <code>FileNotFoundException</code> then the delegation is terminated
 	 * @param name the name of the resource to find
@@ -185,7 +185,7 @@
 	}
 
 	/**
-	 * Called by a {@link BundleLoader#findResources(String)} after delegating to the resolved constraints and 
+	 * Called by a {@link BundleLoader#findResources(String)} after delegating to the resolved constraints and
 	 * local bundle for a resource load.  This method will only be called if no resources were found
 	 * from the normal delegation.
 	 * @param name the name of the resource to find
@@ -198,7 +198,7 @@
 	}
 
 	/**
-	 * Called by a {@link ClasspathManager} before normal delegation.  If this method returns 
+	 * Called by a {@link ClasspathManager} before normal delegation.  If this method returns
 	 * a non-null value then the rest of the delegation process is skipped and the returned value
 	 * is used.
 	 * @param name the name of the library to find
@@ -222,8 +222,8 @@
 	}
 
 	/**
-	 * Gets called by a classpath manager during {@link ClasspathManager#findLocalClass(String)} before 
-	 * searching the local classloader for a class.  A classpath manager will call this method for 
+	 * Gets called by a classpath manager during {@link ClasspathManager#findLocalClass(String)} before
+	 * searching the local classloader for a class.  A classpath manager will call this method for
 	 * each configured class loading hook.
 	 * @param name the name of the requested class
 	 * @param manager the classpath manager used to find and load the requested class
@@ -235,7 +235,7 @@
 
 	/**
 	 * Gets called by a classpath manager during {@link ClasspathManager#findLocalClass(String)} after
-	 * searching the local classloader for a class. A classpath manager will call this method for 
+	 * searching the local classloader for a class. A classpath manager will call this method for
 	 * each configured class loading hook.
 	 * @param name the name of the requested class
 	 * @param clazz the loaded class or null if not found
@@ -249,7 +249,7 @@
 
 	/**
 	 * Gets called by a classpath manager during {@link ClasspathManager#findLocalResource(String)} before
-	 * searching the local classloader for a resource. A classpath manager will call this method for 
+	 * searching the local classloader for a resource. A classpath manager will call this method for
 	 * each configured class loading hook.
 	 * @param name the name of the requested resource
 	 * @param manager the classpath manager used to find the requested resource
@@ -261,7 +261,7 @@
 
 	/**
 	 * Gets called by a classpath manager during {@link ClasspathManager#findLocalResource(String)} after
-	 * searching the local classloader for a resource. A classpath manager will call this method for 
+	 * searching the local classloader for a resource. A classpath manager will call this method for
 	 * each configured class loading hook.
 	 * @param name the name of the requested resource
 	 * @param resource the URL to the requested resource or null if not found
@@ -273,8 +273,8 @@
 	}
 
 	/**
-	 * Gets called by a classpath manager after an attempt is made to define a class.  This method allows 
-	 * a class loading hook to record data about a class definition. 
+	 * Gets called by a classpath manager after an attempt is made to define a class.  This method allows
+	 * a class loading hook to record data about a class definition.
 	 * @param name the name of the class that got defined
 	 * @param clazz the class object that got defined or null if an error occurred while defining a class
 	 * @param classbytes the class bytes used to define the class
@@ -300,7 +300,7 @@
 	}
 
 	/**
-	 * Returns true if this hook can support invoking 
+	 * Returns true if this hook can support invoking
 	 * {@link ClassLoaderHook#processClass(String, byte[], ClasspathEntry, BundleEntry, ClasspathManager) processClass}
 	 * recursively for the same class name.  If false is returned then a class
 	 * loading error will occur if recursive class processing is detected.
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/hookregistry/FrameworkUtilHelper.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/hookregistry/FrameworkUtilHelper.java
index 80bc1a8..5bfb4e3 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/hookregistry/FrameworkUtilHelper.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/hookregistry/FrameworkUtilHelper.java
@@ -27,7 +27,7 @@
 	/**
 	 * See {@link FrameworkUtil#getBundle(Class)}
 	 * @param classFromBundle a class defined by a bundle class loader.
-	 * @return A Bundle for the specified bundle class or null if the 
+	 * @return A Bundle for the specified bundle class or null if the
 	 * specified class was not defined by a bundle class loader.
 	 */
 	public Bundle getBundle(Class<?> classFromBundle) {
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/hookregistry/HookRegistry.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/hookregistry/HookRegistry.java
index a2c9f39..552438a 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/hookregistry/HookRegistry.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/hookregistry/HookRegistry.java
@@ -40,15 +40,15 @@
 public final class HookRegistry {
 	/**
 	 * The hook configurators properties file (&quot;hookconfigurators.properties&quot;) <p>
-	 * A framework extension may supply a hook configurators properties file to specify a 
+	 * A framework extension may supply a hook configurators properties file to specify a
 	 * list of hook configurators.
 	 * @see #HOOK_CONFIGURATORS
 	 */
 	public static final String HOOK_CONFIGURATORS_FILE = "hookconfigurators.properties"; //$NON-NLS-1$
 
 	/**
-	 * The hook configurators property key (&quot;hookconfigurators.properties&quot;) used in 
-	 * a hook configurators properties file to specify a comma separated list of fully 
+	 * The hook configurators property key (&quot;hookconfigurators.properties&quot;) used in
+	 * a hook configurators properties file to specify a comma separated list of fully
 	 * qualified hook configurator classes.
 	 */
 	public static final String HOOK_CONFIGURATORS = "hook.configurators"; //$NON-NLS-1$
@@ -60,7 +60,7 @@
 	public static final String PROP_HOOK_CONFIGURATORS_INCLUDE = "osgi.hook.configurators.include"; //$NON-NLS-1$
 
 	/**
-	 * A system property (&quot;osgi.hook.configurators.exclude&quot;) used to exclude 
+	 * A system property (&quot;osgi.hook.configurators.exclude&quot;) used to exclude
 	 * any hook configurators.  This is helpful for disabling hook
 	 * configurators that is specified in hook configurator properties files.
 	 */
@@ -68,7 +68,7 @@
 
 	/**
 	 * A system property (&quot;osgi.hook.configurators&quot;) used to specify the list
-	 * of hook configurators.  If this property is set then the list of configurators 
+	 * of hook configurators.  If this property is set then the list of configurators
 	 * specified will be the only configurators used.
 	 */
 	public static final String PROP_HOOK_CONFIGURATORS = "osgi.hook.configurators"; //$NON-NLS-1$
@@ -92,9 +92,9 @@
 
 	/**
 	 * Initializes the hook configurators.  The following steps are used to initialize the hook configurators. <p>
-	 * 1. Get a list of hook configurators from all hook configurators properties files on the classpath, 
+	 * 1. Get a list of hook configurators from all hook configurators properties files on the classpath,
 	 *    add this list to the overall list of hook configurators, remove duplicates. <p>
-	 * 2. Get a list of hook configurators from the (&quot;osgi.hook.configurators.include&quot;) system property 
+	 * 2. Get a list of hook configurators from the (&quot;osgi.hook.configurators.include&quot;) system property
 	 *    and add this list to the overall list of hook configurators, remove duplicates. <p>
 	 * 3. Get a list of hook configurators from the (&quot;osgi.hook.configurators.exclude&quot;) system property
 	 *    and remove this list from the overall list of hook configurators. <p>
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/hookregistry/StorageHookFactory.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/hookregistry/StorageHookFactory.java
index 34cd3dd..261e813 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/hookregistry/StorageHookFactory.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/hookregistry/StorageHookFactory.java
@@ -41,10 +41,10 @@
 	protected final String KEY = this.getClass().getName().intern();
 
 	/**
-	 * Returns the storage version of this storage hook.  This version 
-	 * is used by the storage to check the consistency of cached persistent 
-	 * data.  Any time a storage hook changes the format of its persistent 
-	 * data the storage version should be incremented. 
+	 * Returns the storage version of this storage hook.  This version
+	 * is used by the storage to check the consistency of cached persistent
+	 * data.  Any time a storage hook changes the format of its persistent
+	 * data the storage version should be incremented.
 	 * @return the storage version of this storage hook
 	 */
 	public int getStorageVersion() {
@@ -60,13 +60,13 @@
 	}
 
 	/**
-	 * Returns true if the persisted version is compatible with the 
+	 * Returns true if the persisted version is compatible with the
 	 * current version of this storage hook.  The default implementation
 	 * returns true if the specified version is identical to the current
 	 * version.  Implementations must override this method if they
 	 * want to support other (older) versions for migration purposes.
 	 * @param version the persisted version
-	 * @return true if the persisted version is compatible with 
+	 * @return true if the persisted version is compatible with
 	 * the current version.
 	 */
 	public boolean isCompatibleWith(int version) {
@@ -74,7 +74,7 @@
 	}
 
 	/**
-	 * Creates a save context object for a storage hook.  The 
+	 * Creates a save context object for a storage hook.  The
 	 * save context is passed to the {@link StorageHook#save(Object, DataOutputStream)}
 	 * for each generation being persisted by the framework.
 	 * @return a save context object or {@code null} if no save context is needed
@@ -108,7 +108,7 @@
 	 * Creates a storage hook for the specified generation and checks that the
 	 * factory class of the storage hook equals the class of this storage hook
 	 * factory.
-	 * 
+	 *
 	 * @param generation - The generation for which a storage hook should be
 	 *        created.
 	 * @return A newly created storage hook or {@code null} if no hook is needed
@@ -168,7 +168,7 @@
 		}
 
 		/**
-		 * Initializes this storage hook with the content of the specified bundle manifest.  
+		 * Initializes this storage hook with the content of the specified bundle manifest.
 		 * This method is called when a bundle is installed or updated.
 		 * @param manifest the bundle manifest to load into this storage hook
 		 * @throws BundleException if any error occurs
@@ -184,7 +184,7 @@
 		 * This will be either {@link ModuleEvent#INSTALLED installed} or {@link ModuleEvent#UPDATED updated}.
 		 * @param origin The module which originated the lifecycle operation. The origin may be {@code null} for
 		 * {@link ModuleEvent#INSTALLED installed} operations.  This is the module
-		 * passed to the {@link ModuleContainer#install(Module, String, ModuleRevisionBuilder, Object) install} or 
+		 * passed to the {@link ModuleContainer#install(Module, String, ModuleRevisionBuilder, Object) install} or
 		 * {@link ModuleContainer#update(Module, ModuleRevisionBuilder, Object) update} method.
 		 * @param builder the builder that will be used to create a new {@link ModuleRevision}.
 		 * @return The modified builder or a completely new builder to be used by the bundle.  A {@code null} value
@@ -198,10 +198,10 @@
 		}
 
 		/**
-		 * Loads the data from the specified 
-		 * input stream into the storage hook.  This method is called during startup to 
+		 * Loads the data from the specified
+		 * input stream into the storage hook.  This method is called during startup to
 		 * load all the persistently installed bundles. <p>
-		 * It is important that this method and the {@link #save(Object, DataOutputStream)} method 
+		 * It is important that this method and the {@link #save(Object, DataOutputStream)} method
 		 * stay in sync.  This method must be able to successfully read the data saved by the
 		 * {@link #save(Object, DataOutputStream)} method.
 		 * @param is an input stream used to load the storage hook's data from.
@@ -216,7 +216,7 @@
 		 * Saves the data from this storage hook into the specified output stream.  This method
 		 * is called if some persistent data has changed for the bundle. <p>
 		 * It is important that this method and the {@link #load(Object, DataInputStream)}
-		 * method stay in sync.  This method must be able to save data which the 
+		 * method stay in sync.  This method must be able to save data which the
 		 * {@link #load(Object, DataInputStream)} method can ready successfully.
 		 * @see #load(Object, DataInputStream)
 		 * @param os an output stream used to save the storage hook's data from.
@@ -235,7 +235,7 @@
 		}
 
 		/**
-		 * Validates the data in this storage hook, if the data is invalid then an illegal state 
+		 * Validates the data in this storage hook, if the data is invalid then an illegal state
 		 * exception is thrown
 		 * @throws IllegalStateException if the data is invalid
 		 */
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/hooks/DevClassLoadingHook.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/hooks/DevClassLoadingHook.java
index a1cfc66..8a4eb82 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/hooks/DevClassLoadingHook.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/hooks/DevClassLoadingHook.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -77,7 +77,7 @@
 				}
 			}
 		}
-		// mark the first entry of the list.  
+		// mark the first entry of the list.
 		// This way we can quickly tell that dev classpath entries have been added to the list
 		if (result && cpEntries.size() > 0)
 			cpEntries.get(0).addUserObject(this);
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/hooks/EclipseLazyStarter.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/hooks/EclipseLazyStarter.java
index 8339703..c9ade4c 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/hooks/EclipseLazyStarter.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/hooks/EclipseLazyStarter.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/BundleLoader.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/BundleLoader.java
index 4db5039..b584320 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/BundleLoader.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/BundleLoader.java
@@ -213,7 +213,7 @@
 					if (!exportNames.contains(name)) {
 						// must force filtered and reexport sources to be created early
 						// to prevent lazy normal package source creation.
-						// We only do this for the first export of a package name. 
+						// We only do this for the first export of a package name.
 						sources.createPackageSource(export, true);
 					}
 				}
@@ -370,9 +370,9 @@
 	}
 
 	/**
-	 * This method gets a resource from the bundle.  The resource is searched 
-	 * for in the same manner as it would if it was being loaded from a bundle 
-	 * (i.e. all hosts, fragments, import, required bundles and 
+	 * This method gets a resource from the bundle.  The resource is searched
+	 * for in the same manner as it would if it was being loaded from a bundle
+	 * (i.e. all hosts, fragments, import, required bundles and
 	 * local resources are searched).
 	 *
 	 * @param name the name of the desired resource.
@@ -386,7 +386,7 @@
 	 * Finds a class local to this bundle.  Only the classloader for this bundle is searched.
 	 * @param name The name of the class to find.
 	 * @return The loaded Class or null if the class is not found.
-	 * @throws ClassNotFoundException 
+	 * @throws ClassNotFoundException
 	 */
 	public Class<?> findLocalClass(String name) throws ClassNotFoundException {
 		long start = 0;
@@ -960,7 +960,7 @@
 		for (ModuleWire bundleWire : requiredBundleWires) {
 			if (local != null || BundleNamespace.VISIBILITY_REEXPORT.equals(bundleWire.getRequirement().getDirectives().get(BundleNamespace.REQUIREMENT_VISIBILITY_DIRECTIVE))) {
 				// always add required bundles first if we locally provide the package
-				// This allows a bundle to provide a package from a required bundle without 
+				// This allows a bundle to provide a package from a required bundle without
 				// re-exporting the whole required bundle.
 				BundleLoader loader = getProviderLoader(bundleWire);
 				if (loader != null) {
@@ -1147,7 +1147,7 @@
 		PackageSource result = findImportedSource(pkgName, null);
 		if (result != null)
 			return result;
-		// Note that dynamic imports are not checked to avoid aggressive wiring (bug 105779)  
+		// Note that dynamic imports are not checked to avoid aggressive wiring (bug 105779)
 		return findRequiredSource(pkgName, null);
 	}
 
@@ -1225,7 +1225,7 @@
 			// so we do not have to do the search again for this package.
 			source = NullPackageSource.getNullPackageSource(pkgName);
 		} else if (result.size() == 1) {
-			// if there is just one source, remember just the single source 
+			// if there is just one source, remember just the single source
 			source = result.get(0);
 		} else {
 			// if there was more than one source, build a multisource and cache that.
@@ -1240,7 +1240,7 @@
 
 	/*
 	 * Gets the package source for the pkgName.  This will include the local package source
-	 * if the bundle exports the package.  This is used to compare the PackageSource of a 
+	 * if the bundle exports the package.  This is used to compare the PackageSource of a
 	 * package from two different bundles.
 	 */
 	public final PackageSource getPackageSource(String pkgName) {
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/BundleLoaderSources.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/BundleLoaderSources.java
index a4a7f75..3b24f87 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/BundleLoaderSources.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/BundleLoaderSources.java
@@ -52,7 +52,7 @@
 	// creates a PackageSource from an ExportPackageDescription.  This is called when initializing
 	// a BundleLoader to ensure that the proper PackageSource gets created and used for
 	// filtered and reexport packages.  The storeSource flag is used by initialize to indicate
-	// that the source for special case package sources (filtered or re-exported should be stored 
+	// that the source for special case package sources (filtered or re-exported should be stored
 	// in the cache.  if this flag is set then a normal SinglePackageSource will not be created
 	// (i.e. it will be created lazily)
 	public PackageSource createPackageSource(ModuleCapability packageCapability, boolean storeSource) {
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/ModuleClassLoader.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/ModuleClassLoader.java
index b511943..31aa057 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/ModuleClassLoader.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/ModuleClassLoader.java
@@ -154,9 +154,9 @@
 	/**
 	 * Loads a class for the bundle.  First delegate.findClass(name) is called.
 	 * The delegate will query the system class loader, bundle imports, bundle
-	 * local classes, bundle hosts and fragments.  The delegate will call 
-	 * BundleClassLoader.findLocalClass(name) to find a class local to this 
-	 * bundle.  
+	 * local classes, bundle hosts and fragments.  The delegate will call
+	 * BundleClassLoader.findLocalClass(name) to find a class local to this
+	 * bundle.
 	 * @param name the name of the class to load.
 	 * @param resolve indicates whether to resolve the loaded class or not.
 	 * @return The Class object.
@@ -199,11 +199,11 @@
 	}
 
 	/**
-	 * Gets a resource for the bundle.  First delegate.findResource(name) is 
+	 * Gets a resource for the bundle.  First delegate.findResource(name) is
 	 * called. The delegate will query the system class loader, bundle imports,
-	 * bundle local resources, bundle hosts and fragments.  The delegate will 
-	 * call BundleClassLoader.findLocalResource(name) to find a resource local 
-	 * to this bundle.  
+	 * bundle local resources, bundle hosts and fragments.  The delegate will
+	 * call BundleClassLoader.findLocalResource(name) to find a resource local
+	 * to this bundle.
 	 * @param name The resource path to get.
 	 * @return The URL of the resource or null if it does not exist.
 	 */
@@ -263,7 +263,7 @@
 	}
 
 	/**
-	 * Finds a library for this bundle.  Simply calls 
+	 * Finds a library for this bundle.  Simply calls
 	 * manager.findLibrary(libname) to find the library.
 	 * @param libname The library to find.
 	 * @return The absolution path to the library or null if not found
@@ -350,7 +350,7 @@
 	 * Creates a ProtectionDomain which uses specified BundleFile and the permissions of the baseDomain
 	 * @param bundlefile The source bundlefile the domain is for.
 	 * @param domainGeneration the source generation for the domain
-	 * @return a ProtectionDomain which uses specified BundleFile and the permissions of the baseDomain 
+	 * @return a ProtectionDomain which uses specified BundleFile and the permissions of the baseDomain
 	 */
 	@SuppressWarnings("deprecation")
 	protected ProtectionDomain createProtectionDomain(BundleFile bundlefile, Generation domainGeneration) {
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/SystemBundleLoader.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/SystemBundleLoader.java
index e8c7f73..11099cf 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/SystemBundleLoader.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/SystemBundleLoader.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -55,7 +55,7 @@
 	}
 
 	/**
-	 * The ClassLoader that loads OSGi framework classes is used to find the class. 
+	 * The ClassLoader that loads OSGi framework classes is used to find the class.
 	 */
 	@Override
 	public Class<?> findLocalClass(String name) {
@@ -100,7 +100,7 @@
 	/**
 	 * The ClassLoader that loads OSGi framework classes is used to find the resource.
 	 * This method never gets called because there is no ModuleClassLoader for the framework.
-	 * @throws IOException 
+	 * @throws IOException
 	 */
 	@Override
 	public Enumeration<URL> findResources(String name) throws IOException {
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/buddy/DependentPolicy.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/buddy/DependentPolicy.java
index 838d9d5..3e8dd60 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/buddy/DependentPolicy.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/buddy/DependentPolicy.java
@@ -24,7 +24,7 @@
 import org.osgi.framework.namespace.PackageNamespace;
 
 /**
- * DependentPolicy is an implementation of a buddy policy. 
+ * DependentPolicy is an implementation of a buddy policy.
  * It is responsible for looking up a class in the dependents of the bundle
  * to which this policy is attached to.
  */
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/buddy/IBuddyPolicy.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/buddy/IBuddyPolicy.java
index f6993fd..704b5d1 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/buddy/IBuddyPolicy.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/buddy/IBuddyPolicy.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/buddy/PolicyHandler.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/buddy/PolicyHandler.java
index 1628544..190ca9c 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/buddy/PolicyHandler.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/buddy/PolicyHandler.java
@@ -190,7 +190,7 @@
 					results = new ArrayList<>(policyCount);
 				while (result.hasMoreElements()) {
 					URL url = result.nextElement();
-					if (!results.contains(url)) //only add if not already added 
+					if (!results.contains(url)) //only add if not already added
 						results.add(url);
 				}
 			}
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/buddy/RegisteredPolicy.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/buddy/RegisteredPolicy.java
index 3546bb4..8bfc83b 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/buddy/RegisteredPolicy.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/buddy/RegisteredPolicy.java
@@ -22,7 +22,7 @@
 import org.eclipse.osgi.internal.loader.BundleLoader;
 
 /**
- *Registered policy is an implementation of a buddy policy. 
+ *Registered policy is an implementation of a buddy policy.
  * It is responsible for looking up a class in the bundles (registrant) that declare interest in the bundle that require the buddy loading.
  * Note that the registrants must have a direct dependency on the bundle needing buddy.
  */
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/buddy/SystemPolicy.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/buddy/SystemPolicy.java
index 9c5eb81..4a5d026 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/buddy/SystemPolicy.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/buddy/SystemPolicy.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/classpath/ClasspathEntry.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/classpath/ClasspathEntry.java
index 5b7882b..d936183 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/classpath/ClasspathEntry.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/classpath/ClasspathEntry.java
@@ -37,9 +37,9 @@
 import org.eclipse.osgi.storage.bundlefile.BundleFile;
 
 /**
- * A ClasspathEntry contains a single <code>BundleFile</code> which is used as 
- * a source to load classes and resources from, and a single 
- * <code>ProtectionDomain</code> which is used as the domain to define classes 
+ * A ClasspathEntry contains a single <code>BundleFile</code> which is used as
+ * a source to load classes and resources from, and a single
+ * <code>ProtectionDomain</code> which is used as the domain to define classes
  * loaded from this ClasspathEntry.
  * @since 3.2
  */
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/classpath/ClasspathManager.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/classpath/ClasspathManager.java
index d4b950f..fa24f45 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/classpath/ClasspathManager.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/classpath/ClasspathManager.java
@@ -51,10 +51,10 @@
 import org.osgi.framework.namespace.HostNamespace;
 
 /**
- * A helper class for {@link ModuleClassLoader} implementations.  This class will keep track of 
- * {@link ClasspathEntry} objects for the host bundle and any attached fragment bundles.  This 
+ * A helper class for {@link ModuleClassLoader} implementations.  This class will keep track of
+ * {@link ClasspathEntry} objects for the host bundle and any attached fragment bundles.  This
  * class takes care of searching the {@link ClasspathEntry} objects for a module class loader
- * implementation.  Additional behavior may be added to a classpath manager by configuring a 
+ * implementation.  Additional behavior may be added to a classpath manager by configuring a
  * {@link ClassLoaderHook}.
  * @see ModuleClassLoader
  * @see ClassLoaderHook
@@ -173,7 +173,7 @@
 	/**
 	 * Finds all the ClasspathEntry objects for the requested classpath.  This method will first call all
 	 * the configured class loading hooks {@link ClassLoaderHook#addClassPathEntry(ArrayList, String, ClasspathManager, Generation)}
-	 * methods.  This allows class loading hooks to add additional ClasspathEntry objects to the result for the 
+	 * methods.  This allows class loading hooks to add additional ClasspathEntry objects to the result for the
 	 * requested classpath.  Then the local host classpath entries and attached fragment classpath entries are
 	 * searched.
 	 * @param result a list of ClasspathEntry objects.  This list is used to add new ClasspathEntry objects to.
@@ -254,12 +254,12 @@
 		if (var.equals("ws")) //$NON-NLS-1$
 			return ClasspathManager.addStandardClassPathEntry(cpEntries, "ws/" + configuration.getWS() + cp.substring(4), hostManager, source); //$NON-NLS-1$
 		if (var.equals("os")) //$NON-NLS-1$
-			return ClasspathManager.addStandardClassPathEntry(cpEntries, "os/" + configuration.getOS() + cp.substring(4), hostManager, source); //$NON-NLS-1$ 
+			return ClasspathManager.addStandardClassPathEntry(cpEntries, "os/" + configuration.getOS() + cp.substring(4), hostManager, source); //$NON-NLS-1$
 		if (var.equals("nl")) { //$NON-NLS-1$
 			cp = cp.substring(4);
 			List<String> NL_JAR_VARIANTS = source.getBundleInfo().getStorage().getConfiguration().ECLIPSE_NL_JAR_VARIANTS;
 			for (String nlVariant : NL_JAR_VARIANTS) {
-				if (ClasspathManager.addStandardClassPathEntry(cpEntries, "nl/" + nlVariant + cp, hostManager, source)) //$NON-NLS-1$ 
+				if (ClasspathManager.addStandardClassPathEntry(cpEntries, "nl/" + nlVariant + cp, hostManager, source)) //$NON-NLS-1$
 					return true;
 			}
 		}
@@ -350,8 +350,8 @@
 
 	/**
 	 * Finds a local resource by searching the ClasspathEntry objects of the classpath manager.
-	 * This method will first call all the configured class loading hooks 
-	 * {@link ClassLoaderHook#preFindLocalResource(String, ClasspathManager)} methods.  Then it 
+	 * This method will first call all the configured class loading hooks
+	 * {@link ClassLoaderHook#preFindLocalResource(String, ClasspathManager)} methods.  Then it
 	 * will search for the resource.  Finally it will call all the configured class loading hooks
 	 * {@link ClassLoaderHook#postFindLocalResource(String, URL, ClasspathManager)} methods.
 	 * @param resource the requested resource name.
@@ -536,15 +536,15 @@
 
 	/**
 	 * Finds a local class by searching the ClasspathEntry objects of the classpath manager.
-	 * This method will first call all the configured class loader hooks 
-	 * {@link ClassLoaderHook#preFindLocalClass(String, ClasspathManager)} methods.  Then it 
+	 * This method will first call all the configured class loader hooks
+	 * {@link ClassLoaderHook#preFindLocalClass(String, ClasspathManager)} methods.  Then it
 	 * will search for the class.  If a class is found then
 	 * <ol>
 	 *   <li>All configured class loader hooks
 	 *       {@link ClassLoaderHook#processClass(String, byte[], ClasspathEntry, BundleEntry, ClasspathManager)}
 	 *       methods will be called.</li>
-	 *   <li>The class is then defined.</li>  
-	 *   <li>Finally, all configured class loading 
+	 *   <li>The class is then defined.</li>
+	 *   <li>Finally, all configured class loading
 	 *       stats hooks {@link ClassLoaderHook#recordClassDefine(String, Class, byte[], ClasspathEntry, BundleEntry, ClasspathManager)}
 	 *       methods are called.</li>
 	 * </ol>
@@ -651,10 +651,10 @@
 	}
 
 	/**
-	 * Defines the specified class.  This method will first call all the configured class loader hooks 
-	 * {@link ClassLoadingHook#processClass(String, byte[], ClasspathEntry, BundleEntry, ClasspathManager)} 
-	 * methods.  If any hook modifies the bytes the all configured hook 
-	 * {@link ClassLoaderHook#rejectTransformation(String, byte[], ClasspathEntry, BundleEntry, ClasspathManager)} 
+	 * Defines the specified class.  This method will first call all the configured class loader hooks
+	 * {@link ClassLoadingHook#processClass(String, byte[], ClasspathEntry, BundleEntry, ClasspathManager)}
+	 * methods.  If any hook modifies the bytes the all configured hook
+	 * {@link ClassLoaderHook#rejectTransformation(String, byte[], ClasspathEntry, BundleEntry, ClasspathManager)}
 	 * methods are called.  Then it will call the {@link ModuleClassLoader#defineClass(String, byte[], ClasspathEntry, BundleEntry)}
 	 * method to define the class. After that, the class loader hooks are called to announce the class
 	 * definition by calling {@link ClassLoaderHook#recordClassDefine(String, Class, byte[], ClasspathEntry, BundleEntry, ClasspathManager)}.
@@ -679,7 +679,7 @@
 			// First call the hooks that do not handle recursion themselves
 			if (!hookRegistry.getContainer().isProcessClassRecursionSupportedByAll()) {
 				// One or more hooks do not support recursive class processing.
-				// We need to detect recursions for this set of hooks. 
+				// We need to detect recursions for this set of hooks.
 				if (context.currentlyProcessing.contains(name)) {
 					// Avoid recursion for the same class name for these hooks
 					recursionDetected = true;
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/classpath/ManifestPackageAttributes.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/classpath/ManifestPackageAttributes.java
index 8d27054..9dec7ab 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/classpath/ManifestPackageAttributes.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/classpath/ManifestPackageAttributes.java
@@ -38,8 +38,8 @@
 	 * Factory method for creating ManifestPackageAttributes.  If any of the given title,
 	 * version, or vendor values are <code>null</code> then the defaultAttributes will be
 	 * used.  If the defaultAttributes is null or returns all <code>null</code> values then
-	 * <code>null</code> values will be used.  If <code>null</code> values are used for all of the 
-	 * versions, titles, and vendors then {@link #NONE} is returned. 
+	 * <code>null</code> values will be used.  If <code>null</code> values are used for all of the
+	 * versions, titles, and vendors then {@link #NONE} is returned.
 	 * @param specificationTitle the package specification title
 	 * @param specificationVersion the package specification version
 	 * @param specificationVendor the package specification vendor
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/classpath/TitleVersionVendor.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/classpath/TitleVersionVendor.java
index 1ed88db..1a754a7 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/classpath/TitleVersionVendor.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/classpath/TitleVersionVendor.java
@@ -27,7 +27,7 @@
 	private final String vendor;
 
 	/**
-	 * Factory for creating TitleVersionVendor objects.  If the given title, version and 
+	 * Factory for creating TitleVersionVendor objects.  If the given title, version and
 	 * vendor are <code>null</code> then {@link #NONE} is returned.
 	 * @param title
 	 * @param version
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/sources/FilteredSourcePackage.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/sources/FilteredSourcePackage.java
index 39d2031..051df33 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/sources/FilteredSourcePackage.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/sources/FilteredSourcePackage.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/sources/MultiSourcePackage.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/sources/MultiSourcePackage.java
index ee7559a..b42472a 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/sources/MultiSourcePackage.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/sources/MultiSourcePackage.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/sources/PackageSource.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/sources/PackageSource.java
index 99471fd..556b07e 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/sources/PackageSource.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/sources/PackageSource.java
@@ -149,7 +149,7 @@
 				@SuppressWarnings("deprecation")
 				Bundle bundle = container.getPackageAdmin().getBundle(serviceClass);
 				if (bundle != null && bundle != registrant)
-					// in this case we have a wacky ServiceFactory that is doing something we cannot 
+					// in this case we have a wacky ServiceFactory that is doing something we cannot
 					// verify if it is correct.  Instead of failing we allow the assignment and hope for the best
 					// bug 326918
 					return true;
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/sources/SingleSourcePackage.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/sources/SingleSourcePackage.java
index a686cd8..204e979 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/sources/SingleSourcePackage.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/loader/sources/SingleSourcePackage.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/location/BasicLocation.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/location/BasicLocation.java
index 45c38d5..7197ef2 100755
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/location/BasicLocation.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/location/BasicLocation.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/location/EquinoxLocations.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/location/EquinoxLocations.java
index f58e50a..0c13ace 100755
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/location/EquinoxLocations.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/location/EquinoxLocations.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Rapicorp, Inc - Support for Mac Layout (bug 431116)
@@ -115,8 +115,8 @@
 			// only compute the default if the configuration area property is not set
 			defaultLocation = buildURL(computeDefaultConfigurationLocation(), true);
 		configurationLocation = buildLocation(PROP_CONFIG_AREA, defaultLocation, "", false, false, null); //$NON-NLS-1$
-		// get the parent location based on the system property. This will have been set on the 
-		// way in either by the caller/user or by main.  There will be no parent location if we are not 
+		// get the parent location based on the system property. This will have been set on the
+		// way in either by the caller/user or by main.  There will be no parent location if we are not
 		// cascaded.
 		URL parentLocation = computeSharedConfigurationLocation();
 		if (parentLocation != null && !parentLocation.equals(configurationLocation.getURL())) {
@@ -183,10 +183,10 @@
 	@SuppressWarnings("deprecation")
 	private Location buildLocation(String property, URL defaultLocation, String userDefaultAppendage, boolean readOnlyDefault, boolean computeReadOnly, String dataAreaPrefix) {
 		String location = equinoxConfig.clearConfiguration(property);
-		// the user/product may specify a non-default readOnly setting   
+		// the user/product may specify a non-default readOnly setting
 		String userReadOnlySetting = equinoxConfig.getConfiguration(property + READ_ONLY_AREA_SUFFIX);
 		boolean readOnly = (userReadOnlySetting == null ? readOnlyDefault : Boolean.valueOf(userReadOnlySetting).booleanValue());
-		// if the instance location is not set, predict where the workspace will be and 
+		// if the instance location is not set, predict where the workspace will be and
 		// put the instance area inside the workspace meta area.
 		if (location == null)
 			return new BasicLocation(property, defaultLocation, userReadOnlySetting != null || !computeReadOnly ? readOnly : !canWrite(defaultLocation), dataAreaPrefix, equinoxConfig, container, debugLocations);
@@ -247,16 +247,16 @@
 			sharedConfigurationURL = new URL(installURL, sharedConfigurationURL.getPath());
 			equinoxConfig.setConfiguration(PROP_SHARED_CONFIG_AREA, sharedConfigurationURL.toExternalForm());
 		} catch (MalformedURLException e) {
-			// do nothing here since it is basically impossible to get a bogus url 
+			// do nothing here since it is basically impossible to get a bogus url
 		}
 		return null;
 	}
 
 	private String computeDefaultConfigurationLocation() {
 		// 1) We store the config state relative to the 'eclipse' directory if possible
-		// 2) If this directory is read-only 
-		//    we store the state in <user.home>/.eclipse/<application-id>_<version> where <user.home> 
-		//    is unique for each local user, and <application-id> is the one 
+		// 2) If this directory is read-only
+		//    we store the state in <user.home>/.eclipse/<application-id>_<version> where <user.home>
+		//    is unique for each local user, and <application-id> is the one
 		//    defined in .eclipseproduct marker file. If .eclipseproduct does not
 		//    exist, use "eclipse" as the application-id.
 
@@ -285,8 +285,8 @@
 	}
 
 	private String computeDefaultUserAreaLocation(String pathAppendage) {
-		//    we store the state in <user.home>/.eclipse/<application-id>_<version> where <user.home> 
-		//    is unique for each local user, and <application-id> is the one 
+		//    we store the state in <user.home>/.eclipse/<application-id>_<version> where <user.home>
+		//    is unique for each local user, and <application-id> is the one
 		//    defined in .eclipseproduct marker file. If .eclipseproduct does not
 		//    exist, use "eclipse" as the application-id.
 		String installProperty = equinoxConfig.getConfiguration(PROP_INSTALL_AREA);
@@ -310,7 +310,7 @@
 					appVersion = ""; //$NON-NLS-1$
 				appName += File.separator + appId + "_" + appVersion + "_" + installDirHash; //$NON-NLS-1$ //$NON-NLS-2$
 			} catch (IOException e) {
-				// Do nothing if we get an exception.  We will default to a standard location 
+				// Do nothing if we get an exception.  We will default to a standard location
 				// in the user's home dir.
 				// add the hash to help prevent collisions
 				appName += File.separator + installDirHash;
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/log/ConfigAdminListener.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/log/ConfigAdminListener.java
index 9252f35..a2d7319 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/log/ConfigAdminListener.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/log/ConfigAdminListener.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/log/EquinoxLogFactory.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/log/EquinoxLogFactory.java
index e24e7bb..99a0d0a 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/log/EquinoxLogFactory.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/log/EquinoxLogFactory.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/log/EquinoxLogServices.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/log/EquinoxLogServices.java
index 8040f90..2efb306 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/log/EquinoxLogServices.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/log/EquinoxLogServices.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -114,7 +114,7 @@
 	private ServiceRegistration<?> perfLogReg;
 
 	/**
-	 * @throws BundleException  
+	 * @throws BundleException
 	 */
 	public void start(BundleContext context) throws BundleException {
 		logServiceManager.start(context);
@@ -123,7 +123,7 @@
 	}
 
 	/**
-	 * @throws BundleException  
+	 * @throws BundleException
 	 */
 	public void stop(BundleContext context) throws BundleException {
 		frameworkLogReg.unregister();
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/log/EquinoxLogWriter.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/log/EquinoxLogWriter.java
index 4e49462..134f4fc 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/log/EquinoxLogWriter.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/log/EquinoxLogWriter.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -43,7 +43,7 @@
 import org.osgi.service.log.admin.LoggerContext;
 
 class EquinoxLogWriter implements SynchronousLogListener, LogFilter {
-	private static final String PASSWORD = "-password"; //$NON-NLS-1$	
+	private static final String PASSWORD = "-password"; //$NON-NLS-1$
 	/** The session tag */
 	private static final String SESSION = "!SESSION"; //$NON-NLS-1$
 	/** The entry tag */
@@ -179,7 +179,7 @@
 	 * @return the session timestamp
 	 */
 	private String getSessionTimestamp() {
-		// Main should have set the session start-up timestamp so return that. 
+		// Main should have set the session start-up timestamp so return that.
 		// Return the "now" time if not available.
 		String ts = environmentInfo.getConfiguration("eclipse.startTime"); //$NON-NLS-1$
 		if (ts != null) {
@@ -233,7 +233,7 @@
 		write(", ARCH=" + environmentInfo.getOSArch()); //$NON-NLS-1$
 		write(", WS=" + environmentInfo.getWS()); //$NON-NLS-1$
 		writeln(", NL=" + environmentInfo.getNL()); //$NON-NLS-1$
-		// Add the command-line arguments used to invoke the platform 
+		// Add the command-line arguments used to invoke the platform
 		// XXX: this includes runtime-private arguments - should we do that?
 		if (includeCommandLine) {
 			writeArgs("Framework arguments: ", environmentInfo.getNonFrameworkArgs()); //$NON-NLS-1$
@@ -303,7 +303,7 @@
 			writeLog(0, logEntry);
 			writer.flush();
 		} catch (Exception e) {
-			// any exceptions during logging should be caught 
+			// any exceptions during logging should be caught
 			System.err.println("An exception occurred while writing to the platform log:");//$NON-NLS-1$
 			e.printStackTrace(System.err);
 			System.err.println("Logging to the console instead.");//$NON-NLS-1$
@@ -326,7 +326,7 @@
 	}
 
 	/**
-	 * @throws IOException  
+	 * @throws IOException
 	 */
 	public synchronized void setFile(File newFile, boolean append) throws IOException {
 		if (newFile != null && !newFile.equals(this.outFile)) {
@@ -591,7 +591,7 @@
 	}
 
 	/**
-	 * Checks the log file size.  If the log file size reaches the limit then the log 
+	 * Checks the log file size.  If the log file size reaches the limit then the log
 	 * is rotated
 	 * @return false if an error occured trying to rotate the log
 	 */
@@ -614,7 +614,7 @@
 				File backupFile = new File(backupFilename);
 				if (backupFile.exists()) {
 					if (!backupFile.delete()) {
-						System.err.println("Error when trying to delete old log file: " + backupFile.getName());//$NON-NLS-1$ 
+						System.err.println("Error when trying to delete old log file: " + backupFile.getName());//$NON-NLS-1$
 						if (backupFile.renameTo(new File(backupFile.getAbsolutePath() + System.currentTimeMillis()))) {
 							System.err.println("So we rename it to filename: " + backupFile.getName()); //$NON-NLS-1$
 						} else {
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/log/EventAdminAdapter.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/log/EventAdminAdapter.java
index cf67343..fe62d5a 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/log/EventAdminAdapter.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/log/EventAdminAdapter.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/log/ExtendedLogReaderServiceFactory.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/log/ExtendedLogReaderServiceFactory.java
index cca82e3..4972ccf 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/log/ExtendedLogReaderServiceFactory.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/log/ExtendedLogReaderServiceFactory.java
@@ -114,7 +114,7 @@
 			// Catch linkage errors as these are generally recoverable but let other Errors propagate (see bug 222001)
 			getErrorStream().println("LogListener.logged threw a non-fatal unchecked exception as follows:"); //$NON-NLS-1$
 			e.printStackTrace(getErrorStream());
-		} 	
+		}
 	}
 
 	public ExtendedLogReaderServiceFactory(int maxHistory, LogLevel defaultLevel) {
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/log/ExtendedLogReaderServiceImpl.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/log/ExtendedLogReaderServiceImpl.java
index 273f9fc..8cd1161 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/log/ExtendedLogReaderServiceImpl.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/log/ExtendedLogReaderServiceImpl.java
@@ -32,7 +32,7 @@
 			throw new IllegalArgumentException("LogListener must not be null"); //$NON-NLS-1$
 
 		if (filter == null)
-			throw new IllegalArgumentException("LogFilter must not be null"); //$NON-NLS-1$		
+			throw new IllegalArgumentException("LogFilter must not be null"); //$NON-NLS-1$
 
 		listeners.add(listener);
 		factory.addLogListener(listener, filter);
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/log/LoggerContextTargetMap.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/log/LoggerContextTargetMap.java
index 2f6c0f8..3dd8719 100755
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/log/LoggerContextTargetMap.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/log/LoggerContextTargetMap.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/permadmin/BundlePermissions.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/permadmin/BundlePermissions.java
index 6168edb..2d874bd 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/permadmin/BundlePermissions.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/permadmin/BundlePermissions.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -22,7 +22,7 @@
 public final class BundlePermissions extends PermissionCollection {
 	private static final long serialVersionUID = -5443618108312606612L;
 
-	// Note that this forces the Enumeration inner class to be loaded as soon as possible (see bug 119069)  
+	// Note that this forces the Enumeration inner class to be loaded as soon as possible (see bug 119069)
 	static final Enumeration<Permission> EMPTY_ENUMERATION = new Enumeration<Permission>() {
 		@Override
 		public boolean hasMoreElements() {
@@ -60,7 +60,7 @@
 	 * <p/>
 	 * Bundles may require additional permissions in order to execute byte code
 	 * woven by weaving hooks.
-	 * 
+	 *
 	 * @param permission The package permission to add to this woven bundle.
 	 * @throws SecurityException If the <code>permission</code>
 	 *         does not have an action of {@link PackagePermission#IMPORT}.
@@ -73,7 +73,7 @@
 
 	@Override
 	public Enumeration<Permission> elements() {
-		// TODO return an empty enumeration for now; 
+		// TODO return an empty enumeration for now;
 		// It does not seem possible to do this properly with multiple exports and conditional permissions.
 		// When looking to fix this be sure the Enumeration class is loaded as soon as possible (see bug 119069)
 		return EMPTY_ENUMERATION;
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/permadmin/EquinoxSecurityManager.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/permadmin/EquinoxSecurityManager.java
index 0234cc8..fed8442 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/permadmin/EquinoxSecurityManager.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/permadmin/EquinoxSecurityManager.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -20,13 +20,13 @@
 import org.osgi.service.condpermadmin.Condition;
 
 /**
- * 
+ *
  * This security manager implements the ConditionalPermission processing for
  * OSGi. It is to be used with ConditionalPermissionAdmin.
- * 
+ *
  */
 public class EquinoxSecurityManager extends SecurityManager {
-	/* 
+	/*
 	 * This is super goofy, but we need to make sure that the CheckContext and
 	 * CheckPermissionAction classes load early. Otherwise, we run into problems later.
 	 */
@@ -96,7 +96,7 @@
 	/**
 	 * Gets the AccessControlContext currently being evaluated by
 	 * the SecurityManager.
-	 * 
+	 *
 	 * @return the AccessControlContext currently being evaluated by the SecurityManager, or
 	 * null if no AccessControlContext is being evaluated. Note: this method will
 	 * return null if the permission check is being done directly on the AccessControlContext
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/permadmin/PermissionAdminTable.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/permadmin/PermissionAdminTable.java
index 49e4db1..54e2d45 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/permadmin/PermissionAdminTable.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/permadmin/PermissionAdminTable.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/permadmin/PermissionInfoCollection.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/permadmin/PermissionInfoCollection.java
index cb05796..e663542 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/permadmin/PermissionInfoCollection.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/permadmin/PermissionInfoCollection.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -69,7 +69,7 @@
 
 	@Override
 	public Enumeration<Permission> elements() {
-		// TODO return an empty enumeration for now; 
+		// TODO return an empty enumeration for now;
 		return BundlePermissions.EMPTY_ENUMERATION;
 	}
 
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/permadmin/SecurityAdmin.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/permadmin/SecurityAdmin.java
index 2555770..4a1ad52 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/permadmin/SecurityAdmin.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/permadmin/SecurityAdmin.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/permadmin/SecurityRow.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/permadmin/SecurityRow.java
index 0dbb366..af9efda 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/permadmin/SecurityRow.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/permadmin/SecurityRow.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Connexta, LLC - performance improvements
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/permadmin/SecurityRowSnapShot.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/permadmin/SecurityRowSnapShot.java
index e9c0b1b..b2b415c 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/permadmin/SecurityRowSnapShot.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/permadmin/SecurityRowSnapShot.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/permadmin/SecurityTable.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/permadmin/SecurityTable.java
index 34aa2a1..ff32046 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/permadmin/SecurityTable.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/permadmin/SecurityTable.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Connexta, LLC - evaluation cache implementation
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/permadmin/SecurityTableUpdate.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/permadmin/SecurityTableUpdate.java
index 1522f8a..e99eafb 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/permadmin/SecurityTableUpdate.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/permadmin/SecurityTableUpdate.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/provisional/service/security/AuthorizationEngine.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/provisional/service/security/AuthorizationEngine.java
index 0d14878..b57c392 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/provisional/service/security/AuthorizationEngine.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/provisional/service/security/AuthorizationEngine.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -38,9 +38,9 @@
 	}
 
 	/**
-	 * Authorizes a <code>SignedContent</code> object.  The engine determines if the 
-	 * signed content authorization should be granted.  The context is the entity 
-	 * associated with the signed content.  For example, signed content 
+	 * Authorizes a <code>SignedContent</code> object.  The engine determines if the
+	 * signed content authorization should be granted.  The context is the entity
+	 * associated with the signed content.  For example, signed content
 	 * for a bundle will have a <code>Bundle</code> object as the context.
 	 * @param content the signed content. The value may be <code>null</code>.
 	 * @param context the context associated with the signed content. The value may be <code>null</code>.
@@ -65,7 +65,7 @@
 	}
 
 	/**
-	 * Authorizes a <code>SignedContent</code> object.  The engine determines if the 
+	 * Authorizes a <code>SignedContent</code> object.  The engine determines if the
 	 * signed content authorization should be granted.
 	 * @param content
 	 * @param context the context associated with the signed content
@@ -76,7 +76,7 @@
 
 	/**
 	 * Return the current status of the Authorization system.
-	 * 
+	 *
 	 * @return A value of {@link AuthorizationStatus#OK} or {@link AuthorizationStatus#ERROR}
 	 * @see AuthorizationStatus#OK
 	 * @see AuthorizationStatus#ERROR
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/provisional/service/security/AuthorizationEvent.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/provisional/service/security/AuthorizationEvent.java
index 41c3147..3798cb6 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/provisional/service/security/AuthorizationEvent.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/provisional/service/security/AuthorizationEvent.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -17,7 +17,7 @@
 
 /**
  * An event that is fired when an AuthorizationEngine implementation makes
- * a decision. 
+ * a decision.
  * @since 3.4
  */
 public class AuthorizationEvent {
@@ -39,7 +39,7 @@
 
 	/**
 	 * Create a new AuthorizationEvent
-	 * @param result - the result code 
+	 * @param result - the result code
 	 * @param content - the signed content
 	 * @param context - operation specific context
 	 * @param severity - severity code
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/provisional/service/security/AuthorizationListener.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/provisional/service/security/AuthorizationListener.java
index 516087e..4284fff 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/provisional/service/security/AuthorizationListener.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/provisional/service/security/AuthorizationListener.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -16,7 +16,7 @@
 import java.util.EventListener;
 
 /**
- * A Listener interface for an authorization handler. Implementors 
+ * A Listener interface for an authorization handler. Implementors
  * should register as an OSGI service.
  * @since 3.4
  */
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/provisional/service/security/AuthorizationStatus.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/provisional/service/security/AuthorizationStatus.java
index 1a6493d..b060888 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/provisional/service/security/AuthorizationStatus.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/provisional/service/security/AuthorizationStatus.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -18,7 +18,7 @@
  * <p>
  * This class is not intended to be extended by clients.
  * </p>
- * 
+ *
  * @since 3.4
  */
 public class AuthorizationStatus {
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/provisional/verifier/CertificateChain.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/provisional/verifier/CertificateChain.java
index 14d9882..f4a9d56 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/provisional/verifier/CertificateChain.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/provisional/verifier/CertificateChain.java
@@ -28,7 +28,7 @@
 public interface CertificateChain {
 	/**
 	 * Returns the list of X500 distinguished names that make up the certificate chain. Each
-	 * distinguished name is separated by a ';'. The first distinguished name is the signer 
+	 * distinguished name is separated by a ';'. The first distinguished name is the signer
 	 * and the last is the root Certificate Authority.
 	 * @return the list of X500 distinguished names that make up the certificate chain
 	 */
@@ -60,7 +60,7 @@
 
 	/**
 	 * Return the signing time for this signer.
-	 * 
+	 *
 	 * @return	null if there is a signing time for this signer null otherwise
 	 */
 	public Date getSigningTime();
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/provisional/verifier/CertificateTrustAuthority.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/provisional/verifier/CertificateTrustAuthority.java
index 324d1ce..ec126b7 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/provisional/verifier/CertificateTrustAuthority.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/provisional/verifier/CertificateTrustAuthority.java
@@ -19,12 +19,12 @@
 
 /**
  * A CertificateTrustAuthority is used to check if certificate chains are trusted.
- * 
+ *
  */
 public interface CertificateTrustAuthority {
 
 	/**
-	 * Determines if the certificates are trusted.  This method will throw a 
+	 * Determines if the certificates are trusted.  This method will throw a
 	 * <code>CertificateException</code> if the specified certificate chain is not trusted.
 	 * @param certChain a chain of certificates
 	 * @throws CertificateException if the certficates are not trusted
@@ -33,7 +33,7 @@
 
 	/**
 	 * Add the specified certificate chain as a trusted certificate chain.
-	 * 
+	 *
 	 * @param certChain a chain of certificates
 	 */
 	public void addTrusted(Certificate[] certChain) throws CertificateException;
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/provisional/verifier/CertificateVerifier.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/provisional/verifier/CertificateVerifier.java
index 96fbf39..b8170bc 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/provisional/verifier/CertificateVerifier.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/provisional/verifier/CertificateVerifier.java
@@ -17,8 +17,8 @@
 import java.security.cert.*;
 
 /**
- * A certificate verifier is used to verify the authenticity of a signed 
- * repository.  A certificate verifier is created using a 
+ * A certificate verifier is used to verify the authenticity of a signed
+ * repository.  A certificate verifier is created using a
  * {@link CertificateVerifierFactory}.
  * <p>
  * <strong>EXPERIMENTAL</strong>. This class or interface has been added as
@@ -30,8 +30,8 @@
 public interface CertificateVerifier {
 	/**
 	 * Verify the content of the repository.
-	 * 
-	 * @throws CertificateException			
+	 *
+	 * @throws CertificateException
 	 * @throws CertificateExpiredException
 	 * @throws CertificateParsingException
 	 * @throws SignatureException
@@ -39,10 +39,10 @@
 	public void checkContent() throws CertificateException, CertificateExpiredException, SignatureException;
 
 	/**
-	 * Verifies the content of the repository.  An array is returned with the entry names 
+	 * Verifies the content of the repository.  An array is returned with the entry names
 	 * which are corrupt.  If no entries are corrupt then an empty array is returned.
-	 * @return An array of entry names which are corrupt.  An empty array is returned if the 
-	 * repository is not corrupt or if the repository is not signed. 
+	 * @return An array of entry names which are corrupt.  An empty array is returned if the
+	 * repository is not corrupt or if the repository is not signed.
 	 */
 	public String[] verifyContent();
 
@@ -54,7 +54,7 @@
 
 	/**
 	 * Returns all certificate chains of the repository.  All certificate chains
-	 * are returned whether they are trusted or not.  If the repository is not signed 
+	 * are returned whether they are trusted or not.  If the repository is not signed
 	 * then an empty array is returned.
 	 * @return all certificate chains of the repository
 	 */
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/provisional/verifier/CertificateVerifierFactory.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/provisional/verifier/CertificateVerifierFactory.java
index 25c91cb..c03e470 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/provisional/verifier/CertificateVerifierFactory.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/provisional/verifier/CertificateVerifierFactory.java
@@ -37,7 +37,7 @@
 
 	/**
 	 * Returns a certificate verifier for the specified bundle.
-	 * @param bundle the bundle to get a verifier for 
+	 * @param bundle the bundle to get a verifier for
 	 * @return a certificate verifier for the specified bundle.
 	 * @throws IOException if an IO exception occurs while reading the bundle content
 	 */
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/service/security/KeyStoreTrustEngine.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/service/security/KeyStoreTrustEngine.java
index 4295da3..47764b5 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/service/security/KeyStoreTrustEngine.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/service/security/KeyStoreTrustEngine.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -46,7 +46,7 @@
 	private final SignedBundleHook signedBundleHook;
 
 	/**
-	 * Create a new KeyStoreTrustEngine that is backed by a KeyStore 
+	 * Create a new KeyStoreTrustEngine that is backed by a KeyStore
 	 * @param path - path to the keystore
 	 * @param type - the type of keystore at the path location
 	 * @param password - the password required to unlock the keystore
@@ -77,7 +77,7 @@
 
 	/**
 	 * Return the password
-	 * @return password - the password as a char[] 
+	 * @return password - the password as a char[]
 	 */
 	private char[] getPassword() {
 		return password;
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/serviceregistry/FilteredServiceListener.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/serviceregistry/FilteredServiceListener.java
index 1a66383..7468872 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/serviceregistry/FilteredServiceListener.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/serviceregistry/FilteredServiceListener.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -73,7 +73,7 @@
 
 	/**
 	 * Receives notification that a service has had a lifecycle change.
-	 * 
+	 *
 	 * @param event The <code>ServiceEvent</code> object.
 	 */
 	@Override
@@ -85,7 +85,7 @@
 			String[] classes = reference.getClasses();
 			int size = classes.length;
 			for (int i = 0; i < size; i++) {
-				if (classes[i] == objectClass) // objectClass strings have previously been interned for identity comparison 
+				if (classes[i] == objectClass) // objectClass strings have previously been interned for identity comparison
 					break objectClassCheck;
 			}
 			return; // no class in this event matches a required part of the filter; we do not need to deliver this event
@@ -117,7 +117,7 @@
 	/**
 	 * Returns a service event that should be delivered to the listener based on the filter evaluation.
 	 * This may result in a service event of type MODIFIED_ENDMATCH.
-	 * 
+	 *
 	 * @param delivered The service event delivered by the framework.
 	 * @return The event to be delivered or null if no event is to be delivered to the listener.
 	 */
@@ -155,7 +155,7 @@
 		return listener.getClass().getName() + "@" + Integer.toHexString(System.identityHashCode(listener)) + filterString; //$NON-NLS-1$
 	}
 
-	/** 
+	/**
 	 * Return the bundle context for the ListenerHook.
 	 * @return The context of the bundle which added the service listener.
 	 * @see org.osgi.framework.hooks.service.ListenerHook.ListenerInfo#getBundleContext()
@@ -165,7 +165,7 @@
 		return context;
 	}
 
-	/** 
+	/**
 	 * Return the filter string for the ListenerHook.
 	 * @return The filter string with which the listener was added. This may
 	 * be <code>null</code> if the listener was added without a filter.
@@ -185,7 +185,7 @@
 	 * indicating the listener has been added but has not been removed.
 	 * After the listener has been removed, this method must always return
 	 * <code>true</code>.
-	 * 
+	 *
 	 * @return <code>false</code> if the listener has not been been removed,
 	 *         <code>true</code> otherwise.
 	 */
@@ -194,7 +194,7 @@
 		return removed;
 	}
 
-	/** 
+	/**
 	 * Mark the service listener registration as removed.
 	 */
 	void markRemoved() {
@@ -203,7 +203,7 @@
 
 	/**
 	 * Returns an objectClass filter string for the specified class name.
-	 * @return A filter string for the specified class name or <code>null</code> if the 
+	 * @return A filter string for the specified class name or <code>null</code> if the
 	 * specified class name is <code>null</code>.
 	 */
 	private static String getObjectClassFilterString(String className) {
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/serviceregistry/HookContext.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/serviceregistry/HookContext.java
index c4fb74c..a16d885 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/serviceregistry/HookContext.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/serviceregistry/HookContext.java
@@ -27,7 +27,7 @@
 
 	/**
 	 * Call the specified hook.
-	 * 
+	 *
 	 * @param hook The hook object to call. The hook object must be of the type
 	 * supported by this hook context. If it is not, then this method will
 	 * simply return.
@@ -38,14 +38,14 @@
 
 	/**
 	 * Return the class name of the hook type supported by this hook context.
-	 * 
+	 *
 	 * @return The class name of the hook type supported by this hook context.
 	 */
 	public String getHookClassName();
 
 	/**
 	 * Return the hook method name called by this hook context.
-	 * 
+	 *
 	 * @return The hook method name called by this hook context.
 	 */
 	public String getHookMethodName();
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/serviceregistry/ModifiedServiceEvent.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/serviceregistry/ModifiedServiceEvent.java
index 247d893..4ae46dc 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/serviceregistry/ModifiedServiceEvent.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/serviceregistry/ModifiedServiceEvent.java
@@ -29,7 +29,7 @@
 
 	/**
 	 * Create a ServiceEvent containing the service properties prior to modification.
-	 * 
+	 *
 	 * @param reference Reference to service with modified properties.
 	 * @param previousProperties Service properties prior to modification.
 	 */
@@ -42,7 +42,7 @@
 
 	/**
 	 * Return the service event of type MODIFIED.
-	 * 
+	 *
 	 * @return The service event of type MODIFIED.
 	 */
 	ServiceEvent getModifiedEvent() {
@@ -51,7 +51,7 @@
 
 	/**
 	 * Return the service event of type MODIFIED_ENDMATCH.
-	 * 
+	 *
 	 * @return The service event of type MODIFIED_ENDMATCH.
 	 */
 	ServiceEvent getModifiedEndMatchEvent() {
@@ -59,15 +59,15 @@
 	}
 
 	/**
-	 * Return if the specified filter matches the previous service 
+	 * Return if the specified filter matches the previous service
 	 * properties.
-	 * 
-	 * @param filter The filer to evaluate using the previous service 
+	 *
+	 * @param filter The filer to evaluate using the previous service
 	 * properties.
 	 * @return True is the filter matches the previous service properties.
 	 */
 	boolean matchPreviousProperties(Filter filter) {
-		/* We use matches here since ServiceProperties already 
+		/* We use matches here since ServiceProperties already
 		 * does case insensitive lookup.
 		 */
 		return filter.matches(previousProperties);
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/serviceregistry/PrototypeServiceFactoryUse.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/serviceregistry/PrototypeServiceFactoryUse.java
index 12bda08..20a25f8 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/serviceregistry/PrototypeServiceFactoryUse.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/serviceregistry/PrototypeServiceFactoryUse.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -24,11 +24,11 @@
 
 /**
  * This class represents the use of a service by a bundle. One is created for each
- * service acquired by a bundle. 
- * 
+ * service acquired by a bundle.
+ *
  * <p>
  * This class manages a prototype service factory.
- * 
+ *
  * @ThreadSafe
  */
 public class PrototypeServiceFactoryUse<S> extends ServiceFactoryUse<S> {
@@ -49,9 +49,9 @@
 
 	/**
 	 * Create a new service object for the service.
-	 * 
+	 *
 	 * <p>
-	 * 
+	 *
 	 * @return The service object.
 	 */
 	/* @GuardedBy("this") */
@@ -79,7 +79,7 @@
 
 	/**
 	 * Release a service object for the service.
-	 * 
+	 *
 	 * @param service The service object to release.
 	 * @return true if the service was released; otherwise false.
 	 * @throws IllegalArgumentException If the specified service was not
@@ -105,7 +105,7 @@
 
 	/**
 	 * Release all uses of the service and reset the use count to zero.
-	 * 
+	 *
 	 * <ol>
 	 * <li>The bundle's use count for this service is set to zero.
 	 * <li>The {@link PrototypeServiceFactory#ungetService(Bundle, ServiceRegistration, Object)} method
@@ -127,7 +127,7 @@
 
 	/**
 	 * Is this service use using any services?
-	 * 
+	 *
 	 * @return true if no services are being used and this service use can be discarded.
 	 */
 	/* @GuardedBy("this") */
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/serviceregistry/ServiceConsumer.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/serviceregistry/ServiceConsumer.java
index 192f830..1e62ea9 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/serviceregistry/ServiceConsumer.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/serviceregistry/ServiceConsumer.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -16,10 +16,10 @@
 
 /**
  * Closure to allow sharing the same code for getting and ungetting a service.
- * The {@link #prototypeConsumer} closure must be used for calls from 
+ * The {@link #prototypeConsumer} closure must be used for calls from
  * ServiceObjects and the {@link #singletonConsumer} closure must be used
  * for calls from BundleContext.
- * 
+ *
  * The closure instance calls the correct method on the specified ServiceUse
  * object for the current service consumer type.
  */
@@ -56,7 +56,7 @@
 
 	/**
 	 * Get a service for the consumer.
-	 * 
+	 *
 	 * @param use Service Use object to get the service from.
 	 * @return The obtained service.
 	 */
@@ -64,7 +64,7 @@
 
 	/**
 	 * Unget the service for the consumer.
-	 * 
+	 *
 	 * @param use Service Use object to unget the service from.
 	 * @param service The Service to unget.
 	 * @return true if the service was ungotten, false otherwise.
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/serviceregistry/ServiceFactoryUse.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/serviceregistry/ServiceFactoryUse.java
index cd55b5b..18dff7b 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/serviceregistry/ServiceFactoryUse.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/serviceregistry/ServiceFactoryUse.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -24,11 +24,11 @@
 
 /**
  * This class represents the use of a service by a bundle. One is created for each
- * service acquired by a bundle. 
- * 
+ * service acquired by a bundle.
+ *
  * <p>
  * This class manages a service factory.
- * 
+ *
  * @ThreadSafe
  */
 public class ServiceFactoryUse<S> extends ServiceUse<S> {
@@ -73,7 +73,7 @@
 	 * is called to create a service object for the context bundle.
 	 * This service object is cached.
 	 * While the use count is greater than zero,
-	 * subsequent calls to get the service object 
+	 * subsequent calls to get the service object
 	 * will return the cached service object.
 	 * <br>If the service object returned by the {@link ServiceFactory}
 	 * is not an <code>instanceof</code>
@@ -127,7 +127,7 @@
 
 	/**
 	 * Unget a service's service object.
-	 * 
+	 *
 	 * <p>
 	 * Decrements the use count if the service was being used.
 	 *
@@ -166,7 +166,7 @@
 
 	/**
 	 * Release all uses of the service and reset the use count to zero.
-	 * 
+	 *
 	 * <ol>
 	 * <li>The bundle's use count for this service is set to zero.
 	 * <li>The {@link ServiceFactory#ungetService(Bundle, ServiceRegistration, Object)} method
@@ -203,7 +203,7 @@
 
 	/**
 	 *  Call the service factory to get the service.
-	 *  
+	 *
 	 * @return The service returned by the factory or null if there was an error.
 	 */
 	/* @GuardedBy("this") */
@@ -223,7 +223,7 @@
 			}
 			// allow the adaptor to handle this unexpected error
 			context.getContainer().handleRuntimeError(t);
-			ServiceException se = new ServiceException(NLS.bind(Msg.SERVICE_FACTORY_EXCEPTION, factory.getClass().getName(), "getService"), ServiceException.FACTORY_EXCEPTION, t); //$NON-NLS-1$ 
+			ServiceException se = new ServiceException(NLS.bind(Msg.SERVICE_FACTORY_EXCEPTION, factory.getClass().getName(), "getService"), ServiceException.FACTORY_EXCEPTION, t); //$NON-NLS-1$
 			context.getContainer().getEventPublisher().publishFrameworkEvent(FrameworkEvent.ERROR, registration.getBundle(), se);
 			return null;
 		}
@@ -253,7 +253,7 @@
 
 	/**
 	 *  Call the service factory to unget the service.
-	 *  
+	 *
 	 *  @param service The service object to pass to the factory.
 	 */
 	/* @GuardedBy("this") */
@@ -272,7 +272,7 @@
 				Debug.printStackTrace(t);
 			}
 
-			ServiceException se = new ServiceException(NLS.bind(Msg.SERVICE_FACTORY_EXCEPTION, factory.getClass().getName(), "ungetService"), ServiceException.FACTORY_EXCEPTION, t); //$NON-NLS-1$ 
+			ServiceException se = new ServiceException(NLS.bind(Msg.SERVICE_FACTORY_EXCEPTION, factory.getClass().getName(), "ungetService"), ServiceException.FACTORY_EXCEPTION, t); //$NON-NLS-1$
 			context.getContainer().getEventPublisher().publishFrameworkEvent(FrameworkEvent.ERROR, registration.getBundle(), se);
 		}
 	}
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/serviceregistry/ServiceObjectsImpl.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/serviceregistry/ServiceObjectsImpl.java
index da22a81..6b92427 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/serviceregistry/ServiceObjectsImpl.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/serviceregistry/ServiceObjectsImpl.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -44,7 +44,7 @@
 	/**
 	 * Returns a service object for the {@link #getServiceReference()
 	 * referenced} service.
-	 * 
+	 *
 	 * <p>
 	 * This {@code ServiceObjects} object can be used to obtain multiple service
 	 * objects for the referenced service if the service has
@@ -54,11 +54,11 @@
 	 * as calling the {@link BundleContext#getService(ServiceReference)} method
 	 * for the referenced service. That is, only one, use-counted service object
 	 * is available from this {@link ServiceObjects} object.
-	 * 
+	 *
 	 * <p>
 	 * This method will always return {@code null} when the referenced service
 	 * has been unregistered.
-	 * 
+	 *
 	 * <p>
 	 * For a prototype scope service, the following steps are required to get
 	 * the service object:
@@ -76,7 +76,7 @@
 	 * {@link ServiceException} describing the error is fired.</li>
 	 * <li>The service object is returned.</li>
 	 * </ol>
-	 * 
+	 *
 	 * @return A service object for the referenced service or {@code null} if
 	 *         the service is not registered, the service object returned by a
 	 *         {@code ServiceFactory} does not implement the classes under which
@@ -95,7 +95,7 @@
 	/**
 	 * Releases a service object for the {@link #getServiceReference()
 	 * referenced} service.
-	 * 
+	 *
 	 * <p>
 	 * This {@code ServiceObjects} object can be used to obtain multiple service
 	 * objects for the referenced service if the service has
@@ -105,7 +105,7 @@
 	 * as calling the {@link BundleContext#ungetService(ServiceReference)}
 	 * method for the referenced service. That is, only one, use-counted service
 	 * object is available from this {@link ServiceObjects} object.
-	 * 
+	 *
 	 * <p>
 	 * For a prototype scope service, the following steps are required to
 	 * release the service object:
@@ -116,11 +116,11 @@
 	 * {@link PrototypeServiceFactory#ungetService(Bundle, ServiceRegistration, Object)}
 	 * method is called to release the specified service object.</li>
 	 * </ol>
-	 * 
+	 *
 	 * <p>
 	 * The specified service object must no longer be used and all references to
 	 * it should be destroyed after calling this method.
-	 * 
+	 *
 	 * @param service A service object previously provided by this
 	 *        {@code ServiceObjects} object.
 	 * @throws IllegalStateException If the BundleContext used to create this
@@ -144,7 +144,7 @@
 	/**
 	 * Returns the {@link ServiceReference} for the service associated with this
 	 * {@code ServiceObjects} object.
-	 * 
+	 *
 	 * @return The {@link ServiceReference} for the service associated with this
 	 *         {@code ServiceObjects} object.
 	 */
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/serviceregistry/ServiceProperties.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/serviceregistry/ServiceProperties.java
index 982d002..29ac598 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/serviceregistry/ServiceProperties.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/serviceregistry/ServiceProperties.java
@@ -23,7 +23,7 @@
 
 /**
  * Service properties.
- * 
+ *
  * Supports case-insensitive key lookup.
  */
 class ServiceProperties extends CaseInsensitiveDictionaryMap<String, Object> {
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/serviceregistry/ServiceReferenceImpl.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/serviceregistry/ServiceReferenceImpl.java
index a1887a7..3cafc16 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/serviceregistry/ServiceReferenceImpl.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/serviceregistry/ServiceReferenceImpl.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -19,7 +19,7 @@
 
 /**
  * A reference to a service.
- * 
+ *
  * <p>
  * The Framework returns <code>ServiceReference</code> objects from the
  * <code>BundleContext.getServiceReference</code> and
@@ -40,7 +40,7 @@
  * If the same service object is registered multiple times,
  * <code>ServiceReference</code> objects associated with different
  * <code>ServiceRegistration</code> objects are not equal.
- * 
+ *
  * @see BundleContext#getServiceReference
  * @see BundleContext#getServiceReferences
  * @see BundleContext#getService
@@ -66,16 +66,16 @@
 	 * Returns the property value to which the specified property key is mapped
 	 * in the properties <code>Dictionary</code> object of the service
 	 * referenced by this <code>ServiceReference</code> object.
-	 * 
+	 *
 	 * <p>
 	 * Property keys are case-insensitive.
-	 * 
+	 *
 	 * <p>
 	 * This method must continue to return property values after the service has
 	 * been unregistered. This is so references to unregistered services (for
 	 * example, <code>ServiceReference</code> objects stored in the log) can
 	 * still be interrogated.
-	 * 
+	 *
 	 * @param key The property key.
 	 * @return The property value to which the key is mapped; <code>null</code>
 	 *         if there is no property named after the key.
@@ -89,20 +89,20 @@
 	 * Returns an array of the keys in the properties <code>Dictionary</code>
 	 * object of the service referenced by this <code>ServiceReference</code>
 	 * object.
-	 * 
+	 *
 	 * <p>
 	 * This method will continue to return the keys after the service has been
 	 * unregistered. This is so references to unregistered services (for
 	 * example, <code>ServiceReference</code> objects stored in the log) can
 	 * still be interrogated.
-	 * 
+	 *
 	 * <p>
 	 * This method is <i>case-preserving </i>; this means that every key in the
 	 * returned array must have the same case as the corresponding key in the
 	 * properties <code>Dictionary</code> that was passed to the
 	 * {@link BundleContext#registerService(String[],Object,java.util.Dictionary)}
 	 * or {@link ServiceRegistration#setProperties} methods.
-	 * 
+	 *
 	 * @return An array of property keys.
 	 */
 	@Override
@@ -113,12 +113,12 @@
 	/**
 	 * Returns the bundle that registered the service referenced by this
 	 * <code>ServiceReference</code> object.
-	 * 
+	 *
 	 * <p>
 	 * This method must return <code>null</code> when the service has been
 	 * unregistered. This can be used to determine if the service has been
 	 * unregistered.
-	 * 
+	 *
 	 * @return The bundle that registered the service referenced by this
 	 *         <code>ServiceReference</code> object; <code>null</code> if
 	 *         that service has already been unregistered.
@@ -133,12 +133,12 @@
 	 * Returns the bundles that are using the service referenced by this
 	 * <code>ServiceReference</code> object. Specifically, this method returns
 	 * the bundles whose usage count for that service is greater than zero.
-	 * 
+	 *
 	 * @return An array of bundles whose usage count for the service referenced
 	 *         by this <code>ServiceReference</code> object is greater than
 	 *         zero; <code>null</code> if no bundles are currently using that
 	 *         service.
-	 * 
+	 *
 	 * @since 1.1
 	 */
 	@Override
@@ -163,14 +163,14 @@
 	 * package source of the specified bundle then return <code>true</code>;
 	 * otherwise return <code>false</code>.</li>
 	 * </ol>
-	 * 
+	 *
 	 * @param bundle The <code>Bundle</code> object to check.
 	 * @param className The class name to check.
 	 * @return <code>true</code> if the bundle which registered the service
 	 *         referenced by this <code>ServiceReference</code> and the
 	 *         specified bundle use the same source for the package of the
 	 *         specified class name. Otherwise <code>false</code> is returned.
-	 * 
+	 *
 	 * @since 1.3
 	 */
 	@Override
@@ -181,7 +181,7 @@
 	/**
 	 * Compares this <code>ServiceReference</code> with the specified
 	 * <code>ServiceReference</code> for order.
-	 * 
+	 *
 	 * <p>
 	 * If this <code>ServiceReference</code> and the specified
 	 * <code>ServiceReference</code> have the same
@@ -196,7 +196,7 @@
 	 * <code>ServiceReference</code> if it has a higher
 	 * {@link Constants#SERVICE_ID service id} and greater if it has a lower
 	 * service id.
-	 * 
+	 *
 	 * @param object The <code>ServiceReference</code> to be compared.
 	 * @return Returns a negative integer, zero, or a positive integer if this
 	 *         <code>ServiceReference</code> is less than, equal to, or
@@ -270,7 +270,7 @@
 
 	/**
 	 * Return the ServiceRegistrationImpl for this ServiceReferenceImpl.
-	 * 
+	 *
 	 * @return The ServiceRegistrationImpl for this ServiceReferenceImpl.
 	 */
 	public ServiceRegistrationImpl<S> getRegistration() {
@@ -309,7 +309,7 @@
 	 * {@link ServiceRegistration#setProperties(Dictionary)} must be called to
 	 * modify the properties of the service.</li>
 	 * </ul>
-	 * 
+	 *
 	 * @return A copy of the properties of the service referenced by this
 	 *         {@code ServiceReference} object
 	 * @since 1.9
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/serviceregistry/ServiceRegistrationImpl.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/serviceregistry/ServiceRegistrationImpl.java
index 9c9f09b..09a0c82 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/serviceregistry/ServiceRegistrationImpl.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/serviceregistry/ServiceRegistrationImpl.java
@@ -35,7 +35,7 @@
  * the service. This implies that if a
  * bundle wants to keep its service registered, it should keep the
  * ServiceRegistration object referenced.
- * 
+ *
  * @ThreadSafe
  */
 public class ServiceRegistrationImpl<S> implements ServiceRegistration<S>, Comparable<ServiceRegistrationImpl<?>> {
@@ -57,7 +57,7 @@
 	/* @GuardedBy("registrationLock") */
 	private ServiceReferenceImpl<S> reference;
 
-	/** List of contexts using the service. 
+	/** List of contexts using the service.
 	 * List&lt;BundleContextImpl&gt;.
 	 * */
 	/* @GuardedBy("registrationLock") */
@@ -258,7 +258,7 @@
 
 	/**
 	 * Is this registration unregistered?
-	 * 
+	 *
 	 * @return true if unregistered; otherwise false.
 	 */
 	boolean isUnregistered() {
@@ -454,7 +454,7 @@
 	}
 
 	/**
-	 * This method returns the bundle which registered the 
+	 * This method returns the bundle which registered the
 	 * service regardless of the registration status of this
 	 * service registration.  This is not an OSGi specified
 	 * method.
@@ -529,7 +529,7 @@
 				}
 				S serviceObject = consumer.getService(use);
 				/* if the service factory failed to return an object and
-				 * we created the service use, then remove the 
+				 * we created the service use, then remove the
 				 * optimistically added ServiceUse. */
 				if ((serviceObject == null) && added) {
 					synchronized (servicesInUse) {
@@ -546,7 +546,7 @@
 
 	/**
 	 * Create a new ServiceObjects for the requesting bundle.
-	 * 
+	 *
 	 * @param user The requesting bundle.
 	 * @return A new ServiceObjects for this service and the requesting bundle.
 	 */
@@ -563,7 +563,7 @@
 
 	/**
 	 * Create a new ServiceUse object for this service and user.
-	 * 
+	 *
 	 * @param user The bundle using this service.
 	 * @return The ServiceUse object for the bundle using this service.
 	 */
@@ -717,12 +717,12 @@
 	/**
 	 * Compares this <code>ServiceRegistrationImpl</code> with the specified
 	 * <code>ServiceRegistrationImpl</code> for order.
-	 * 
+	 *
 	 * <p>
 	 * This does a reverse comparison so that the highest item is sorted to the left.
 	 * We keep ServiceRegistationImpls in sorted lists such that the highest
 	 * ranked service is at element 0 for quick retrieval.
-	 * 
+	 *
 	 * @param other The <code>ServiceRegistrationImpl</code> to be compared.
 	 * @return Returns a negative integer, zero, or a positive integer if this
 	 *         <code>ServiceRegistrationImpl</code> is greater than, equal to, or
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/serviceregistry/ServiceRegistry.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/serviceregistry/ServiceRegistry.java
index d53f3b2..36ceb97 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/serviceregistry/ServiceRegistry.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/serviceregistry/ServiceRegistry.java
@@ -60,9 +60,9 @@
 import org.osgi.framework.hooks.service.ListenerHook.ListenerInfo;
 
 /**
- * The Service Registry. This class is the main control point for service 
+ * The Service Registry. This class is the main control point for service
  * layer operations in the framework.
- * 
+ *
  * @ThreadSafe
  */
 public class ServiceRegistry {
@@ -74,23 +74,23 @@
 	static final String eventListenerHookName = EventListenerHook.class.getName();
 	static final String listenerHookName = ListenerHook.class.getName();
 
-	/** Published services by class name. 
-	 * The {@literal List<ServiceRegistrationImpl<?>>}s are both sorted 
+	/** Published services by class name.
+	 * The {@literal List<ServiceRegistrationImpl<?>>}s are both sorted
 	 * in the natural order of ServiceRegistrationImpl and also are sets in that
 	 * there must be no two entries in a List which are equal.
 	 */
 	/* @GuardedBy("this") */
 	private final Map<String, List<ServiceRegistrationImpl<?>>> publishedServicesByClass;
 
-	/** All published services. 
+	/** All published services.
 	 * The List is both sorted in the natural order of ServiceRegistrationImpl and also is a
 	 * set in that there must be no two entries in the List which are equal.
 	 */
 	/* @GuardedBy("this") */
 	private final List<ServiceRegistrationImpl<?>> allPublishedServices;
 
-	/** Published services by BundleContextImpl.  
-	 * The {@literal List<ServiceRegistrationImpl<?>>}s are NOT sorted 
+	/** Published services by BundleContextImpl.
+	 * The {@literal List<ServiceRegistrationImpl<?>>}s are NOT sorted
 	 * and also are sets in that
 	 * there must be no two entries in a List which are equal.
 	 */
@@ -142,12 +142,12 @@
 	 * bundles. The registering bundle is defined to be the context bundle.
 	 * Other bundles can locate the service by using either the
 	 * {@link #getServiceReferences} or {@link #getServiceReference} method.
-	 * 
+	 *
 	 * <p>
 	 * A bundle can register a service object that implements the
 	 * {@link ServiceFactory} interface to have more flexibility in providing
 	 * service objects to other bundles.
-	 * 
+	 *
 	 * <p>
 	 * The following steps are required to register a service:
 	 * <ol>
@@ -168,7 +168,7 @@
 	 * <li>A <code>ServiceRegistration</code> object for this registration is
 	 * returned.
 	 * </ol>
-	 * 
+	 *
 	 * @param context The BundleContext of the registering bundle.
 	 * @param clazzes The class names under which the service can be located.
 	 *        The class names in this array will be stored in the service's
@@ -183,11 +183,11 @@
 	 *        {@link ServiceRegistration#setProperties} method must be called.
 	 *        The set of properties may be <code>null</code> if the service
 	 *        has no properties.
-	 * 
+	 *
 	 * @return A <code>ServiceRegistrationImpl</code> object for use by the bundle
 	 *         registering the service to update the service's properties or to
 	 *         unregister the service.
-	 * 
+	 *
 	 * @throws java.lang.IllegalArgumentException If one of the following is
 	 *         true:
 	 *         <ul>
@@ -198,15 +198,15 @@
 	 *         <li><code>properties</code> contains case variants of the same
 	 *         key name.
 	 *         </ul>
-	 * 
+	 *
 	 * @throws java.lang.SecurityException If the caller does not have the
 	 *         <code>ServicePermission</code> to register the service for all
 	 *         the named classes and the Java Runtime Environment supports
 	 *         permissions.
-	 * 
+	 *
 	 * @throws java.lang.IllegalStateException If this BundleContext is no
 	 *         longer valid.
-	 * 
+	 *
 	 * @see ServiceRegistration
 	 * @see ServiceFactory
 	 */
@@ -269,23 +269,23 @@
 	 * criteria, and the packages for the class names under which the services
 	 * were registered match the context bundle's packages as defined in
 	 * {@link ServiceReference#isAssignableTo(Bundle, String)}.
-	 * 
+	 *
 	 * <p>
 	 * The list is valid at the time of the call to this method, however since
 	 * the Framework is a very dynamic environment, services can be modified or
 	 * unregistered at anytime.
-	 * 
+	 *
 	 * <p>
 	 * <code>filter</code> is used to select the registered service whose
 	 * properties objects contain keys and values which satisfy the filter. See
 	 * {@link Filter} for a description of the filter string syntax.
-	 * 
+	 *
 	 * <p>
 	 * If <code>filter</code> is <code>null</code>, all registered services
 	 * are considered to match the filter. If <code>filter</code> cannot be
 	 * parsed, an {@link InvalidSyntaxException} will be thrown with a human
 	 * readable message where the filter became unparsable.
-	 * 
+	 *
 	 * <p>
 	 * The following steps are required to select a set of
 	 * <code>ServiceReferenceImpl</code> objects:
@@ -320,7 +320,7 @@
 	 * <li>An array of the remaining <code>ServiceReferenceImpl</code> objects is
 	 * returned.
 	 * </ol>
-	 * 
+	 *
 	 * @param context The BundleContext of the requesting bundle.
 	 * @param clazz The class name with which the service was registered or
 	 *        <code>null</code> for all services.
@@ -379,12 +379,12 @@
 	/**
 	 * Returns a <code>ServiceReference</code> object for a service that
 	 * implements and was registered under the specified class.
-	 * 
+	 *
 	 * <p>
 	 * This <code>ServiceReference</code> object is valid at the time of the
 	 * call to this method, however as the Framework is a very dynamic
 	 * environment, services can be modified or unregistered at anytime.
-	 * 
+	 *
 	 * <p>
 	 * This method is the same as calling
 	 * {@link BundleContext#getServiceReferences(String, String)} with a
@@ -398,7 +398,7 @@
 	 * If there is a tie in ranking, the service with the lowest service ID (as
 	 * specified in its {@link Constants#SERVICE_ID} property); that is, the
 	 * service that was registered first is returned.
-	 * 
+	 *
 	 * @param context The BundleContext of the requesting bundle.
 	 * @param clazz The class name with which the service was registered.
 	 * @return A <code>ServiceReference</code> object, or <code>null</code>
@@ -441,11 +441,11 @@
 	 * <p>
 	 * When a bundle's use count for a service drops to zero, the bundle should
 	 * no longer use that service.
-	 * 
+	 *
 	 * <p>
 	 * This method will always return <code>null</code> when the service
 	 * associated with this <code>reference</code> has been unregistered.
-	 * 
+	 *
 	 * <p>
 	 * The following steps are required to get the service object:
 	 * <ol>
@@ -470,7 +470,7 @@
 	 * describing the error is fired.
 	 * <li>The service object for the service is returned.
 	 * </ol>
-	 * 
+	 *
 	 * @param context The BundleContext of the requesting bundle.
 	 * @param reference A reference to the service.
 	 * @return A service object for the service associated with
@@ -497,7 +497,7 @@
 	/**
 	 * Returns the {@link ServiceObjects} object for the service referenced by
 	 * the specified {@code ServiceReference} object.
-	 * 
+	 *
 	 * <p>
 	 * The {@link ServiceObjects} object can be used to obtain multiple
 	 * service objects for services with {@link Constants#SCOPE_PROTOTYPE
@@ -509,11 +509,11 @@
 	 * the {@link BundleContext#ungetService(ServiceReference)} method. That is, only one,
 	 * use-counted service object is available from the {@link ServiceObjects}
 	 * object.
-	 * 
+	 *
 	 * <p>
 	 * This method will always return {@code null} when the service associated
 	 * with the specified {@code reference} has been unregistered.
-	 * 
+	 *
 	 * @param <S> Type of Service.
 	 * @param context The BundleContext of the requesting bundle.
 	 * @param reference A reference to the service.
@@ -536,12 +536,12 @@
 	 * for the service is zero, this method returns <code>false</code>.
 	 * Otherwise, the context bundle's use count for the service is decremented
 	 * by one.
-	 * 
+	 *
 	 * <p>
 	 * The service's service object should no longer be used and all references
 	 * to it should be destroyed when a bundle's use count for the service drops
 	 * to zero.
-	 * 
+	 *
 	 * <p>
 	 * The following steps are required to unget the service object:
 	 * <ol>
@@ -556,7 +556,7 @@
 	 * method is called to release the service object for the context bundle.
 	 * <li><code>true</code> is returned.
 	 * </ol>
-	 * 
+	 *
 	 * @param context The BundleContext of the requesting bundle.
 	 * @param reference A reference to the service to be released.
 	 * @return <code>false</code> if the context bundle's use count for the
@@ -577,18 +577,18 @@
 	 * Returns this bundle's <code>ServiceReference</code> list for all
 	 * services it has registered or <code>null</code> if this bundle has no
 	 * registered services.
-	 * 
+	 *
 	 * <p>
 	 * If the Java runtime supports permissions, a <code>ServiceReference</code>
 	 * object to a service is included in the returned list only if the caller
 	 * has the <code>ServicePermission</code> to get the service using at
 	 * least one of the named classes the service was registered under.
-	 * 
+	 *
 	 * <p>
 	 * The list is valid at the time of the call to this method, however, as the
 	 * Framework is a very dynamic environment, services can be modified or
 	 * unregistered at anytime.
-	 * 
+	 *
 	 * @param context The BundleContext of the requesting bundle.
 	 * @return An array of <code>ServiceReference</code> objects or
 	 *         <code>null</code>.
@@ -629,7 +629,7 @@
 	 * services it is using or returns <code>null</code> if this bundle is not
 	 * using any services. A bundle is considered to be using a service if its
 	 * use count for that service is greater than zero.
-	 * 
+	 *
 	 * <p>
 	 * If the Java Runtime Environment supports permissions, a
 	 * <code>ServiceReference</code> object to a service is included in the
@@ -640,7 +640,7 @@
 	 * The list is valid at the time of the call to this method, however, as the
 	 * Framework is a very dynamic environment, services can be modified or
 	 * unregistered at anytime.
-	 * 
+	 *
 	 * @param context The BundleContext of the requesting bundle.
 	 * @return An array of <code>ServiceReference</code> objects or
 	 *         <code>null</code>.
@@ -689,7 +689,7 @@
 	/**
 	 * Called when the BundleContext is closing to unregister all services
 	 * currently registered by the bundle.
-	 * 
+	 *
 	 * @param context The BundleContext of the closing bundle.
 	 */
 	public void unregisterServices(BundleContextImpl context) {
@@ -706,7 +706,7 @@
 	/**
 	 * Called when the BundleContext is closing to unget all services
 	 * currently used by the bundle.
-	 * 
+	 *
 	 * @param context The BundleContext of the closing bundle.
 	 */
 	public void releaseServicesInUse(BundleContextImpl context) {
@@ -731,7 +731,7 @@
 
 	/**
 	 * Add a new Service Listener for a bundle.
-	 * 
+	 *
 	 * @param context Context of bundle adding listener.
 	 * @param listener Service Listener to be added.
 	 * @param filter Filter string for listener or null.
@@ -766,7 +766,7 @@
 
 	/**
 	 * Remove a Service Listener for a bundle.
-	 * 
+	 *
 	 * @param context Context of bundle removing listener.
 	 * @param listener Service Listener to be removed.
 	 */
@@ -795,7 +795,7 @@
 
 	/**
 	 * Remove all Service Listener for a bundle.
-	 * 
+	 *
 	 * @param context Context of bundle removing all listeners.
 	 */
 	public void removeAllServiceListeners(BundleContextImpl context) {
@@ -826,7 +826,7 @@
 
 	/**
 	 * Deliver a ServiceEvent.
-	 * 
+	 *
 	 * @param event The ServiceEvent to deliver.
 	 */
 	public void publishServiceEvent(final ServiceEvent event) {
@@ -909,7 +909,7 @@
 
 	/**
 	 * Return the next available service id.
-	 * 
+	 *
 	 * @return next service id.
 	 */
 	synchronized long getNextServiceId() {
@@ -920,7 +920,7 @@
 
 	/**
 	 * Add the ServiceRegistrationImpl to the data structure.
-	 * 
+	 *
 	 * @param context The BundleContext of the bundle registering the service.
 	 * @param registration The new ServiceRegistration.
 	 */
@@ -959,7 +959,7 @@
 
 	/**
 	 * Modify the ServiceRegistrationImpl in the data structure.
-	 * 
+	 *
 	 * @param context The BundleContext of the bundle registering the service.
 	 * @param registration The modified ServiceRegistration.
 	 */
@@ -990,7 +990,7 @@
 
 	/**
 	 * Remove the ServiceRegistrationImpl from the data structure.
-	 * 
+	 *
 	 * @param context The BundleContext of the bundle registering the service.
 	 * @param registration The ServiceRegistration to remove.
 	 */
@@ -1018,7 +1018,7 @@
 
 	/**
 	 * Lookup Service Registrations in the data structure by class name and filter.
-	 * 
+	 *
 	 * @param clazz The class name with which the service was registered or
 	 *        <code>null</code> for all services.
 	 * @param filter The filter criteria.
@@ -1064,7 +1064,7 @@
 
 	/**
 	 * Lookup Service Registrations in the data structure by BundleContext.
-	 * 
+	 *
 	 * @param context The BundleContext for which to return Service Registrations.
 	 * @return List<ServiceRegistrationImpl>
 	 */
@@ -1081,7 +1081,7 @@
 
 	/**
 	 * Remove Service Registrations in the data structure by BundleContext.
-	 * 
+	 *
 	 * @param context The BundleContext for which to remove Service Registrations.
 	 */
 	private synchronized void removeServiceRegistrations(BundleContextImpl context) {
@@ -1090,7 +1090,7 @@
 
 	/**
 	 * Check for permission to register a service.
-	 * 
+	 *
 	 * The caller must have permission for ALL names.
 	 */
 	private static void checkRegisterServicePermission(String[] names) {
@@ -1130,8 +1130,8 @@
 		return domain.implies(new ServicePermission(event.getServiceReference(), ServicePermission.GET));
 	}
 
-	/** 
-	 * Return the name of the class that is not satisfied by the service object. 
+	/**
+	 * Return the name of the class that is not satisfied by the service object.
 	 * @param clazzes Array of class names.
 	 * @param serviceObject Service object.
 	 * @return The name of the class that is not satisfied by the service object.
@@ -1184,7 +1184,7 @@
 	 * Call the registered FindHook services to allow them to inspect and possibly shrink the result.
 	 * The FindHook must be called in order: descending by service.ranking, then ascending by service.id.
 	 * This is the natural order for ServiceReference.
-	 * 
+	 *
 	 * @param context The context of the bundle getting the service references.
 	 * @param clazz The class name used to search for the service references.
 	 * @param filterstring The filter used to search for the service references.
@@ -1238,13 +1238,13 @@
 	 * Call the registered EventHook services to allow them to inspect and possibly shrink the result.
 	 * The EventHooks must be called in order: descending by service.ranking, then ascending by service.id.
 	 * This is the natural order for ServiceReference.
-	 * 
+	 *
 	 * @param event The service event to be delivered.
 	 * @param result The result to return to the caller which may have been shrunk by the EventHooks.
 	 */
 	private void notifyEventHooksPrivileged(final ServiceEvent event, final Collection<BundleContext> result) {
 		if (debug.DEBUG_HOOKS) {
-			Debug.println("notifyServiceEventHooks(" + event.getType() + ":" + event.getServiceReference() + "," + result + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ 
+			Debug.println("notifyServiceEventHooks(" + event.getType() + ":" + event.getServiceReference() + "," + result + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
 		}
 		notifyHooksPrivileged(new HookContext() {
 			@SuppressWarnings("deprecation")
@@ -1276,13 +1276,13 @@
 	 * Call the registered EventListenerHook services to allow them to inspect and possibly shrink the result.
 	 * The EventListenerHooks must be called in order: descending by service.ranking, then ascending by service.id.
 	 * This is the natural order for ServiceReference.
-	 * 
+	 *
 	 * @param event The service event to be delivered.
 	 * @param result The result to return to the caller which may have been shrunk by the EventListenerHooks.
 	 */
 	private void notifyEventListenerHooksPrivileged(final ServiceEvent event, final Map<BundleContext, Collection<ListenerInfo>> result) {
 		if (debug.DEBUG_HOOKS) {
-			Debug.println("notifyServiceEventListenerHooks(" + event.getType() + ":" + event.getServiceReference() + "," + result + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ 
+			Debug.println("notifyServiceEventListenerHooks(" + event.getType() + ":" + event.getServiceReference() + "," + result + ")"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$
 		}
 		notifyHooksPrivileged(new HookContext() {
 			@Override
@@ -1311,7 +1311,7 @@
 
 	/**
 	 * Calls all hook services of the type specified by the hook context.
-	 * 
+	 *
 	 * @param hookContext Context to use when calling the hook services.
 	 */
 	public void notifyHooksPrivileged(HookContext hookContext) {
@@ -1326,7 +1326,7 @@
 
 	/**
 	 * Call a hook service via a hook context.
-	 * 
+	 *
 	 * @param context Context of the bundle to get the hook service.
 	 * @param registration Hook service to call.
 	 * @param hookContext Context to use when calling the hook service.
@@ -1358,7 +1358,7 @@
 	/**
 	 * Call a newly registered ListenerHook service to provide the current collection of
 	 * service listeners.
-	 * 
+	 *
 	 * @param registration The newly registered ListenerHook service.
 	 */
 	private void notifyNewListenerHook(final ServiceRegistrationImpl<?> registration) {
@@ -1378,7 +1378,7 @@
 
 	void notifyNewListenerHookPrivileged(ServiceRegistrationImpl<?> registration) {
 		if (debug.DEBUG_HOOKS) {
-			Debug.println("notifyServiceNewListenerHook(" + registration + ")"); //$NON-NLS-1$ //$NON-NLS-2$ 
+			Debug.println("notifyServiceNewListenerHook(" + registration + ")"); //$NON-NLS-1$ //$NON-NLS-2$
 		}
 
 		// snapshot the listeners
@@ -1421,9 +1421,9 @@
 	 * Call the registered ListenerHook services to notify them of newly added or removed service listeners.
 	 * The ListenerHook must be called in order: descending by service.ranking, then ascending by service.id.
 	 * This is the natural order for ServiceReference.
-	 * 
-	 * @param listeners A non-empty, unmodifiable collection of ListenerInfo objects. 
-	 * All elements in the list must be for the same bundle. 
+	 *
+	 * @param listeners A non-empty, unmodifiable collection of ListenerInfo objects.
+	 * All elements in the list must be for the same bundle.
 	 * @param added <code>true</code> if the specified listeners are being added. <code>false</code>
 	 * if they are being removed.
 	 */
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/serviceregistry/ServiceUse.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/serviceregistry/ServiceUse.java
index 54b0ef0..7575322 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/serviceregistry/ServiceUse.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/serviceregistry/ServiceUse.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -20,11 +20,11 @@
 
 /**
  * This class represents the use of a service by a bundle. One is created for each
- * service acquired by a bundle. 
- * 
+ * service acquired by a bundle.
+ *
  * <p>
  * This class manages a singleton service.
- * 
+ *
  * @ThreadSafe
  */
 public class ServiceUse<S> {
@@ -60,10 +60,10 @@
 
 	/**
 	 * Unget a service's service object.
-	 * 
+	 *
 	 * <p>
 	 * Decrements the use count if the service was being used.
-	 * 
+	 *
 	 * @return true if the service was ungotten; otherwise false.
 	 */
 	/* @GuardedBy("this") */
@@ -88,10 +88,10 @@
 
 	/**
 	 * Get a new service object for the service.
-	 * 
+	 *
 	 * <p>
 	 * By default, this returns the result of {@link #getService()}.
-	 * 
+	 *
 	 * @return The service object.
 	 */
 	/* @GuardedBy("this") */
@@ -101,10 +101,10 @@
 
 	/**
 	 * Release a service object for the service.
-	 * 
+	 *
 	 * <p>
 	 * By default, this returns the result of {@link #ungetService()}.
-	 * 
+	 *
 	 * @param service The service object to release.
 	 * @return true if the service was released; otherwise false.
 	 * @throws IllegalArgumentException If the specified service was not
@@ -129,7 +129,7 @@
 
 	/**
 	 * Is this service use using any services?
-	 * 
+	 *
 	 * @return true if no services are being used and this service use can be discarded.
 	 */
 	/* @GuardedBy("this") */
@@ -140,7 +140,7 @@
 
 	/**
 	 * Is the use count non zero?
-	 * 
+	 *
 	 * @return true if the use count is greater than zero.
 	 */
 	/* @GuardedBy("this") */
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/serviceregistry/ShrinkableCollection.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/serviceregistry/ShrinkableCollection.java
index 43e41bd..f770d9d 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/serviceregistry/ShrinkableCollection.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/serviceregistry/ShrinkableCollection.java
@@ -19,12 +19,12 @@
 /**
  * A Shrinkable Collection. This class provides a wrapper for a list of collections
  * that allows items to be removed from the wrapped collections (shrinking) but
- * does not allow items to be added to the wrapped collections. 
- * 
+ * does not allow items to be added to the wrapped collections.
+ *
  * <p>
  * The collections must act as sets in that each collection in the list
  * must not have two entries which are equal.
- * 
+ *
  * <p>
  * All the optional <code>Collection</code> operations except
  * <code>add</code> and <code>addAll</code> are supported. Attempting to add to the
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/serviceregistry/ShrinkableValueCollectionMap.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/serviceregistry/ShrinkableValueCollectionMap.java
index b3190ba..34b337d 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/serviceregistry/ShrinkableValueCollectionMap.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/serviceregistry/ShrinkableValueCollectionMap.java
@@ -120,7 +120,7 @@
 		}
 	}
 
-	/** 
+	/**
 	 * Iterator class used for entry sets.
 	 */
 	private final class EntryIterator implements Iterator<Map.Entry<K, Collection<V>>> {
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/signedcontent/BERProcessor.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/signedcontent/BERProcessor.java
index 9c6742a..567c78a 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/signedcontent/BERProcessor.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/signedcontent/BERProcessor.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -83,11 +83,11 @@
 	/**
 	 * Constructs a BERProcessor to operate on the passed buffer. The first structure in the
 	 * buffer will be processed before this method returns.
-	 * 
+	 *
 	 * @param buffer the buffer containing the BER structures.
 	 * @param offset the offset into <code>buffer</code> to the start of the first structure.
 	 * @param len the length of the BER structure.
-	 * @throws SignatureException 
+	 * @throws SignatureException
 	 */
 	public BERProcessor(byte buffer[], int offset, int len) throws SignatureException {
 		this.buffer = buffer;
@@ -98,7 +98,7 @@
 
 	/**
 	 * Parse the structure found at the current <code>offset</code> into <code>buffer</code>.
-	 * Most methods, constructor, and stepinto, will call this method automatically. If 
+	 * Most methods, constructor, and stepinto, will call this method automatically. If
 	 * <code>offset</code> is modified outside of those methods, this method will need to
 	 * be invoked.
 	 */
@@ -197,7 +197,7 @@
 
 	/**
 	 * Returns a BERProcessor for the content of the current structure.
-	 * @throws SignatureException 
+	 * @throws SignatureException
 	 */
 	public BERProcessor stepInto() throws SignatureException {
 		return new BERProcessor(buffer, contentOffset, contentLength);
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/signedcontent/Base64.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/signedcontent/Base64.java
index d6d5528..940b6b5 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/signedcontent/Base64.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/signedcontent/Base64.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -26,7 +26,7 @@
 	 * This method decodes the byte array in base 64 encoding into a char array
 	 * Base 64 encoding has to be according to the specification given by the
 	 * RFC 1521 (5.2).
-	 * 
+	 *
 	 * @param data the encoded byte array
 	 * @return the decoded byte array
 	 */
@@ -110,7 +110,7 @@
 
 	/**
 	 * This method converts a Base 64 digit to its numeric value.
-	 * 
+	 *
 	 * @param data digit (character) to convert
 	 * @return value for the digit
 	 */
@@ -135,7 +135,7 @@
 	/**
 	 * This method encodes the byte array into a char array in base 64 according
 	 * to the specification given by the RFC 1521 (5.2).
-	 * 
+	 *
 	 * @param data the encoded char array
 	 * @return the byte array that needs to be encoded
 	 */
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/signedcontent/DigestedInputStream.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/signedcontent/DigestedInputStream.java
index 3c39a4f..812bcad 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/signedcontent/DigestedInputStream.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/signedcontent/DigestedInputStream.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -40,12 +40,12 @@
 	 * Constructs an InputStream that uses another InputStream as a source and
 	 * calculates the digest. At the end of the stream an exception will be
 	 * thrown if the calculated digest doesn't match the passed digest.
-	 * 
+	 *
 	 * @param in the stream to use as an input source.
 	 * @param signerInfos the signers.
 	 * @param results the expected digest.
-	 * @throws IOException 
-	 * @throws NoSuchAlgorithmException 
+	 * @throws IOException
+	 * @throws NoSuchAlgorithmException
 	 */
 	DigestedInputStream(BundleEntry entry, BundleFile bundleFile, SignerInfo[] signerInfos, byte results[][], long size) throws IOException, NoSuchAlgorithmException {
 		super(entry.getInputStream());
@@ -77,7 +77,7 @@
 	/**
 	 * Read a byte from the InputStream. Digests are calculated on reads. At the
 	 * end of the stream the calculated digests must match the expected digests.
-	 * 
+	 *
 	 * @return the character read or -1 at end of stream.
 	 * @throws IOException if there was an problem reading the byte or at the
 	 *         end of the stream the calculated digests do not match the
@@ -115,7 +115,7 @@
 	/**
 	 * Read bytes from the InputStream. Digests are calculated on reads. At the
 	 * end of the stream the calculated digests must match the expected digests.
-	 * 
+	 *
 	 * @return the number of characters read or -1 at end of stream.
 	 * @throws IOException if there was an problem reading or at the
 	 *         end of the stream the calculated digests do not match the
@@ -143,7 +143,7 @@
 
 	/**
 	 * Not supported.
-	 * 
+	 *
 	 * @throws IOException always thrown if this method is called since mark/reset is not supported.
 	 * @see java.io.InputStream#reset()
 	 */
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/signedcontent/PKCS7DateParser.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/signedcontent/PKCS7DateParser.java
index 1e394f8..7bb56d4 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/signedcontent/PKCS7DateParser.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/signedcontent/PKCS7DateParser.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors: IBM Corporation - initial API and implementation
  ******************************************************************************/
 package org.eclipse.osgi.internal.signedcontent;
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/signedcontent/PKCS7Processor.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/signedcontent/PKCS7Processor.java
index 394ce01..d8db5d5 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/signedcontent/PKCS7Processor.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/signedcontent/PKCS7Processor.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors: IBM Corporation - initial API and implementation
  ******************************************************************************/
 package org.eclipse.osgi.internal.signedcontent;
@@ -228,7 +228,7 @@
 				int noS = dateString.indexOf('Z') - 1 - dotIndex;
 				dateFormatSB.append('.');
 
-				// append s	
+				// append s
 				for (int i = 0; i < noS; i++) {
 					dateFormatSB.append('s');
 				}
@@ -237,8 +237,8 @@
 
 			try {
 				// if the current locale is th_TH, or ja_JP_JP, then our dateFormat object will end up with
-				// a calendar such as Buddhist or Japanese Imperial Calendar, and the signing time will be 
-				// incorrect ... so always use English as the locale for parsing the time, resulting in a 
+				// a calendar such as Buddhist or Japanese Imperial Calendar, and the signing time will be
+				// incorrect ... so always use English as the locale for parsing the time, resulting in a
 				// Gregorian calendar
 				DateFormat dateFormt = new SimpleDateFormat(dateFormatSB.toString(), Locale.ENGLISH);
 				dateFormt.setTimeZone(TimeZone.getTimeZone("GMT")); //$NON-NLS-1$
@@ -305,7 +305,7 @@
 	}
 
 	private Certificate processSignerInfos(BERProcessor bp, List<Certificate> certs) throws CertificateException, NoSuchAlgorithmException, SignatureException {
-		// We assume there is only one SingerInfo element 
+		// We assume there is only one SingerInfo element
 
 		// PKCS7: SignerINFOS processing
 		bp = bp.stepInto(); // Step into the set of signerinfos
@@ -317,7 +317,7 @@
 			throw new CertificateException(SignedContentMessages.PKCS7_SignerInfo_Version_Not_Supported);
 		}
 
-		// PKCS7: version CMSVersion 
+		// PKCS7: version CMSVersion
 		bp.stepOver(); // Skip the version
 
 		// PKCS7: sid [SignerIdentifier : issuerAndSerialNumber or subjectKeyIdentifer]
@@ -367,7 +367,7 @@
 		// PKCS7: signature
 		signature = bp.getBytes();
 
-		// PKCS7: Step into the unsignedAttrs, 
+		// PKCS7: Step into the unsignedAttrs,
 		bp.stepOver();
 
 		// process the unsigned attributes if there is any
@@ -383,7 +383,7 @@
 			// there are some unsignedAttrs are found!!
 			unsignedAttrs = new HashMap<>();
 
-			// step into a set of unsigned attributes, I believe, when steps 
+			// step into a set of unsigned attributes, I believe, when steps
 			// into here, the 'poiter' is pointing to the first element
 			BERProcessor unsignedAttrsBERS = bp.stepInto();
 			do {
@@ -445,7 +445,7 @@
 
 	/**
 	 * Return a map of signed attributes, the key(objid) = value(PKCSBlock in bytes for the key)
-	 * 
+	 *
 	 * @return  map if there is any signed attributes, null otherwise
 	 */
 	public Map<int[], byte[]> getUnsignedAttrs() {
@@ -454,7 +454,7 @@
 
 	/**
 	 * Return a map of signed attributes, the key(objid) = value(PKCSBlock in bytes for the key)
-	 * 
+	 *
 	 * @return  map if there is any signed attributes, null otherwise
 	 */
 	public Map<int[], byte[]> getSignedAttrs() {
@@ -462,12 +462,12 @@
 	}
 
 	/**
-	 * 
+	 *
 	 * @param bp
 	 * @return		a List of certificates from target cert to root cert in order
-	 * 
+	 *
 	 * @throws CertificateException
-	 * @throws SignatureException 
+	 * @throws SignatureException
 	 */
 	private List<Certificate> processCertificates(BERProcessor bp) throws CertificateException, SignatureException {
 		List<Certificate> rtvList = new ArrayList<>(3);
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/signedcontent/SignatureBlockProcessor.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/signedcontent/SignatureBlockProcessor.java
index e3eb1a3..defe49a 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/signedcontent/SignatureBlockProcessor.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/signedcontent/SignatureBlockProcessor.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors: IBM Corporation - initial API and implementation
  ******************************************************************************/
 package org.eclipse.osgi.internal.signedcontent;
@@ -103,7 +103,7 @@
 		be = bf.getEntry(signer.substring(0, dotIndex) + DOT_SF);
 		byte sfBytes[] = readIntoArray(be);
 
-		// Step 1, verify the .SF file is signed by the private key that corresponds to the public key 
+		// Step 1, verify the .SF file is signed by the private key that corresponds to the public key
 		// in the .RSA/.DSA file
 		String baseFile = bf.getBaseFile() != null ? bf.getBaseFile().toString() : null;
 		PKCS7Processor processor = new PKCS7Processor(pkcs7Bytes, 0, pkcs7Bytes.length, signer, baseFile);
@@ -138,7 +138,7 @@
 
 	/**
 	 * Verify the digest listed in each entry in the .SF file with corresponding section in the manifest
-	 * @throws SignatureException 
+	 * @throws SignatureException
 	 */
 	private void verifyManifestAndSignatureFile(byte[] manifestBytes, byte[] sfBytes) throws SignatureException {
 
@@ -163,7 +163,7 @@
 					manifestDigest = calculateDigest(getMessageDigest(digestName), manifestBytes);
 				off += digestManifestSearchLen;
 
-				// find out the index of first '\n' after the -Digest-Manifest: 
+				// find out the index of first '\n' after the -Digest-Manifest:
 				int nIndex = sf.indexOf('\n', off);
 				String digestValue = sf.substring(off, nIndex - 1);
 
@@ -334,10 +334,10 @@
 	}
 
 	/**
-	 * Read the .SF file abd assuming that same digest algorithm will be used through out the whole 
-	 * .SF file.  That digest algorithm name in the last entry will be returned. 
-	 * 
-	 * @param SFBuf			a .SF file in bytes 
+	 * Read the .SF file abd assuming that same digest algorithm will be used through out the whole
+	 * .SF file.  That digest algorithm name in the last entry will be returned.
+	 *
+	 * @param SFBuf			a .SF file in bytes
 	 * @return				the digest algorithm name used in the .SF file
 	 */
 	private static String getDigAlgFromSF(byte SFBuf[]) {
@@ -378,16 +378,16 @@
 	}
 
 	/**
-	 * 
+	 *
 	 * @param manifestEntry contains a single MF file entry of the format
 	 * 				   "Name: foo"
 	 * 				   "MD5-Digest: [base64 encoded MD5 digest data]"
 	 * 				   "SHA1-Digest: [base64 encoded SHA1 digest dat]"
-	 * 
+	 *
 	 * @param	desireDigestAlg	a string representing the desire digest value to be returned if there are
 	 * 							multiple digest lines.
 	 * 							If this value is null, return whatever digest value is in the entry.
-	 * 
+	 *
 	 * @return this function returns a digest line based on the desire digest algorithm value
 	 * 		   (since only MD5 and SHA1 are recognized here),
 	 * 		   or a 'null' will be returned if none of the digest algorithms
@@ -445,8 +445,8 @@
 
 	/**
 	 * Return the Message Digest name
-	 * 
-	 * @param digLine		the message digest line is in the following format.  That is in the 
+	 *
+	 * @param digLine		the message digest line is in the following format.  That is in the
 	 * 						following format:
 	 * 								DIGEST_NAME-digest: digest value
 	 * @return				a string representing a message digest.
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/signedcontent/SignedContentConstants.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/signedcontent/SignedContentConstants.java
index 11deee0..3847cfd 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/signedcontent/SignedContentConstants.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/signedcontent/SignedContentConstants.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors: IBM Corporation - initial API and implementation
  ******************************************************************************/
 
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/signedcontent/SignedContentFile.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/signedcontent/SignedContentFile.java
index b80afe1..60890c2 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/signedcontent/SignedContentFile.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/signedcontent/SignedContentFile.java
@@ -20,9 +20,9 @@
 import org.eclipse.osgi.signedcontent.*;
 
 /*
- * This class is used by the SignedContentFactory to create SignedContent objects from File objects.  This is needed 
- * to avoid leaving the underlying ZipFiles open for the SignedContent objects returned from the 
- * SignedContentFactory (bug 225090) 
+ * This class is used by the SignedContentFactory to create SignedContent objects from File objects.  This is needed
+ * to avoid leaving the underlying ZipFiles open for the SignedContent objects returned from the
+ * SignedContentFactory (bug 225090)
  */
 public class SignedContentFile implements SignedContent {
 
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/signedcontent/SignedContentImpl.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/signedcontent/SignedContentImpl.java
index 3270235..5b741d0 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/signedcontent/SignedContentImpl.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/signedcontent/SignedContentImpl.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors: IBM Corporation - initial API and implementation
  ******************************************************************************/
 package org.eclipse.osgi.internal.signedcontent;
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/signedcontent/SignedContentMessages.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/signedcontent/SignedContentMessages.java
index bf4b4b8..f128b27 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/signedcontent/SignedContentMessages.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/signedcontent/SignedContentMessages.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/signedcontent/SignedStorageHook.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/signedcontent/SignedStorageHook.java
index 4222cef..6c112f7 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/signedcontent/SignedStorageHook.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/signedcontent/SignedStorageHook.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors: IBM Corporation - initial API and implementation
  ******************************************************************************/
 package org.eclipse.osgi.internal.signedcontent;
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/signedcontent/SignerInfoImpl.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/signedcontent/SignerInfoImpl.java
index de7de15..fa41624 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/signedcontent/SignerInfoImpl.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/signedcontent/SignerInfoImpl.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors: IBM Corporation - initial API and implementation
  ******************************************************************************/
 package org.eclipse.osgi.internal.signedcontent;
@@ -57,7 +57,7 @@
 			result += cert.hashCode();
 		}
 		// Note that we do not hash based on trustAnchor;
-		// this changes dynamically but we need a constant hashCode for purposes of 
+		// this changes dynamically but we need a constant hashCode for purposes of
 		// hashing in a Set.
 		return result;
 	}
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/signedcontent/TrustEngineListener.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/signedcontent/TrustEngineListener.java
index b3b5fc8..e745e88 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/signedcontent/TrustEngineListener.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/signedcontent/TrustEngineListener.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors: IBM Corporation - initial API and implementation
  ******************************************************************************/
 package org.eclipse.osgi.internal.signedcontent;
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/url/ContentHandlerFactoryImpl.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/url/ContentHandlerFactoryImpl.java
index 077ade0..f6d2fbb 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/url/ContentHandlerFactoryImpl.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/url/ContentHandlerFactoryImpl.java
@@ -35,7 +35,7 @@
  * The ContentHandlerFactory is registered with the JVM to provide content handlers
  * to requestors.  The ContentHandlerFactory will first look for built-in content handlers.
  * If a built in handler exists, this factory will return null.  Otherwise, this ContentHandlerFactory
- * will search the service registry for a maching Content-Handler and, if found, return a 
+ * will search the service registry for a maching Content-Handler and, if found, return a
  * proxy for that content handler.
  */
 public class ContentHandlerFactoryImpl extends MultiplexingFactory implements java.net.ContentHandlerFactory {
@@ -88,7 +88,7 @@
 				try {
 					clazz = URLStreamHandlerFactoryImpl.secureAction.loadSystemClass(name.toString());
 					if (clazz != null) {
-						return (null); //this class exists, it is a built in handler, let the JVM handle it	
+						return (null); //this class exists, it is a built in handler, let the JVM handle it
 					}
 				} catch (ClassNotFoundException ex) {
 					//keep looking
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/url/ContentHandlerProxy.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/url/ContentHandlerProxy.java
index 0c2051d..f182360 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/url/ContentHandlerProxy.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/url/ContentHandlerProxy.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -25,7 +25,7 @@
 /**
  * The ContentHandlerProxy is a ContentHandler that acts as a proxy for registered ContentHandlers.
  * When a ContentHandler is requested from the ContentHandlerFactory and it exists in the service
- * registry, a ContentHandlerProxy is created which will pass all the requests from the requestor to 
+ * registry, a ContentHandlerProxy is created which will pass all the requests from the requestor to
  * the real ContentHandler.  We can't return the real ContentHandler from the ContentHandlerFactory
  * because the JVM caches ContentHandlers and therefore would not support a dynamic environment of
  * ContentHandlers being registered and unregistered.
@@ -47,7 +47,7 @@
 		this.context = context;
 		this.contentType = contentType;
 
-		// In case the reference == null, the proxy is constructed with DefaultContentHandler for a Content Handler 
+		// In case the reference == null, the proxy is constructed with DefaultContentHandler for a Content Handler
 		// until a real ContentHandler for this mime-type is registered
 		setNewHandler(reference, getRank(reference));
 
@@ -105,7 +105,7 @@
 		int newrank = getRank(reference);
 		if (reference == contentHandlerServiceReference) {
 			if (newrank < ranking) {
-				// The ContentHandler we are currently using has dropped it's ranking below a ContentHandler 
+				// The ContentHandler we are currently using has dropped it's ranking below a ContentHandler
 				// registered for the same protocol.  We need to swap out ContentHandlers.
 				// this should get us the highest ranked service, if available
 				ServiceReference<ContentHandler> newReference = contentHandlerServiceTracker.getServiceReference();
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/url/EquinoxFactoryManager.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/url/EquinoxFactoryManager.java
index 5691124..7c55f0e 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/url/EquinoxFactoryManager.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/url/EquinoxFactoryManager.java
@@ -65,7 +65,7 @@
 		Object lock = getURLStreamHandlerFactoryLock();
 		synchronized (lock) {
 			URLStreamHandlerFactory factory = (URLStreamHandlerFactory) factoryField.get(null);
-			// doing a null check here just in case, but it would be really strange if it was null, 
+			// doing a null check here just in case, but it would be really strange if it was null,
 			// because we failed to set the factory normally!!
 			if (factory != null) {
 				try {
@@ -134,7 +134,7 @@
 			throw new Exception("Could not find ContentHandlerFactory field"); //$NON-NLS-1$
 		synchronized (URLConnection.class) {
 			java.net.ContentHandlerFactory factory = (java.net.ContentHandlerFactory) factoryField.get(null);
-			// doing a null check here just in case, but it would be really strange if it was null, 
+			// doing a null check here just in case, but it would be really strange if it was null,
 			// because we failed to set the factory normally!!
 
 			if (factory != null) {
@@ -148,7 +148,7 @@
 					factory = chf;
 				}
 			}
-			// null out the field so that we can successfully call setContentHandlerFactory			
+			// null out the field so that we can successfully call setContentHandlerFactory
 			factoryField.set(null, null);
 			// always attempt to clear the handlers cache
 			// This allows an optimization for the single framework use-case
@@ -221,7 +221,7 @@
 					Method unregister = factory.getClass().getMethod("unregister", new Class[] {Object.class}); //$NON-NLS-1$
 					unregister.invoke(factory, new Object[] {contentHandlerFactory});
 				}
-				// null out the field so that we can successfully call setContentHandlerFactory									
+				// null out the field so that we can successfully call setContentHandlerFactory
 				factoryField.set(null, null);
 				// always attempt to clear the handlers cache
 				// This allows an optomization for the single framework use-case
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/url/MultiplexingContentHandler.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/url/MultiplexingContentHandler.java
index 87ea74c..08f6a6f 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/url/MultiplexingContentHandler.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/url/MultiplexingContentHandler.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  *******************************************************************************/
 package org.eclipse.osgi.internal.url;
 
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/url/MultiplexingFactory.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/url/MultiplexingFactory.java
index ec38d9b..0470a7a 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/url/MultiplexingFactory.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/url/MultiplexingFactory.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  *******************************************************************************/
 package org.eclipse.osgi.internal.url;
 
@@ -31,7 +31,7 @@
 import org.osgi.framework.FrameworkUtil;
 
 /*
- * An abstract class for handler factory impls (Stream and Content) that can 
+ * An abstract class for handler factory impls (Stream and Content) that can
  * handle environments running multiple osgi frameworks with the same VM.
  */
 public abstract class MultiplexingFactory {
@@ -159,7 +159,7 @@
 		Object successor = released.remove(0);
 		try {
 			Class<?> clazz = successor.getClass();
-			Method register = clazz.getMethod("register", new Class[] {Object.class}); //$NON-NLS-1$		
+			Method register = clazz.getMethod("register", new Class[] {Object.class}); //$NON-NLS-1$
 			for (Object r : released) {
 				register.invoke(successor, new Object[] {r});
 			}
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/url/NullURLStreamHandlerService.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/url/NullURLStreamHandlerService.java
index 474a7e9..6e828d6 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/url/NullURLStreamHandlerService.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/url/NullURLStreamHandlerService.java
@@ -23,7 +23,7 @@
  * The NullURLStreamService is created when a registered URLStreamHandler service
  * with an associated URLStreamHandlerProxy becomes unregistered.  The associated
  * URLStreamHandlerProxy must still handle all future requests for the now unregistered
- * scheme (the JVM caches URLStreamHandlers making up impossible to "unregister" them). 
+ * scheme (the JVM caches URLStreamHandlers making up impossible to "unregister" them).
  * When requests come in for an unregistered URLStreamHandlerService, the
  * NullURLStreamHandlerService is used in it's place.
  */
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/url/URLStreamHandlerFactoryImpl.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/url/URLStreamHandlerFactoryImpl.java
index d74f030..ddad3ba 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/url/URLStreamHandlerFactoryImpl.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/url/URLStreamHandlerFactoryImpl.java
@@ -74,7 +74,7 @@
 			try {
 				clazz = secureAction.loadSystemClass(name.toString());
 				if (clazz != null)
-					return clazz; //this class exists, it is a built in handler	
+					return clazz; //this class exists, it is a built in handler
 			} catch (ClassNotFoundException ex) {
 				// keep looking
 			}
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/url/URLStreamHandlerProxy.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/url/URLStreamHandlerProxy.java
index 7cb6567..eb58562 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/url/URLStreamHandlerProxy.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/url/URLStreamHandlerProxy.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -25,17 +25,17 @@
 import org.osgi.util.tracker.ServiceTrackerCustomizer;
 
 /**
- * The URLStreamHandlerProxy is a URLStreamHandler that acts as a proxy for registered 
- * URLStreamHandlerServices.  When a URLStreamHandler is requested from the URLStreamHandlerFactory 
- * and it exists in the service registry, a URLStreamHandlerProxy is created which will pass all the 
- * requests from the requestor to the real URLStreamHandlerService.  We can't return the real 
- * URLStreamHandlerService from the URLStreamHandlerFactory because the JVM caches URLStreamHandlers 
- * and therefore would not support a dynamic environment of URLStreamHandlerServices being registered 
+ * The URLStreamHandlerProxy is a URLStreamHandler that acts as a proxy for registered
+ * URLStreamHandlerServices.  When a URLStreamHandler is requested from the URLStreamHandlerFactory
+ * and it exists in the service registry, a URLStreamHandlerProxy is created which will pass all the
+ * requests from the requestor to the real URLStreamHandlerService.  We can't return the real
+ * URLStreamHandlerService from the URLStreamHandlerFactory because the JVM caches URLStreamHandlers
+ * and therefore would not support a dynamic environment of URLStreamHandlerServices being registered
  * and unregistered.
  */
 
 public class URLStreamHandlerProxy extends URLStreamHandler implements ServiceTrackerCustomizer<URLStreamHandlerService, ServiceReference<URLStreamHandlerService>> {
-	// TODO lots of type-based names 
+	// TODO lots of type-based names
 	protected URLStreamHandlerService realHandlerService;
 
 	protected URLStreamHandlerSetter urlSetter;
@@ -159,8 +159,8 @@
 	@Override
 	public void setURL(URL url, String protocol, String host, int port, String file, String ref) {
 
-		//using non-deprecated URLStreamHandler.setURL method. 
-		//setURL(URL u, String protocol, String host, int port, String authority, String userInfo, String file, String query, String ref) 
+		//using non-deprecated URLStreamHandler.setURL method.
+		//setURL(URL u, String protocol, String host, int port, String authority, String userInfo, String file, String query, String ref)
 		super.setURL(url, protocol, host, port, null, null, file, null, ref);
 	}
 
@@ -201,7 +201,7 @@
 		int newRank = getRank(reference);
 		if (reference == urlStreamServiceReference) {
 			if (newRank < ranking) {
-				// The URLHandler we are currently using has dropped it's ranking below a URLHandler registered 
+				// The URLHandler we are currently using has dropped it's ranking below a URLHandler registered
 				// for the same protocol. We need to swap out URLHandlers.
 				// this should get us the highest ranked service, if available
 				ServiceReference<URLStreamHandlerService> newReference = urlStreamHandlerServiceTracker.getServiceReference();
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/weaving/DynamicImportList.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/weaving/DynamicImportList.java
index b68adab..f44923f 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/weaving/DynamicImportList.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/internal/weaving/DynamicImportList.java
@@ -19,7 +19,7 @@
 import org.osgi.framework.PackagePermission;
 
 /**
- * A list of DynamicImport-Package statements that are to be used for adding new 
+ * A list of DynamicImport-Package statements that are to be used for adding new
  * dynamic imports to a bundle class loader.
  *
  */
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/launch/Equinox.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/launch/Equinox.java
index 40d7bad..049334f 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/launch/Equinox.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/launch/Equinox.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -23,7 +23,7 @@
 
 /**
  * The System Bundle implementation for the Equinox Framework.
- * 
+ *
  * @since 3.5
  */
 public class Equinox implements Framework {
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/launch/EquinoxFactory.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/launch/EquinoxFactory.java
index c836951..17d9c04 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/launch/EquinoxFactory.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/launch/EquinoxFactory.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/pluginconversion/PluginConversionException.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/pluginconversion/PluginConversionException.java
index 474242b..178da09 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/pluginconversion/PluginConversionException.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/pluginconversion/PluginConversionException.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -15,7 +15,7 @@
 
 /**
  * Custom exception for errors that can happen during plugin conversion.
- * 
+ *
  * @since 3.0
  */
 public class PluginConversionException extends Exception {
@@ -35,7 +35,7 @@
 
 	/**
 	 * Create a new exception with the given message.
-	 * 
+	 *
 	 * @param message the message for the exception
 	 */
 	public PluginConversionException(String message) {
@@ -44,7 +44,7 @@
 
 	/**
 	 * Create a new exception with the given message and nested exception.
-	 * 
+	 *
 	 * @param message the message for the exception
 	 * @param cause the nested exception
 	 */
@@ -55,7 +55,7 @@
 
 	/**
 	 * Create a new exception with the given nested exception.
-	 * 
+	 *
 	 * @param cause the nested exception
 	 */
 	public PluginConversionException(Throwable cause) {
@@ -65,7 +65,7 @@
 	/**
 	 * Return the nested exception for this exception or <code>null</code>
 	 * if there is none.
-	 * 
+	 *
 	 * @return the nested exception or <code>null</code>
 	 */
 	@Override
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/pluginconversion/PluginConverter.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/pluginconversion/PluginConverter.java
index 216ede3..c868108 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/pluginconversion/PluginConverter.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/pluginconversion/PluginConverter.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -22,60 +22,60 @@
  * <p>
  * This interface is not intended to be implemented by clients.
  * </p>
- * 
+ *
  * @since 3.0
  */
 public interface PluginConverter {
 	/**
-	 * Converts a plug-in/fragment manifest at the given source base location (a directory or jar file) and 
+	 * Converts a plug-in/fragment manifest at the given source base location (a directory or jar file) and
 	 * generates a corresponding bundle manifest at the given default target location (a file).
-	 * 
+	 *
 	 * @param pluginBaseLocation the base location for the plug-in/fragment manifest to be converted
 	 * 	(a directory or jar file, e.g. the plug-in install location)
 	 * @param bundleManifestLocation the location for the bundle manifest to be generated
-	 * 	(including the file name). 
-	 * @param compatibilityManifest a boolean indicating if the manifest should contain headers to run  
+	 * 	(including the file name).
+	 * @param compatibilityManifest a boolean indicating if the manifest should contain headers to run
 	 * 	in backward compatibility
-	 * @param target a string indicating the version of the runtime for which the manifest generated is targeted 
+	 * @param target a string indicating the version of the runtime for which the manifest generated is targeted
 	 * @param analyseJars a boolean indicating if the code jars of the given plugin must be analysed. When set to false the Export-Package header will not be set in the bundle manifest.
-	 * @param devProperties a dictionary of development time classpath properties.  The dictionary contains a mapping from plugin id to development 
+	 * @param devProperties a dictionary of development time classpath properties.  The dictionary contains a mapping from plugin id to development
 	 * 	time classpath.  A value of <code>null</code> indicates that the default development time classpath properties will be used.
-	 * @return the generated manifest file location, if a bundle manifest was successfully 
+	 * @return the generated manifest file location, if a bundle manifest was successfully
 	 * 	generated (or already existed), <code>null</code> otherwise.
 	 * @throws PluginConversionException if an error occurs while converting the manifest
 	 */
 	public File convertManifest(File pluginBaseLocation, File bundleManifestLocation, boolean compatibilityManifest, String target, boolean analyseJars, Dictionary<String, String> devProperties) throws PluginConversionException;
 
 	/**
-	 * Converts a plug-in/fragment manifest at the given source base location (a directory or jar file) and 
+	 * Converts a plug-in/fragment manifest at the given source base location (a directory or jar file) and
 	 * generates a corresponding bundle manifest returned as a dictionary.
-	 * 
+	 *
 	 * @param pluginBaseLocation the base location for the plug-in/fragment manifest to be converted
 	 * 	(a directory or jar file, e.g. the plug-in install location)
-	 * @param compatibility a boolean indicating if the manifest should contain headers to run  
+	 * @param compatibility a boolean indicating if the manifest should contain headers to run
 	 * 	in backward compatibility
 	 * @param target a string indicating the version of the runtime for which the manifest generated is targeted
 	 * @param analyseJars a boolean indicating if the code jars of the given plugin must be analysed. When set to false the Export-Package header will not be set in the bundle manifest.
-	 * @param devProperties a dictionary of development time classpath properties.  The dictionary contains a mapping from plugin id to development 
+	 * @param devProperties a dictionary of development time classpath properties.  The dictionary contains a mapping from plugin id to development
 	 * 	time classpath.  A value of <code>null</code> indicates that the default development time classpath properties will be used.
-	 * @return the generated manifest as a dictionary,  if a bundle manifest was successfully 
+	 * @return the generated manifest as a dictionary,  if a bundle manifest was successfully
 	 * 	generated, <code>null</code> otherwise
 	 * @throws PluginConversionException if an error occurs while converting the manifest
 	 */
 	public Dictionary<String, String> convertManifest(File pluginBaseLocation, boolean compatibility, String target, boolean analyseJars, Dictionary<String, String> devProperties) throws PluginConversionException;
 
 	/**
-	 * Construct a bundle manifest file from the given dictionary and write it out to the 
-	 * specified location in the file system. 
+	 * Construct a bundle manifest file from the given dictionary and write it out to the
+	 * specified location in the file system.
 	 * <p>
-	 * If the <code>compatibilityManifest</code> parameter is <code>true</code> then 
+	 * If the <code>compatibilityManifest</code> parameter is <code>true</code> then
 	 * the generated manifest will include the necessary headers to all the manifest to be
-	 * run in backwards compatibility mode. 
+	 * run in backwards compatibility mode.
 	 * </p>
-	 * 
+	 *
 	 * @param generationLocation the location for the bundle manifest to be written
-	 * @param manifestToWrite the dictionary to write into generationLocation file 
-	 * @param compatibilityManifest a boolean indicating if the file should contain headers to allow 
+	 * @param manifestToWrite the dictionary to write into generationLocation file
+	 * @param compatibilityManifest a boolean indicating if the file should contain headers to allow
 	 * 	running in backward compatibility mode
 	 * @throws PluginConversionException if an error occurs while writing the given manifest
 	 */
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/BaseDescription.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/BaseDescription.java
index 67b485c..5112ca1 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/BaseDescription.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/BaseDescription.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -67,7 +67,7 @@
 
 	/**
 	 * Returns the capability represented by this description.
-	 * Some descriptions types may not be able to represent 
+	 * Some descriptions types may not be able to represent
 	 * a capability.  In such cases <code>null</code> is
 	 * returned.
 	 * @return the capability represented by this base description
@@ -76,9 +76,9 @@
 	public BundleCapability getCapability();
 
 	/**
-	 * Returns the user object associated to this description, or 
+	 * Returns the user object associated to this description, or
 	 * <code>null</code> if none exists.
-	 *  
+	 *
 	 * @return the user object associated to this description,
 	 * or <code>null</code>
 	 * @since 3.8
@@ -87,11 +87,11 @@
 
 	/**
 	 * Associates a user-provided object to this description, or
-	 * removes an existing association, if <code>null</code> is provided. The 
-	 * provided object is not interpreted in any ways by this 
+	 * removes an existing association, if <code>null</code> is provided. The
+	 * provided object is not interpreted in any ways by this
 	 * description.
-	 * 
-	 * @param userObject an arbitrary object provided by the user, or 
+	 *
+	 * @param userObject an arbitrary object provided by the user, or
 	 * <code>null</code>
 	 * @since 3.8
 	 */
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/BundleDelta.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/BundleDelta.java
index 72e8967..8aa3dac 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/BundleDelta.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/BundleDelta.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -27,12 +27,12 @@
 
 	/**
 	 * Delta type constant (bit mask) indicating that the bundle has been added
-	 * to the new state. 
+	 * to the new state.
 	 * @see BundleDelta#getType
 	 */
 	public static final int ADDED = 0x1;
 	/**
-	 * Delta type constant (bit mask) indicating that the bundle is no longer present in 
+	 * Delta type constant (bit mask) indicating that the bundle is no longer present in
 	 * the new state.
 	 * @see BundleDelta#getType
 	 */
@@ -40,19 +40,19 @@
 	/**
 	 * Delta type constant (bit mask) indicating that the bundle has been updated
 	 * between the old and new state.  Note that an update delta may in fact represent
-	 * a downgrading of the bundle to a previous version. 
+	 * a downgrading of the bundle to a previous version.
 	 * @see BundleDelta#getType
 	 */
 	public static final int UPDATED = 0x4;
 	/**
 	 * Delta type constant (bit mask) indicating that the bundle has become resolved
-	 * in the new state.  
+	 * in the new state.
 	 * @see BundleDelta#getType
 	 */
 	public static final int RESOLVED = 0x8;
 	/**
 	 * Delta type constant (bit mask) indicating that the bundle has become unresolved
-	 * in the new state. Note that newly added bundles are unresolved by default and 
+	 * in the new state. Note that newly added bundles are unresolved by default and
 	 * as such, do not transition to unresolved state so this flag is not set.
 	 * @see BundleDelta#getType
 	 */
@@ -77,7 +77,7 @@
 	 * Delta type constant (bit mask) indicating that the this bundle is
 	 * pending a removal.  Note that bundles with this flag set will also
 	 * have the {@link BundleDelta#REMOVED} flag set.  A bundle will have
-	 * this flag set if it has been removed from the state but has other 
+	 * this flag set if it has been removed from the state but has other
 	 * existing bundles in the state that depend on it.
 	 * @see BundleDelta#getType
 	 */
@@ -86,21 +86,21 @@
 	/**
 	 * Delta type constant (bit mask) indicating that the this bundle has
 	 * completed a pending removal.  A bundle will complete a pending removal only
-	 * after it has been re-resolved by the resolver. 
+	 * after it has been re-resolved by the resolver.
 	 */
 	public static final int REMOVAL_COMPLETE = 0x100;
 
 	/**
 	 * Returns the BundleDescription that this bundle delta is for.
-	 * @return the BundleDescription that this bundle delta is for. 
+	 * @return the BundleDescription that this bundle delta is for.
 	 */
 	public BundleDescription getBundle();
 
 	/**
 	 * Returns the type of change which occured.  The return value is composed
-	 * of by bit-wise masking the relevant flags from the set ADDED, REMOVED, 
-	 * UPDATED, RESOLVED, UNRESOLVED, LINKAGE_CHANGED, REMOVAL_PENDING, REMOVAL_COMPLETE. 
-	 * Note that bundle start and stop state changes are not captured in the 
+	 * of by bit-wise masking the relevant flags from the set ADDED, REMOVED,
+	 * UPDATED, RESOLVED, UNRESOLVED, LINKAGE_CHANGED, REMOVAL_PENDING, REMOVAL_COMPLETE.
+	 * Note that bundle start and stop state changes are not captured in the
 	 * delta as they do not represent structural changes but rather transient
 	 * runtime states.
 	 * @return the type of change which occured
@@ -113,7 +113,7 @@
 	 * <p>
 	 * The natural order of elements is determined by the bundle id of the
 	 * BundleDescription that this bundle delta is for.
-	 * 
+	 *
 	 * @return int which should be &lt;0 if the receiver should sort before the
 	 *         argument, 0 if the receiver should sort in the same position as
 	 *         the argument, and &gt;0 if the receiver should sort after the
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/BundleDescription.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/BundleDescription.java
index f96b546..dc4bd5c 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/BundleDescription.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/BundleDescription.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -53,7 +53,7 @@
 	/**
 	 * Returns an array of bundle specifications defined by the Require-Bundle
 	 * clause in this bundle.
-	 * 
+	 *
 	 * @return an array of bundle specifications
 	 */
 	public BundleSpecification[] getRequiredBundles();
@@ -115,7 +115,7 @@
 	/**
 	 * Returns all the capabilities provided by ths bundle that have been selected by
 	 * the resolver.  The returned list will include the capabilities
-	 * returned by {@link #getGenericCapabilities()} that have been selected by the 
+	 * returned by {@link #getGenericCapabilities()} that have been selected by the
 	 * resolver and any capabilities provided by fragments attached to this bundle.
 	 * @return the selected capabilities that this bundle provides.  If the bundle is
 	 * unresolved or has no capabilities then an empty array is returned.
@@ -151,7 +151,7 @@
 
 	/**
 	 * Returns true if this bundle is resolved in its host state.
-	 * 
+	 *
 	 * @return true if this bundle is resolved in its host state.
 	 */
 	public boolean isResolved();
@@ -159,14 +159,14 @@
 	/**
 	 * Returns the state object which hosts this bundle. null is returned if
 	 * this bundle is not currently in a state.
-	 * 
+	 *
 	 * @return the state object which hosts this bundle.
 	 */
 	public State getContainingState();
 
 	/**
 	 * Returns the string representation of this bundle.
-	 * 
+	 *
 	 * @return String representation of this bundle.
 	 */
 	@Override
@@ -175,36 +175,36 @@
 	/**
 	 * Returns the host for this bundle. null is returned if this bundle is not
 	 * a fragment.
-	 * 
+	 *
 	 * @return the host for this bundle.
 	 */
 	public HostSpecification getHost();
 
 	/**
 	 * Returns the numeric id of this bundle.  Typically a bundle description
-	 * will only have a numeric id if it represents a bundle that is installed in a 
+	 * will only have a numeric id if it represents a bundle that is installed in a
 	 * framework as the framework assigns the ids.  -1 is returned if the id is not known.
-	 * 
+	 *
 	 * @return the numeric id of this bundle description
 	 */
 	public long getBundleId();
 
 	/**
 	 * Returns all fragments known to this bundle (regardless resolution status).
-	 * 
+	 *
 	 * @return an array of BundleDescriptions containing all known fragments
 	 */
 	public BundleDescription[] getFragments();
 
 	/**
-	 * Returns whether this bundle is a singleton.  Singleton bundles require 
-	 * that at most one single version of the bundle can be resolved at a time. 
+	 * Returns whether this bundle is a singleton.  Singleton bundles require
+	 * that at most one single version of the bundle can be resolved at a time.
 	 * <p>
 	 * The existence of a single bundle marked as singleton causes all bundles
-	 * with the same symbolic name to be treated as singletons as well.  
+	 * with the same symbolic name to be treated as singletons as well.
 	 * </p>
-	 * 
-	 * @return <code>true</code>, if this bundle is a singleton, 
+	 *
+	 * @return <code>true</code>, if this bundle is a singleton,
 	 * <code>false</code> otherwise
 	 */
 	public boolean isSingleton();
@@ -220,7 +220,7 @@
 
 	/**
 	 * Returns all bundles which depend on this bundle.  A bundle depends on
-	 * another bundle if it requires the bundle, imports a package which is 
+	 * another bundle if it requires the bundle, imports a package which is
 	 * exported by the bundle, is a fragment to the bundle or is the host
 	 * of the bundle.
 	 * @return all bundles which depend on this bundle.
@@ -247,8 +247,8 @@
 	public boolean dynamicFragments();
 
 	/**
-	 * Returns the list of execution environments that are required by 
-	 * this bundle.  Any one of the listed execution environments will 
+	 * Returns the list of execution environments that are required by
+	 * this bundle.  Any one of the listed execution environments will
 	 * allow this bundle to be resolved.
 	 * @since 3.2
 	 * @return the list of execution environments that are required.
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/BundleSpecification.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/BundleSpecification.java
index b15eb8b..18c6151 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/BundleSpecification.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/BundleSpecification.java
@@ -7,14 +7,14 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
 package org.eclipse.osgi.service.resolver;
 
 /**
- * A representation of one bundle import constraint as seen in a 
+ * A representation of one bundle import constraint as seen in a
  * bundle manifest and managed by a state and resolver.
  * <p>
  * This interface is not intended to be implemented by clients.  The
@@ -26,16 +26,16 @@
 public interface BundleSpecification extends VersionConstraint {
 
 	/**
-	 * Returns whether or not this bundle specificiation is exported from the 
+	 * Returns whether or not this bundle specificiation is exported from the
 	 * declaring bundle.
-	 * 
+	 *
 	 * @return whether this specification is exported
 	 */
 	public boolean isExported();
 
 	/**
 	 * Returns whether or not this bundle specificiation is optional.
-	 * 
+	 *
 	 * @return whether this specification is optional
 	 */
 	public boolean isOptional();
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/DisabledInfo.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/DisabledInfo.java
index 7fcb766..d79a6b3 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/DisabledInfo.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/DisabledInfo.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -19,8 +19,8 @@
  * method and enabled by removing disabled info with the {@link State#removeDisabledInfo(DisabledInfo)} method.
  * A bundle is not considered to be enabled unless there are no disabled info objects for the bundle.
  * <p>
- * While resolving the bundle if the {@link Resolver} encounters a {@link BundleDescription} which 
- * has disabled info returned by {@link State#getDisabledInfos(BundleDescription)} then the bundle 
+ * While resolving the bundle if the {@link Resolver} encounters a {@link BundleDescription} which
+ * has disabled info returned by {@link State#getDisabledInfos(BundleDescription)} then the bundle
  * must not be allowed to resolve and a ResolverError of type {@link ResolverError#DISABLED_BUNDLE}
  * must be added to the state.
  * </p>
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/ExportPackageDescription.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/ExportPackageDescription.java
index 1755bf5..09fa8eb 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/ExportPackageDescription.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/ExportPackageDescription.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -56,7 +56,7 @@
 	public Object getDirective(String key);
 
 	/**
-	 * Returns the exporter of this package. 
+	 * Returns the exporter of this package.
 	 * @return the exporter of this package.
 	 */
 	public BundleDescription getExporter();
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/GenericDescription.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/GenericDescription.java
index c18431a..236f3ee 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/GenericDescription.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/GenericDescription.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -40,14 +40,14 @@
 	public String getType();
 
 	/**
-	 * This method is deprecated.  Capabilities do not always have a 
+	 * This method is deprecated.  Capabilities do not always have a
 	 * name associated with them.  All matching attributes associated
-	 * with a capability are available in the attributes of a 
-	 * capability.  This method will return the value of the 
+	 * with a capability are available in the attributes of a
+	 * capability.  This method will return the value of the
 	 * attribute with the same key as this capabilities type.
 	 * If this attribute's value is not a String then null is
 	 * returned.
-	 * @deprecated matching should only be done against a capability's 
+	 * @deprecated matching should only be done against a capability's
 	 * attributes.
 	 */
 	@Override
@@ -57,7 +57,7 @@
 	 * This method is deprecated.  Capabilities do not always have a
 	 * version associated with them. All matching attributes associated
 	 * with a capability are available in the attributes of a
-	 * capability.  This method will return the value of the 
+	 * capability.  This method will return the value of the
 	 * attribute with the key <code>"version"</code>.
 	 * If this attribute's value is not a {@link Version} then null is
 	 * returned.
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/GenericSpecification.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/GenericSpecification.java
index 330df57..a02d1f4 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/GenericSpecification.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/GenericSpecification.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -46,7 +46,7 @@
 	 * Returns the resolution type of the required capability.  The returned
 	 * value is a bit mask that may have the optional bit {@link #RESOLUTION_OPTIONAL}
 	 * and/or the multiple bit {@link #RESOLUTION_MULTIPLE} set.
-	 * 
+	 *
 	 * @return the resolution type of the required capability
 	 */
 	public int getResolution();
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/HostSpecification.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/HostSpecification.java
index 276f961..f797334 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/HostSpecification.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/HostSpecification.java
@@ -7,14 +7,14 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
 package org.eclipse.osgi.service.resolver;
 
 /**
- * A representation of one host bundle constraint as seen in a 
+ * A representation of one host bundle constraint as seen in a
  * bundle manifest and managed by a state and resolver.
  * <p>
  * This interface is not intended to be implemented by clients.  The
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/ImportPackageSpecification.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/ImportPackageSpecification.java
index ad97749..a2636fc 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/ImportPackageSpecification.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/ImportPackageSpecification.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -16,7 +16,7 @@
 import java.util.Map;
 
 /**
- * A representation of one package import constraint as seen in a 
+ * A representation of one package import constraint as seen in a
  * bundle manifest and managed by a state and resolver.
  * <p>
  * This interface is not intended to be implemented by clients.  The
@@ -47,7 +47,7 @@
 	public String getBundleSymbolicName();
 
 	/**
-	 * Returns the version range which this import package may be resolved to. 
+	 * Returns the version range which this import package may be resolved to.
 	 * @return the version range which this import package may be resolved to.
 	 */
 	public VersionRange getBundleVersionRange();
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/NativeCodeDescription.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/NativeCodeDescription.java
index 43f5a26..8cfdf8f 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/NativeCodeDescription.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/NativeCodeDescription.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -33,7 +33,7 @@
 
 	/**
 	 * Returns the processors supported by the native code.
-	 * @return the processors supported by the native code.  An 
+	 * @return the processors supported by the native code.  An
 	 * empty array is returned if no processors are supported.
 	 */
 	public String[] getProcessors();
@@ -54,7 +54,7 @@
 
 	/**
 	 * Returns the languages supported by the native code.
-	 * @return the languages supported by the native code.  An empty array is 
+	 * @return the languages supported by the native code.  An empty array is
 	 * returned if all languages are supported.
 	 */
 	public String[] getLanguages();
@@ -81,7 +81,7 @@
 
 	/**
 	 * Indicates if this native code description has invalid native code paths.  Native
-	 * code paths are invalid if they can not be found in the bundle content. 
+	 * code paths are invalid if they can not be found in the bundle content.
 	 * @return true if the native code paths are invalid; otherwise false is returned.
 	 */
 	public boolean hasInvalidNativePaths();
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/NativeCodeSpecification.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/NativeCodeSpecification.java
index b3b9aef..057cfb6 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/NativeCodeSpecification.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/NativeCodeSpecification.java
@@ -7,19 +7,19 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
 package org.eclipse.osgi.service.resolver;
 
 /**
- * This class represents a native code specification.  A 
- * native code specification is different from other 
+ * This class represents a native code specification.  A
+ * native code specification is different from other
  * specification constraints which typically are resolved against
- * suppliers provided by other bundles.   A native code 
+ * suppliers provided by other bundles.   A native code
  * specification supplies it own suppliers which are matched
- * against the platform properties at resolve time and the 
+ * against the platform properties at resolve time and the
  * supplier with the best match is selected.
  * <p>
  * This interface is not intended to be implemented by clients.  The
@@ -30,7 +30,7 @@
  */
 public interface NativeCodeSpecification extends VersionConstraint {
 	/**
-	 * Returns the list of possible suppliers to this native code specification.  When 
+	 * Returns the list of possible suppliers to this native code specification.  When
 	 * this native code specification is resolved one of the possible suppliers
 	 * will be selected and returned by {@link VersionConstraint#getSupplier()}.
 	 * @return the list of possible suppliers.
@@ -39,7 +39,7 @@
 
 	/**
 	 * Returns whether or not this native code specification is optional.
-	 * 
+	 *
 	 * @return whether this specification is optional
 	 */
 	public boolean isOptional();
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/PlatformAdmin.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/PlatformAdmin.java
index 0d75253..6612ceb 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/PlatformAdmin.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/PlatformAdmin.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *     Rob Harrop - SpringSource Inc. (bug 247522)
@@ -32,40 +32,40 @@
  */
 public interface PlatformAdmin {
 
-	/** 
+	/**
 	 * Returns a mutable state representing the current system.
 	 * <p>
-	 * This is a convenience method, fully equivalent to 
+	 * This is a convenience method, fully equivalent to
 	 * <code>getState(true)</code>.
-	 * </p> 
+	 * </p>
 	 * @return a state representing the current framework.
 	 */
 	public State getState();
 
-	/** 
+	/**
 	 * Returns a state representing the current system. If there is need to make
-	 * changes to the returned state, a mutable state must be requested. 
-	 * Otherwise, an immutable state should be requested. In this case, invoking 
-	 * any of the operations that could cause the state to be changed will throw 
+	 * changes to the returned state, a mutable state must be requested.
+	 * Otherwise, an immutable state should be requested. In this case, invoking
+	 * any of the operations that could cause the state to be changed will throw
 	 * an <code>java.lang.UnsupportedOperationException</code>.
 	 * <p>
-	 * If a mutable state is requested, the resulting state will <strong>not</strong> 
-	 * be resolved and the user objects from the system state bundle descriptions will 
+	 * If a mutable state is requested, the resulting state will <strong>not</strong>
+	 * be resolved and the user objects from the system state bundle descriptions will
 	 * not be copied.
-	 * </p> 
+	 * </p>
 	 * @param mutable whether the returned state should mutable
 	 * @return a state representing the current framework.
 	 */
 	public State getState(boolean mutable);
 
 	/**
-	 * Returns a state helper object. State helpers provide convenience methods 
-	 * for manipulating states. 
+	 * Returns a state helper object. State helpers provide convenience methods
+	 * for manipulating states.
 	 * <p>
 	 * A possible implementation for this
 	 * method would provide the same single StateHelper instance to all clients.
 	 * </p>
-	 * 
+	 *
 	 * @return a state helper
 	 * @see StateHelper
 	 */
@@ -73,9 +73,9 @@
 
 	/**
 	 * Commit the differences between the current state and the given state.
-	 * The given state must return true from State.isResolved() or an exception 
-	 * is thrown.  The resolved state is committed verbatim, as-is.  
-	 * 
+	 * The given state must return true from State.isResolved() or an exception
+	 * is thrown.  The resolved state is committed verbatim, as-is.
+	 *
 	 * @param state the future state of the framework
 	 * @throws BundleException if the id of the given state does not match that of the
 	 * 	current state or if the given state is not resolved.
@@ -83,7 +83,7 @@
 	public void commit(State state) throws BundleException;
 
 	/**
-	 * Returns a resolver supplied by the system.  The returned resolver 
+	 * Returns a resolver supplied by the system.  The returned resolver
 	 * will not be associated with any state.
 	 * @return a system resolver
 	 * @deprecated in favour of {@link #createResolver()}.
@@ -98,15 +98,15 @@
 	public Resolver createResolver();
 
 	/**
-	 * Returns a factory that knows how to create state objects, such as bundle 
+	 * Returns a factory that knows how to create state objects, such as bundle
 	 * descriptions and the different types of version constraints.
 	 * @return a state object factory
 	 */
 	public StateObjectFactory getFactory();
 
 	/**
-	 * Adds the disabled info to the state managed by this platform admin. 
-	 *  If a disable info already exists for the specified policy and the specified bundle 
+	 * Adds the disabled info to the state managed by this platform admin.
+	 *  If a disable info already exists for the specified policy and the specified bundle
 	 *  then it is replaced with the given disabled info.
 	 * @param disabledInfo the disabled info to add.
 	 * @throws IllegalArgumentException if the <code>BundleDescription</code> for
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/Resolver.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/Resolver.java
index e9c3f19..7205919 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/Resolver.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/Resolver.java
@@ -42,7 +42,7 @@
 	 * Note the given state is destructively modified to reflect the results of
 	 * resolution.
 	 * </p>
-	 * @param discard the list of bundles to discard the resolve status and 
+	 * @param discard the list of bundles to discard the resolve status and
 	 * reresolve.  A <code>null</code> value indicates that all currently unresolved
 	 * bundles in the state should be resolved.
 	 * @param platformProperties the platform properties used to match platform filters
@@ -62,7 +62,7 @@
 	 * Returns the state associated with this resolver. A state can work with
 	 * at most one resolver at any given time. Similarly, a resolver can work
 	 * with at most one state at a time.
-	 * 
+	 *
 	 * @return the state for this resolver. null is returned if the resolver
 	 * does not have a state
 	 */
@@ -77,7 +77,7 @@
 	 * the following expression must be included in this method if the given
 	 * state (value) is not identical to the result of this.getState().
 	 * </p>
-	 * 
+	 *
 	 * <pre>
 	 *  if (this.getState() != value) value.setResolver(this);
 	 * </pre>
@@ -110,30 +110,30 @@
 	/**
 	 * Attempts to find an ExportPackageDescription that will satisfy a dynamic import
 	 * for the specified requestedPackage for the specified importingBundle.  If no
-	 * ExportPackageDescription is available that satisfies a dynamic import for the 
+	 * ExportPackageDescription is available that satisfies a dynamic import for the
 	 * importingBundle then <code>null</code> is returned.
 	 * @param importingBundle the BundleDescription that is requesting a dynamic package
 	 * @param requestedPackage the name of the package that is being requested
-	 * @return the ExportPackageDescription that satisfies the dynamic import request; 
+	 * @return the ExportPackageDescription that satisfies the dynamic import request;
 	 * a value of <code>null</code> is returned if none is available.
 	 */
 	public ExportPackageDescription resolveDynamicImport(BundleDescription importingBundle, String requestedPackage);
 
 	/**
-	 * Sets the selection policy for this resolver.  A selection policy is used to sort 
+	 * Sets the selection policy for this resolver.  A selection policy is used to sort
 	 * possible suppliers of a version constraint in descending order.  That is an order
-	 * which is from most desired to least desired.  The objects passed to the 
-	 * selection policy {@link Comparator#compare(Object, Object)} method 
-	 * will be of type {@link BaseDescription}.  The selection policy should return a 
-	 * negative number, zero, or a positive number depending on if the first object is 
+	 * which is from most desired to least desired.  The objects passed to the
+	 * selection policy {@link Comparator#compare(Object, Object)} method
+	 * will be of type {@link BaseDescription}.  The selection policy should return a
+	 * negative number, zero, or a positive number depending on if the first object is
 	 * more desired, equal amount of desire, or less desired than the second object respectively.
 	 * <p>
 	 * If no selection policy is set then a default policy will be used which sorts according
-	 * to the following rules: 
+	 * to the following rules:
 	 * <ol>
 	 * <li> The resolution status of the bundle which supplies the base description.  Resolved bundles take priority over unresolved ones.
 	 * <li> The version of the base description.  Higher versions take priority over lower versions.
-	 * <li> The bundle ID which supplies the base description.  Lower IDs take priority over higher IDs. 
+	 * <li> The bundle ID which supplies the base description.  Lower IDs take priority over higher IDs.
 	 * </ol>
 	 * @param selectionPolicy the selection policy for this resolver
 	 * @since 3.2
@@ -141,9 +141,9 @@
 	public void setSelectionPolicy(Comparator<BaseDescription> selectionPolicy);
 
 	/**
-	 * Returns the selection policy for this resolver or null if it is not set 
+	 * Returns the selection policy for this resolver or null if it is not set
 	 * @return the selection policy for this resolver or null if it is not set
-	 * @since 3.2 
+	 * @since 3.2
 	 */
 	public Comparator<BaseDescription> getSelectionPolicy();
 }
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/ResolverError.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/ResolverError.java
index 5e20665..1455899 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/ResolverError.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/ResolverError.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -24,7 +24,7 @@
  */
 public interface ResolverError {
 	/**
-	 * Error type constant (bit mask) indicating that an Import-Package could 
+	 * Error type constant (bit mask) indicating that an Import-Package could
 	 * not be resolved.
 	 * @see ResolverError#getType()
 	 */
@@ -55,7 +55,7 @@
 	public static final int FRAGMENT_CONFLICT = 0x0010;
 	/**
 	 * Error type constant (bit mask) indicating that an Import-Package could
-	 * not be resolved because of a uses directive conflict. 
+	 * not be resolved because of a uses directive conflict.
 	 * @see ResolverError#getType()
 	 */
 	public static final int IMPORT_PACKAGE_USES_CONFLICT = 0x0020;
@@ -88,14 +88,14 @@
 	public static final int REQUIRE_BUNDLE_PERMISSION = 0x0200;
 	/**
 	 * Error type constant (bit mask) indicating that a Require-Bundle could
-	 * not be resolved because no bundle with the required symbolic name has 
+	 * not be resolved because no bundle with the required symbolic name has
 	 * the correct permissions to provide the required symbolic name.
 	 * @see ResolverError#getType()
 	 */
 	public static final int PROVIDE_BUNDLE_PERMISSION = 0x0400;
 	/**
 	 * Error type constant (bit mask) indicating that a Fragment-Host could
-	 * not be resolved because no bundle with the required symbolic name has 
+	 * not be resolved because no bundle with the required symbolic name has
 	 * the correct permissions to host a fragment.
 	 * @see ResolverError#getType()
 	 */
@@ -123,7 +123,7 @@
 	public static final int MISSING_EXECUTION_ENVIRONMENT = 0x4000;
 
 	/**
-	 * Error type constant (bit mask) indicating that a bundle could not be 
+	 * Error type constant (bit mask) indicating that a bundle could not be
 	 * resolved because the required generic capability could not be resolved.
 	 */
 	public static final int MISSING_GENERIC_CAPABILITY = 0x8000;
@@ -160,7 +160,7 @@
 
 	/**
 	 * Error type constant (bit mask) indicating that a Require-Bundle could
-	 * not be resolved because no bundle with the required symbolic name has 
+	 * not be resolved because no bundle with the required symbolic name has
 	 * the correct permissions to provide the required symbolic name.
 	 * @see ResolverError#getType()
 	 * @since 3.7
@@ -188,8 +188,8 @@
 	public String getData();
 
 	/**
-	 * Returns the unsatisfied constraint if this ResolverError occurred 
-	 * because of an unsatisfied constraint; otherwise <code>null</code> 
+	 * Returns the unsatisfied constraint if this ResolverError occurred
+	 * because of an unsatisfied constraint; otherwise <code>null</code>
 	 * is returned.
 	 * @return the unsatisfied constraint or <code>null</code>.
 	 */
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/ResolverHookException.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/ResolverHookException.java
index 1020dec..50dd0c2 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/ResolverHookException.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/ResolverHookException.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/State.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/State.java
index dc62889..f5c9ab9 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/State.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/State.java
@@ -38,12 +38,12 @@
 	 * <p>
 	 * If the bundle already exists in another state then an <code>IllegalStateException</code>
 	 * will be thrown.  Note that even if you remove a <code>BundleDescription</code> from
-	 * one <code>State</code> object using {@link State#removeBundle(BundleDescription)} it 
+	 * one <code>State</code> object using {@link State#removeBundle(BundleDescription)} it
 	 * may still be considered as removing pending if other bundles in that state depend on the
-	 * bundle you removed.  To complete a pending removal a call must be done to 
+	 * bundle you removed.  To complete a pending removal a call must be done to
 	 * {@link State#resolve(BundleDescription[])} with the removed bundle.
 	 * </p>
-	 * 
+	 *
 	 * @param description the description to add
 	 * @return a boolean indicating whether the bundle was successfully added
 	 * @throws IllegalStateException if the bundle already exists in another state
@@ -55,17 +55,17 @@
 	 * given state. The given state is taken as the base so the absence of a bundle
 	 * in this state is reported as a deletion, etc.
 	 *<p>Note that the generated StateDelta will contain BundleDeltas with one
-	 *of the following types: BundleDelta.ADDED, BundleDelta.REMOVED and 
+	 *of the following types: BundleDelta.ADDED, BundleDelta.REMOVED and
 	 *BundleDelta.UPDATED</p>
-	 * 
+	 *
 	 * @param baseState the base state
-	 * @return a delta describing differences between this and the base state state 
+	 * @return a delta describing differences between this and the base state state
 	 */
 	public StateDelta compare(State baseState) throws BundleException;
 
 	/**
 	 * Removes a bundle description with the given bundle id.
-	 * 
+	 *
 	 * @param bundleId the id of the bundle description to be removed
 	 * @return the removed bundle description, or <code>null</code>, if a bundle
 	 * 	with the given id does not exist in this state
@@ -74,42 +74,42 @@
 
 	/**
 	 * Removes the given bundle description.
-	 * 
+	 *
 	 * @param bundle the bundle description to be removed
-	 * @return <code>true</code>, if if the bundle description was removed, 
-	 * 	<code>false</code> otherwise 	
+	 * @return <code>true</code>, if if the bundle description was removed,
+	 * 	<code>false</code> otherwise
 	 */
 	public boolean removeBundle(BundleDescription bundle);
 
 	/**
-	 * Updates an existing bundle description with the given description. 
-	 * 
+	 * Updates an existing bundle description with the given description.
+	 *
 	 * @param newDescription the bundle description to replace an existing one
-	 * @return <code>true</code>, if if the bundle description was updated, 
-	 * 	<code>false</code> otherwise 	
+	 * @return <code>true</code>, if if the bundle description was updated,
+	 * 	<code>false</code> otherwise
 	 */
 	public boolean updateBundle(BundleDescription newDescription);
 
 	/**
 	 * Returns the delta representing the changes from the time this state was
 	 * first captured until now.
-	 * 
+	 *
 	 * @return the state delta
 	 */
 	public StateDelta getChanges();
 
 	/**
 	 * Returns descriptions for all bundles known to this state.
-	 * 
+	 *
 	 * @return the descriptions for all bundles known to this state.
 	 */
 	public BundleDescription[] getBundles();
 
 	/**
-	 * Returns the bundle descriptor for the bundle with the given id. 
-	 * <code>null</code> is returned if no such bundle is found in 
-	 * this state. 
-	 * 
+	 * Returns the bundle descriptor for the bundle with the given id.
+	 * <code>null</code> is returned if no such bundle is found in
+	 * this state.
+	 *
 	 * @return the descriptor for the identified bundle
 	 * @see BundleDescription#getBundleId()
 	 */
@@ -122,7 +122,7 @@
 	 * If multiple bundles with the same resolution state are available, the bundle
 	 * with the highest version number is returned if the <code>version</code> is
 	 * null.
-	 * 
+	 *
 	 * @param symbolicName symbolic name of the bundle to query
 	 * @param version version of the bundle to query. null matches any bundle
 	 * @return the descriptor for the identified bundle
@@ -131,8 +131,8 @@
 
 	/**
 	 * Returns the bundle descriptor for the bundle with the given location
-	 * identifier. null is returned if no such bundle is found in this state. 
-	 * 
+	 * identifier. null is returned if no such bundle is found in this state.
+	 *
 	 * @param location location identifier of the bundle to query
 	 * @return the descriptor for the identified bundle
 	 */
@@ -144,7 +144,7 @@
 	 * the system state timestamp is 4 but then some bundles are installed,
 	 * the system state timestamp is updated. By comparing 4 to the current system
 	 * state timestamp it is possible to detect if the states are out of sync.
-	 * 
+	 *
 	 * @return the timestamp of this state
 	 */
 	public long getTimeStamp();
@@ -158,7 +158,7 @@
 	/**
 	 * Returns true if there have been no modifications to this state since the
 	 * last time resolve() was called.
-	 * 
+	 *
 	 * @return whether or not this state has changed since last resolved.
 	 */
 	public boolean isResolved();
@@ -166,15 +166,15 @@
 	/**
 	 * Resolves the given version constraint with the given supplier. The given
 	 * constraint object is destructively modified to reflect its new resolved
-	 * state. Note that a constraint can be unresolved by passing null for 
+	 * state. Note that a constraint can be unresolved by passing null for
 	 * the supplier.
 	 * <p>
 	 * This method is intended to be used by resolvers in the process of
 	 * determining which constraints are satisfied by which components.
 	 * </p>
-	 * 
+	 *
 	 * @param constraint the version constraint to update
-	 * @param supplier the supplier which satisfies the constraint. May be null if 
+	 * @param supplier the supplier which satisfies the constraint. May be null if
 	 * the constraint is to be unresolved.
 	 * @throws IllegalStateException if this is not done during a call to
 	 * <code>resolve</code>
@@ -187,7 +187,7 @@
 	 * This method is intended to be used by resolvers in the process of
 	 * determining which constraints are satisfied by which components.
 	 * </p>
-	 * 
+	 *
 	 * @param bundle the bundle to update
 	 * @param status whether or not the given bundle is resolved, if false the other parameters are ignored
 	 * @param hosts the host for the resolve fragment, can be <code>null</code>
@@ -205,7 +205,7 @@
 	 * This method is intended to be used by resolvers in the process of
 	 * determining which constraints are satisfied by which components.
 	 * </p>
-	 * 
+	 *
 	 * @param bundle the bundle to update
 	 * @param status whether or not the given bundle is resolved, if false the other parameters are ignored
 	 * @param hosts the host for the resolve fragment, can be <code>null</code>
@@ -225,7 +225,7 @@
 	 * This method is intended to be used by resolvers in the process of
 	 * determining which constraints are satisfied by which components.
 	 * </p>
-	 * 
+	 *
 	 * @param bundle the bundle to update
 	 * @param status whether or not the given bundle is resolved, if false the other parameters are ignored
 	 * @param hosts the host for the resolve fragment, can be <code>null</code>
@@ -244,7 +244,7 @@
 	/**
 	 * Sets the given removal pending bundle to removal complete for this state.
 	 * <p>
-	 * This method is intended to be used by resolvers in the process of 
+	 * This method is intended to be used by resolvers in the process of
 	 * resolving bundles.
 	 * </p>
 	 * @param bundle the bundle to set a removal complete.
@@ -259,7 +259,7 @@
 	 * This method is intended to be used by resolvers in the process of
 	 * resolving.
 	 * </p>
-	 * 
+	 *
 	 * @param bundle the bundle to add a new <code>ResolverError</code> for
 	 * @param type the type of <code>ResolverError</code> to add
 	 * @param data the data for the <code>ResolverError</code>
@@ -276,7 +276,7 @@
 	 * This method is intended to be used by resolvers in the process of
 	 * resolving.
 	 * </p>
-	 * 
+	 *
 	 * @param bundle the bundle to remove all <code>ResolverError</code>s for
 	 * @throws IllegalStateException if this is not done during a call to <code>resolve</code>
 	 * @since 3.2
@@ -295,7 +295,7 @@
 	 * Returns the resolver associated with this state. A state can work with
 	 * at most one resolver at any given time. Similarly, a resolver can work
 	 * with at most one state at a time.
-	 * 
+	 *
 	 * @return the resolver for this state. null is returned if the state does
 	 * not have a resolver
 	 */
@@ -310,11 +310,11 @@
 	 * the following expression must be included in this method if the given
 	 * resolver (value) is not identical to the result of this.getResolver().
 	 * </p>
-	 * 
+	 *
 	 * <pre>
 	 *  if (this.getResolver() != value) value.setState(this);
 	 * </pre>
-	 * 
+	 *
 	 */
 	// TODO what happens if you set the Resolver after some bundles have
 	// been added to the state but it is not resolved?  Should setting
@@ -327,11 +327,11 @@
 	 * changes in resolved states and dependencies in the state.
 	 * <p>
 	 * Note that this method is typically implemented using
-	 * 
+	 *
 	 * <pre>
 	 *  this.getResolver().resolve();
 	 * </pre>
-	 * 
+	 *
 	 * and is the preferred path for invoking resolution. In particular, states
 	 * should refuse to perform updates (@see #select() and
 	 * #resolveConstraint()) if they are not currently involved in a resolution
@@ -340,9 +340,9 @@
 	 * Note the given state is destructively modified to reflect the results of
 	 * resolution.
 	 * </p>
-	 * 
+	 *
 	 * @param incremental a flag controlling whether resolution should be incremental
-	 * @return a delta describing the changes in resolved state and 
+	 * @return a delta describing the changes in resolved state and
 	 * interconnections
 	 */
 	public StateDelta resolve(boolean incremental);
@@ -354,14 +354,14 @@
 
 	/**
 	 * Resolves the constraints contained in this state using the resolver
-	 * currently associated with the state in an incremental, "least-perturbing" 
-	 * mode, and returns a delta describing the changes in resolved states and 
+	 * currently associated with the state in an incremental, "least-perturbing"
+	 * mode, and returns a delta describing the changes in resolved states and
 	 * dependencies in the state.
-	 * 
-	 * @param discard an array containing descriptions for bundles whose 
+	 *
+	 * @param discard an array containing descriptions for bundles whose
 	 * 	current resolution state should be forgotten.  If <code>null</code>
 	 *  then all the current removal pending BundleDescriptions are refreshed.
-	 * @return a delta describing the changes in resolved state and 
+	 * @return a delta describing the changes in resolved state and
 	 * 	interconnections
 	 */
 	public StateDelta resolve(BundleDescription[] discard);
@@ -370,13 +370,13 @@
 	 * Resolves the constraints contained in this state using the resolver
 	 * currently associated with the state in an incremental, "least-perturbing"
 	 * mode, and returns a delta describing the changes in resolved states and
-	 * dependencies in the state.  If discard is set to true the 
-	 * the descriptions contained in the resolve array will have their 
+	 * dependencies in the state.  If discard is set to true the
+	 * the descriptions contained in the resolve array will have their
 	 * current resolution state discarded and will be re-resolved.
 	 * This method will attempt to resolve the supplied descriptions
 	 * and may attempt to resolve any other unresolved descriptions contained
 	 * in this state.
-	 * 
+	 *
 	 * @param resolve an array containing descriptions for bundles to resolve.
 	 * @param discard a value of true indicates the resolve descriptions
 	 * should have their current resolution state discarded and re-resolved.
@@ -391,7 +391,7 @@
 	 * of this state. Version overrides allow external forces to
 	 * refine/override the version constraints setup by the components in the
 	 * state.
-	 * 
+	 *
 	 * @param value Format undefined.
 	 * @deprecated The exact form of this has never been defined.  There is
 	 * no alternative method available.
@@ -400,7 +400,7 @@
 
 	/**
 	 * Returns descriptions for all bundles currently resolved in this state.
-	 * 
+	 *
 	 * @return the descriptions for all bundles currently resolved in this
 	 * state.
 	 */
@@ -415,7 +415,7 @@
 
 	/**
 	 * Returns the dependency closure for the specified bundles.
-	 * 
+	 *
 	 * <p>
 	 * A graph of bundles is computed starting with the specified bundles. The
 	 * graph is expanded by adding any bundle that is either wired to a package
@@ -423,7 +423,7 @@
 	 * in the graph. The graph is fully constructed when there is no bundle
 	 * outside the graph that is wired to a bundle in the graph. The graph may
 	 * contain removal pending bundles.
-	 * 
+	 *
 	 * @param bundles The initial bundles for which to generate the dependency
 	 *        closure.
 	 * @return A collection containing a snapshot of the dependency closure of
@@ -435,13 +435,13 @@
 
 	/**
 	 * Returns whether this state is empty.
-	 * @return <code>true</code> if this state is empty, <code>false</code> 
+	 * @return <code>true</code> if this state is empty, <code>false</code>
 	 * 	otherwise
 	 */
 	public boolean isEmpty();
 
 	/**
-	 * Returns all exported packages in this state, according to the OSGi rules for resolution. 
+	 * Returns all exported packages in this state, according to the OSGi rules for resolution.
 	 * @see org.osgi.service.packageadmin.PackageAdmin#getExportedPackages(org.osgi.framework.Bundle)
 	 */
 	public ExportPackageDescription[] getExportedPackages();
@@ -456,25 +456,25 @@
 
 	/**
 	 * Returns the factory that created this state.
-	 * @return the state object factory that created this state 
+	 * @return the state object factory that created this state
 	 */
 	public StateObjectFactory getFactory();
 
 	/**
 	 * Attempts to find an ExportPackageDescription that will satisfy a dynamic import
 	 * for the specified requestedPackage for the specified importingBundle.  If no
-	 * ExportPackageDescription is available that satisfies a dynamic import for the 
+	 * ExportPackageDescription is available that satisfies a dynamic import for the
 	 * importingBundle then <code>null</code> is returned.
 	 * @param importingBundle the BundleDescription that is requesting a dynamic package
 	 * @param requestedPackage the name of the package that is being requested
-	 * @return the ExportPackageDescription that satisfies the dynamic import request; 
+	 * @return the ExportPackageDescription that satisfies the dynamic import request;
 	 * a value of <code>null</code> is returned if none is available.
 	 */
 	public ExportPackageDescription linkDynamicImport(BundleDescription importingBundle, String requestedPackage);
 
 	/**
-	 * Adds the specified dynamic imports to the specified importingBundle.  The added 
-	 * dynamic imports are only valid for the instance of this state and will be 
+	 * Adds the specified dynamic imports to the specified importingBundle.  The added
+	 * dynamic imports are only valid for the instance of this state and will be
 	 * forgotten if this state is read from a persistent cache.
 	 * @param importingBundle the bundle to add the imports to.
 	 * @param dynamicImports the dynamic imports to add.
@@ -499,34 +499,34 @@
 	 * <li>osgi.ws - the platform windowing system.</li>
 	 * <li>osgi.resolverMode - the resolver mode.  A value of "strict" will set the resolver mode to strict.</li>
 	 * <li>org.osgi.framework.system.packages - the packages exported by the system bundle.</li>
-	 * <li>org.osgi.framework.executionenvironment - the comma separated list of supported execution environments.  
+	 * <li>org.osgi.framework.executionenvironment - the comma separated list of supported execution environments.
 	 * This property is then used to resolve the required execution environment the bundles in a state.</li>
-	 * <li>org.osgi.framework.os.name - the name of the operating system.  This property is used to resolve the osname attribute of 
+	 * <li>org.osgi.framework.os.name - the name of the operating system.  This property is used to resolve the osname attribute of
 	 * bundle native code (i.e. Bundle-NativeCode).</li>
-	 * <li>org.osgi.framework.os.version - the version of the operating system.  This property is used to resolve the osversion attribute 
+	 * <li>org.osgi.framework.os.version - the version of the operating system.  This property is used to resolve the osversion attribute
 	 * of bundle native code (i.e. Bundle-NativeCode).</li>
-	 * <li>org.osgi.framework.processor - the processor name.  This property is used to resolve the processor attribute 
+	 * <li>org.osgi.framework.processor - the processor name.  This property is used to resolve the processor attribute
 	 * of bundle native code (i.e. Bundle-NativeCode).</li>
-	 * <li>org.osgi.framework.language - the language being used.  This property is used to resolve the language attribute 
+	 * <li>org.osgi.framework.language - the language being used.  This property is used to resolve the language attribute
 	 * of bundle native code (i.e. Bundle-NativeCode).</li>
 	 * </ul>
 	 * The values used for the supported properties can be <code>String</code> type
 	 * to specify a single value for the property or they can by <code>String[]</code>
-	 * to specify a list of values for the property. 
+	 * to specify a list of values for the property.
 	 * @param platformProperties the platform properties of the state
 	 * @return false if the platformProperties specified do not change any of the
-	 * supported properties already set.  If any of the supported property values 
+	 * supported properties already set.  If any of the supported property values
 	 * are changed as a result of calling this method then true is returned.
 	 */
 	public boolean setPlatformProperties(Dictionary<?, ?> platformProperties);
 
 	/**
-	 * Sets the platform properties of the state to a list of platform properties.  
+	 * Sets the platform properties of the state to a list of platform properties.
 	 * @see #setPlatformProperties(Dictionary)
-	 * 
+	 *
 	 * @param platformProperties a set of platform properties for the state
 	 * @return false if the platformProperties specified do not change any of the
-	 * supported properties already set.  If any of the supported property values 
+	 * supported properties already set.  If any of the supported property values
 	 * are changed as a result of calling this method then true is returned.
 	 */
 	public boolean setPlatformProperties(Dictionary<?, ?>[] platformProperties);
@@ -539,7 +539,7 @@
 	public Dictionary[] getPlatformProperties();
 
 	/**
-	 * Returns the list of system packages which are exported by the system bundle.  
+	 * Returns the list of system packages which are exported by the system bundle.
 	 * The list of system packages is set by the org.osgi.framework.system.packages
 	 * value in the platform properties for this state.
 	 * @see #setPlatformProperties(Dictionary)
@@ -548,13 +548,13 @@
 	public ExportPackageDescription[] getSystemPackages();
 
 	/**
-	 * Returns a state helper object. State helpers provide convenience methods 
-	 * for manipulating states. 
+	 * Returns a state helper object. State helpers provide convenience methods
+	 * for manipulating states.
 	 * <p>
 	 * A possible implementation for this
 	 * method would provide the same single StateHelper instance to all clients.
 	 * </p>
-	 * 
+	 *
 	 * @return a state helper
 	 * @see StateHelper
 	 * @since 3.2
@@ -562,10 +562,10 @@
 	public StateHelper getStateHelper();
 
 	/**
-	 * Returns the highest bundle ID.  The value -1 is returned if no 
+	 * Returns the highest bundle ID.  The value -1 is returned if no
 	 * bundles exist in this state.
 	 * <p>
-	 * Note that this method returns the highest bundle ID the ever existed in this 
+	 * Note that this method returns the highest bundle ID the ever existed in this
 	 * this state object.  This bundle may have been removed from the state.
 	 * @return the highest bundle ID.
 	 * @since 3.3
@@ -597,7 +597,7 @@
 
 	/**
 	 * Adds the disabled info to this state.  If a disable info already exists
-	 * for the specified policy and the specified bundle then it is replaced with 
+	 * for the specified policy and the specified bundle then it is replaced with
 	 * the given disabled info.
 	 * @param disabledInfo the disabled info to add.
 	 * @throws IllegalArgumentException if the <code>BundleDescription</code> for
@@ -632,7 +632,7 @@
 	public DisabledInfo getDisabledInfo(BundleDescription bundle, String policyName);
 
 	/**
-	 * Sets the resolver hook factory for this state.  The resolver hook factory is 
+	 * Sets the resolver hook factory for this state.  The resolver hook factory is
 	 * used during resolve operations according to the OSGi specification for the
 	 * resolver hook factory.
 	 * @param hookFactory the resolver hook factory
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/StateDelta.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/StateDelta.java
index 87785e6..7c82e29 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/StateDelta.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/StateDelta.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -30,11 +30,11 @@
 
 	/**
 	 * Returns an array of all the members
-	 * of this delta which match the given flags.  If an exact match is requested 
+	 * of this delta which match the given flags.  If an exact match is requested
 	 * then only delta members whose type exactly matches the given mask are
 	 * included.  Otherwise, all bundle deltas whose type's bit-wise and with the
-	 * mask is non-zero are included. 
-	 * 
+	 * mask is non-zero are included.
+	 *
 	 * @param mask match mask
 	 * @param exact whether exact match or bit-wise matching should be performed
 	 * @return an array of bundle deltas matching the given match criteria.
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/StateHelper.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/StateHelper.java
index 3b57939..9a91efa 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/StateHelper.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/StateHelper.java
@@ -14,7 +14,7 @@
 package org.eclipse.osgi.service.resolver;
 
 /**
- * A helper class that provides convenience methods for manipulating 
+ * A helper class that provides convenience methods for manipulating
  * state objects. <code>PlatformAdmin</code> provides an access point
  * for a state helper.
  * <p>
@@ -35,9 +35,9 @@
 	public static int ACCESS_DISCOURAGED = 0x02;
 
 	/**
-	 * An option to include packages available from the execution environment when 
-	 * getting the visible packages of a bundle.  For example, when running on a 
-	 * J2SE 1.4 VM the system bundle will export the javax.xml.parsers package as part of the 
+	 * An option to include packages available from the execution environment when
+	 * getting the visible packages of a bundle.  For example, when running on a
+	 * J2SE 1.4 VM the system bundle will export the javax.xml.parsers package as part of the
 	 * execution environment.  When this option is used then any packages from the execution
 	 * environment which the bundle is wired to will be included.
 	 * @see StateHelper#getVisiblePackages(BundleDescription, int)
@@ -45,9 +45,9 @@
 	public static int VISIBLE_INCLUDE_EE_PACKAGES = 0x01;
 
 	/**
-	 * An option to get all visible packages that a host bundle is currently wired to.  This 
-	 * includes packages wired to as a result of a dynamic import and packages wired to as a 
-	 * result of additional constraints specified by a fragment bundle.  Using this option 
+	 * An option to get all visible packages that a host bundle is currently wired to.  This
+	 * includes packages wired to as a result of a dynamic import and packages wired to as a
+	 * result of additional constraints specified by a fragment bundle.  Using this option
 	 * with a fragment will cause an empty array to be returned.
 	 * @see StateHelper#getVisiblePackages(BundleDescription, int)
 	 * @since 3.6
@@ -57,7 +57,7 @@
 	/**
 	 * Returns all bundles in the state depending on the given bundles. The given bundles
 	 * appear in the returned array.
-	 * 
+	 *
 	 * @param bundles the initial set of bundles
 	 * @return an array containing bundle descriptions for the given roots and all
 	 * bundles in the state that depend on them
@@ -75,26 +75,26 @@
 	public BundleDescription[] getPrerequisites(BundleDescription[] bundles);
 
 	/**
-	 * Returns all unsatisfied constraints in the given bundle. Returns an 
+	 * Returns all unsatisfied constraints in the given bundle. Returns an
 	 * empty array if no unsatisfied constraints can be found.
 	 * <p>
-	 * Note that a bundle may have no unsatisfied constraints and still not be 
+	 * Note that a bundle may have no unsatisfied constraints and still not be
 	 * resolved.
-	 * </p>  
-	 * 
+	 * </p>
+	 *
 	 * @param bundle the bundle to examine
 	 * @return an array containing all unsatisfied constraints for the given bundle
 	 */
 	public VersionConstraint[] getUnsatisfiedConstraints(BundleDescription bundle);
 
 	/**
-	 * Returns all unsatisfied constraints in the given bundles that have no possible supplier. 
+	 * Returns all unsatisfied constraints in the given bundles that have no possible supplier.
 	 * Returns an empty array if no unsatisfied leaf constraints can be found.
 	 * <p>
-	 * The returned constraints include only the unsatisfied constraints in the given 
-	 * state that have no possible supplier (leaf constraints).  There may 
-	 * be additional unsatisfied constraints in the given bundles but these will have at 
-	 * least one possible supplier.  In this case the possible supplier of the constraint 
+	 * The returned constraints include only the unsatisfied constraints in the given
+	 * state that have no possible supplier (leaf constraints).  There may
+	 * be additional unsatisfied constraints in the given bundles but these will have at
+	 * least one possible supplier.  In this case the possible supplier of the constraint
 	 * is not resolved for some reason.  For example, a given state only has Bundles X and Y
 	 * installed and Bundles X and Y have the following constraints:
 	 * </p>
@@ -102,16 +102,16 @@
 	 * Bundle X requires Bundle Y
 	 * Bundle Y requires Bundle Z</pre>
 	 * <p>
-	 * In this case Bundle Y has an unsatisfied constraint leaf on Bundle Z.  This will 
-	 * cause Bundle X's constraint on Bundle Y to be unsatisfied as well because the 
-	 * bundles are involved in a dependency chain.  Bundle X's constraint on Bundle Y is 
+	 * In this case Bundle Y has an unsatisfied constraint leaf on Bundle Z.  This will
+	 * cause Bundle X's constraint on Bundle Y to be unsatisfied as well because the
+	 * bundles are involved in a dependency chain.  Bundle X's constraint on Bundle Y is
 	 * not considered a leaf because there is a possible supplier Y in the given state.
 	 * </p>
 	 * <p>
-	 * Note that a bundle may have no unsatisfied constraints and still not be 
+	 * Note that a bundle may have no unsatisfied constraints and still not be
 	 * resolved.
-	 * </p>  
-	 * 
+	 * </p>
+	 *
 	 * @param bundles the bundles to examine
 	 * @return an array containing all unsatisfied leaf constraints for the given bundles
 	 * @since 3.2
@@ -119,56 +119,56 @@
 	public VersionConstraint[] getUnsatisfiedLeaves(BundleDescription[] bundles);
 
 	/**
-	 * Returns whether the given package specification constraint is resolvable. 
-	 * A package specification constraint may be 
+	 * Returns whether the given package specification constraint is resolvable.
+	 * A package specification constraint may be
 	 * resolvable but not resolved, which means that the bundle that provides
-	 * it has not been resolved for some other reason (e.g. another constraint 
+	 * it has not been resolved for some other reason (e.g. another constraint
 	 * could not be resolved, another version has been picked, etc).
-	 *  
+	 *
 	 * @param specification the package specification constraint to be examined
-	 * @return <code>true</code> if the constraint can be resolved, 
+	 * @return <code>true</code> if the constraint can be resolved,
 	 * <code>false</code> otherwise
 	 */
 	public boolean isResolvable(ImportPackageSpecification specification);
 
 	/**
-	 * Returns whether the given bundle specification constraint is resolvable. 
-	 * A bundle specification constraint may be 
+	 * Returns whether the given bundle specification constraint is resolvable.
+	 * A bundle specification constraint may be
 	 * resolvable but not resolved, which means that the bundle that provides
-	 * it has not been resolved for some other reason (e.g. another constraint 
+	 * it has not been resolved for some other reason (e.g. another constraint
 	 * could not be resolved, another version has been picked, etc).
-	 *  
+	 *
 	 * @param specification the bundle specification constraint to be examined
-	 * @return <code>true</code> if the constraint can be resolved, 
+	 * @return <code>true</code> if the constraint can be resolved,
 	 * <code>false</code> otherwise
 	 */
 	public boolean isResolvable(BundleSpecification specification);
 
 	/**
-	 * Returns whether the given host specification constraint is resolvable. 
-	 * A host specification constraint may be 
+	 * Returns whether the given host specification constraint is resolvable.
+	 * A host specification constraint may be
 	 * resolvable but not resolved, which means that the bundle that provides
-	 * it has not been resolved for some other reason (e.g. another constraint 
+	 * it has not been resolved for some other reason (e.g. another constraint
 	 * could not be resolved, another version has been picked, etc).
-	 *  
+	 *
 	 * @param specification the host specification constraint to be examined
-	 * @return <code>true</code> if the constraint can be resolved, 
+	 * @return <code>true</code> if the constraint can be resolved,
 	 * <code>false</code> otherwise
 	 */
 	public boolean isResolvable(HostSpecification specification);
 
 	/**
-	 * Sorts the given array of <strong>resolved</strong> bundles in pre-requisite order. If A 
-	 * requires B, A appears after B. 
-	 * Fragments will appear after all of their hosts. Constraints contributed by fragments will 
+	 * Sorts the given array of <strong>resolved</strong> bundles in pre-requisite order. If A
+	 * requires B, A appears after B.
+	 * Fragments will appear after all of their hosts. Constraints contributed by fragments will
 	 * be treated as if contributed by theirs hosts, affecting their position. This is true even if
 	 * the fragment does not appear in the given bundle array.
 	 * <p>
 	 * Unresolved bundles are ignored.
 	 * </p>
-	 *  
+	 *
 	 * @param toSort an array of bundles to be sorted
-	 * @return any cycles found 
+	 * @return any cycles found
 	 */
 	public Object[][] sortBundles(BundleDescription[] toSort);
 
@@ -187,11 +187,11 @@
 	/**
 	 * Returns a list of all packages that the specified bundle has access to which are
 	 * exported by other bundles.  This takes into account all constraint specifications
-	 * (Import-Package, Require-Bundle etc).  A deep dependency search is done for all 
-	 * packages which are available through the required bundles and any bundles which 
+	 * (Import-Package, Require-Bundle etc).  A deep dependency search is done for all
+	 * packages which are available through the required bundles and any bundles which
 	 * are reexported.  This method also takes into account all directives
 	 * which may be specified on the constraint specifications (e.g. uses, x-friends etc.)
-	 * 
+	 *
 	 * @param bundle a bundle to get the list of packages for.
 	 * @param options the options for selecting the visible packages
 	 * @return a list of all packages that the specified bundle has access to which are
@@ -203,7 +203,7 @@
 	public ExportPackageDescription[] getVisiblePackages(BundleDescription bundle, int options);
 
 	/**
-	 * Returns the access code that the specified <code>BundleDescription</code> has to the 
+	 * Returns the access code that the specified <code>BundleDescription</code> has to the
 	 * specified <code>ExportPackageDescription</code>.
 	 * @param bundle the bundle to find the access code for
 	 * @param export the export to find the access code for
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/StateObjectFactory.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/StateObjectFactory.java
index 7b685e1..54dd403 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/StateObjectFactory.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/StateObjectFactory.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -27,7 +27,7 @@
 import org.osgi.framework.Version;
 
 /**
- * A factory for states and their component objects.  
+ * A factory for states and their component objects.
  * <p>
  * This interface is not intended to be implemented by clients.
  * </p>
@@ -44,9 +44,9 @@
 	public static final StateObjectFactory defaultFactory = new StateObjectFactoryProxy();
 
 	/**
-	 * Creates an empty state. The returned state does not have an 
+	 * Creates an empty state. The returned state does not have an
 	 * attached resolver.
-	 * 
+	 *
 	 * @return the created state
 	 * @deprecated use {@link #createState(boolean) }
 	 */
@@ -54,7 +54,7 @@
 
 	/**
 	 * Creates an empty state with or without a resolver.
-	 * 
+	 *
 	 * @param resolver true if the created state should be initialized with a resolver.
 	 * @return the created state
 	 * @since 3.2
@@ -62,12 +62,12 @@
 	public State createState(boolean resolver);
 
 	/**
-	 * Creates a new state that is a copy of the given state. The returned state 
+	 * Creates a new state that is a copy of the given state. The returned state
 	 * will contain copies of all bundle descriptions in the given state.
 	 * The user objects from the original bundle descriptions is not copied and
-	 * no data pertaining to resolution is copied.  The returned state will have a 
+	 * no data pertaining to resolution is copied.  The returned state will have a
 	 * new resolver attached to it.
-	 *  
+	 *
 	 * @param state a state to be copied
 	 * @return the created state
 	 */
@@ -75,21 +75,21 @@
 
 	/**
 	 * Creates a bundle description from the given parameters.
-	 * 
-	 * @param id id for the bundle 
-	 * @param symbolicName symbolic name for the bundle (may be 
-	 * <code>null</code>) 
+	 *
+	 * @param id id for the bundle
+	 * @param symbolicName symbolic name for the bundle (may be
+	 * <code>null</code>)
 	 * @param version version for the bundle (may be <code>null</code>)
 	 * @param location location for the bundle (may be <code>null</code>)
-	 * @param required version constraints for all required bundles (may be 
+	 * @param required version constraints for all required bundles (may be
 	 * <code>null</code>)
-	 * @param host version constraint specifying the host for the bundle to be  
+	 * @param host version constraint specifying the host for the bundle to be
 	 * created. Should be <code>null</code> if the bundle is not a fragment
-	 * @param imports version constraints for all packages imported 
+	 * @param imports version constraints for all packages imported
 	 * (may be <code>null</code>)
 	 * @param exports package descriptions of all the exported packages
 	 * (may be <code>null</code>)
-	 * @param providedPackages the list of provided packages (may be <code>null</code>) 
+	 * @param providedPackages the list of provided packages (may be <code>null</code>)
 	 * @param singleton whether the bundle created should be a singleton
 	 * @return the created bundle description
 	 * @deprecated use {@link #createBundleDescription(long, String, Version, String, BundleSpecification[], HostSpecification, ImportPackageSpecification[], ExportPackageDescription[], boolean, boolean, boolean, String, String[], GenericSpecification[], GenericDescription[])}
@@ -98,21 +98,21 @@
 
 	/**
 	 * Creates a bundle description from the given parameters.
-	 * 
-	 * @param id id for the bundle 
-	 * @param symbolicName symbolic name for the bundle (may be 
-	 * <code>null</code>) 
+	 *
+	 * @param id id for the bundle
+	 * @param symbolicName symbolic name for the bundle (may be
+	 * <code>null</code>)
 	 * @param version version for the bundle (may be <code>null</code>)
 	 * @param location location for the bundle (may be <code>null</code>)
-	 * @param required version constraints for all required bundles (may be 
+	 * @param required version constraints for all required bundles (may be
 	 * <code>null</code>)
-	 * @param host version constraint specifying the host for the bundle to be  
+	 * @param host version constraint specifying the host for the bundle to be
 	 * created. Should be <code>null</code> if the bundle is not a fragment
-	 * @param imports version constraints for all packages imported 
+	 * @param imports version constraints for all packages imported
 	 * (may be <code>null</code>)
 	 * @param exports package descriptions of all the exported packages
 	 * (may be <code>null</code>)
-	 * @param providedPackages the list of provided packages (may be <code>null</code>) 
+	 * @param providedPackages the list of provided packages (may be <code>null</code>)
 	 * @param singleton whether the bundle created should be a singleton
 	 * @param attachFragments whether the bundle allows fragments to attach
 	 * @param dynamicFragments whether the bundle allows fragments to dynamically attach
@@ -127,9 +127,9 @@
 
 	/**
 	 * Creates a bundle description from the given parameters.
-	 * 
-	 * @param id id for the bundle 
-	 * @param symbolicName symbolic name for the bundle (may be  <code>null</code>) 
+	 *
+	 * @param id id for the bundle
+	 * @param symbolicName symbolic name for the bundle (may be  <code>null</code>)
 	 * @param version version for the bundle (may be <code>null</code>)
 	 * @param location location for the bundle (may be <code>null</code>)
 	 * @param required version constraints for all required bundles (may be  <code>null</code>)
@@ -149,9 +149,9 @@
 
 	/**
 	 * Creates a bundle description from the given parameters.
-	 * 
-	 * @param id id for the bundle 
-	 * @param symbolicName symbolic name for the bundle (may be  <code>null</code>) 
+	 *
+	 * @param id id for the bundle
+	 * @param symbolicName symbolic name for the bundle (may be  <code>null</code>)
 	 * @param version version for the bundle (may be <code>null</code>)
 	 * @param location location for the bundle (may be <code>null</code>)
 	 * @param required version constraints for all required bundles (may be  <code>null</code>)
@@ -174,7 +174,7 @@
 	/**
 	 * Creates a bundle description from the given parameters.
 	 *
-	 * @param id id for the bundle 
+	 * @param id id for the bundle
 	 * @param symbolicName the symbolic name of the bundle.  This may include directives and/or attributes encoded using the Bundle-SymbolicName header.
 	 * @param version version for the bundle (may be <code>null</code>)
 	 * @param location location for the bundle (may be <code>null</code>)
@@ -194,28 +194,28 @@
 
 	/**
 	 * Returns a bundle description based on the information in the supplied manifest dictionary.
-	 * The manifest should contain String keys and String values which correspond to 
+	 * The manifest should contain String keys and String values which correspond to
 	 * proper OSGi manifest headers and values.
-	 * 
+	 *
 	 * @param state the state for which the description is being created
 	 * @param manifest a collection of OSGi manifest headers and values
 	 * @param location the URL location of the bundle (may be <code>null</code>)
 	 * @param id the id of the bundle
 	 * @return a bundle description derived from the given information
-	 * @throws BundleException if an error occurs while reading the manifest 
+	 * @throws BundleException if an error occurs while reading the manifest
 	 */
 	public BundleDescription createBundleDescription(State state, Dictionary<String, String> manifest, String location, long id) throws BundleException;
 
 	/**
 	 * Returns a bundle description based on the information in the supplied manifest dictionary.
-	 * The manifest should contain String keys and String values which correspond to 
+	 * The manifest should contain String keys and String values which correspond to
 	 * proper OSGi manifest headers and values.
-	 * 
+	 *
 	 * @param manifest a collection of OSGi manifest headers and values
 	 * @param location the URL location of the bundle (may be <code>null</code>)
 	 * @param id the id of the bundle
 	 * @return a bundle description derived from the given information
-	 * @throws BundleException if an error occurs while reading the manifest 
+	 * @throws BundleException if an error occurs while reading the manifest
 	 * @deprecated use {@link #createBundleDescription(State, Dictionary, String, long)}
 	 */
 	public BundleDescription createBundleDescription(Dictionary<String, String> manifest, String location, long id) throws BundleException;
@@ -223,7 +223,7 @@
 	/**
 	 * Creates a bundle description that is a copy of the given description.
 	 * The user object of the original bundle description is not copied.
-	 * 
+	 *
 	 * @param original the bundle description to be copied
 	 * @return the created bundle description
 	 */
@@ -231,10 +231,10 @@
 
 	/**
 	 * Creates a bundle specification from the given parameters.
-	 * 
+	 *
 	 * @param requiredSymbolicName the symbolic name for the required bundle
 	 * @param requiredVersionRange the required version range (may be <code>null</code>)
-	 * @param export whether the required bundle should be re-exported 
+	 * @param export whether the required bundle should be re-exported
 	 * @param optional whether the constraint should be optional
 	 * @return the created bundle specification
 	 * @see VersionConstraint for information on the available match rules
@@ -243,7 +243,7 @@
 
 	/**
 	 * Creates a bundle specification that is a copy of the given constraint.
-	 *  
+	 *
 	 * @param original the constraint to be copied
 	 * @return the created bundle specification
 	 */
@@ -260,11 +260,11 @@
 
 	/**
 	 * Creates a host specification from the given parameters.
-	 *  
+	 *
 	 * @param hostSymbolicName the symbolic name for the host bundle
 	 * @param hostVersionRange the version range for the host bundle (may be <code>null</code>)
 	 * @return the created host specification
-	 * @see VersionConstraint for information on the available match rules 
+	 * @see VersionConstraint for information on the available match rules
 	 */
 	public HostSpecification createHostSpecification(String hostSymbolicName, VersionRange hostVersionRange);
 
@@ -279,7 +279,7 @@
 
 	/**
 	 * Creates a host specification that is a copy of the given constraint.
-	 * 
+	 *
 	 * @param original the constraint to be copied
 	 * @return the created host specification
 	 */
@@ -287,7 +287,7 @@
 
 	/**
 	 * Creates an import package specification from the given parameters.
-	 *  
+	 *
 	 * @param packageName the package name
 	 * @param versionRange the package versionRange (may be <code>null</code>).
 	 * @param bundleSymbolicName the Bundle-SymbolicName of the bundle that must export the package (may be <code>null</code>)
@@ -302,7 +302,7 @@
 	/**
 	 * Creates an import package specification that is a copy of the given import package
 	 * @param original the import package to be copied
-	 * @return the created package specification 
+	 * @return the created package specification
 	 */
 	public ImportPackageSpecification createImportPackageSpecification(ImportPackageSpecification original);
 
@@ -319,7 +319,7 @@
 	 * Used by the Resolver to dynamically create ExportPackageDescription objects during the resolution process.
 	 * The Resolver needs to create ExportPackageDescriptions dynamically for a host when a fragment.
 	 * exports a package<p>
-	 * 
+	 *
 	 * @param packageName the package name
 	 * @param version the version of the package (may be <code>null</code>)
 	 * @param directives the directives for the package (may be <code>null</code>)
@@ -423,12 +423,12 @@
 
 	/**
 	 * Persists the given state in the given output stream. Closes the stream.
-	 * 
+	 *
 	 * @param state the state to be written
 	 * @param stream the stream where to write the state to
-	 * @throws IOException if an IOException happens while writing the state to 
+	 * @throws IOException if an IOException happens while writing the state to
 	 * the stream
-	 * @throws IllegalArgumentException if the state provided was not created by 
+	 * @throws IllegalArgumentException if the state provided was not created by
 	 * this factory
 	 * @deprecated use {@link #writeState(State, File)} instead
 	 * @since 3.1
@@ -437,12 +437,12 @@
 
 	/**
 	 * Persists the given state in the given output stream. Closes the stream.
-	 * 
+	 *
 	 * @param state the state to be written
 	 * @param stream the stream where to write the state to
-	 * @throws IOException if an IOException happens while writing the state to 
+	 * @throws IOException if an IOException happens while writing the state to
 	 * the stream
-	 * @throws IllegalArgumentException if the state provided was not created by 
+	 * @throws IllegalArgumentException if the state provided was not created by
 	 * this factory
 	 * @deprecated use {@link #writeState(State, File)} instead
 	 * @see #writeState(State, OutputStream)
@@ -451,22 +451,22 @@
 
 	/**
 	 * Persists the given state in the given directory.
-	 * 
+	 *
 	 * @param state the state to be written
 	 * @param stateDirectory the directory where to write the state to
-	 * @throws IOException if an IOException happens while writing the state to 
+	 * @throws IOException if an IOException happens while writing the state to
 	 * the stream
-	 * @throws IllegalArgumentException if the state provided was not created by 
+	 * @throws IllegalArgumentException if the state provided was not created by
 	 * this factory
 	 */
 	public void writeState(State state, File stateDirectory) throws IOException;
 
 	/**
 	 * Reads a persisted state from the given stream. Closes the stream.
-	 * 
+	 *
 	 * @param stream the stream where to read the state from
 	 * @return the state read
-	 * @throws IOException if an IOException happens while reading the state from 
+	 * @throws IOException if an IOException happens while reading the state from
 	 * the stream
 	 * @deprecated use {@link #readState(File)} instead
 	 * @since 3.1
@@ -475,10 +475,10 @@
 
 	/**
 	 * Reads a persisted state from the given stream. Closes the stream.
-	 * 
+	 *
 	 * @param stream the stream where to read the state from
 	 * @return the state read
-	 * @throws IOException if an IOException happens while reading the state from 
+	 * @throws IOException if an IOException happens while reading the state from
 	 * the stream
 	 * @deprecated use {@link #readState(File)} instead
 	 * @see #readState(InputStream)
@@ -487,10 +487,10 @@
 
 	/**
 	 * Reads a persisted state from the given directory.
-	 * 
+	 *
 	 * @param stateDirectory the directory where to read the state from
 	 * @return the state read
-	 * @throws IOException if an IOException happens while reading the state from 
+	 * @throws IOException if an IOException happens while reading the state from
 	 * the stream
 	 */
 	public State readState(File stateDirectory) throws IOException;
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/StateWire.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/StateWire.java
index 181ca59..8a2057a 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/StateWire.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/StateWire.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -18,7 +18,7 @@
  * There are 4 parts to a state wire.
  * <ul>
  * <li>The requirement which may have been specified by a host bundle or one of its attached fragments.</li>
- * <li>The host bundle which is associated with the requirement.  There are cases where the host 
+ * <li>The host bundle which is associated with the requirement.  There are cases where the host
  * bundle may not be the same as the bundle which declared the requirement.  For example, if a fragment
  * specifies additional requirements.</li>
  * <li>The capability which may have been specified by a host bundle or one of its attached fragments.</li>
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/VersionConstraint.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/VersionConstraint.java
index a84fbe1..799a506 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/VersionConstraint.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/VersionConstraint.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -16,7 +16,7 @@
 import org.osgi.framework.wiring.BundleRequirement;
 
 /**
- * VersionConstraints represent the relationship between two bundles (in the 
+ * VersionConstraints represent the relationship between two bundles (in the
  * case of bundle requires) or a bundle and a package (in the case of import/export).
  * <p>
  * This interface is not intended to be implemented by clients.  The
@@ -29,7 +29,7 @@
 
 	/**
 	 * Returns this constraint's name.
-	 * 
+	 *
 	 * @return this constraint's name
 	 */
 	public String getName();
@@ -42,16 +42,16 @@
 
 	/**
 	 * Returns the bundle that declares this constraint.
-	 * 
+	 *
 	 * @return a bundle description
 	 */
 	public BundleDescription getBundle();
 
 	/**
-	 * Returns whether this constraint is resolved. A resolved constraint 
-	 * is guaranteed to have its supplier defined. 
-	 * 
-	 * @return <code>true</code> if this bundle is resolved, <code>false</code> 
+	 * Returns whether this constraint is resolved. A resolved constraint
+	 * is guaranteed to have its supplier defined.
+	 *
+	 * @return <code>true</code> if this bundle is resolved, <code>false</code>
 	 * otherwise
 	 */
 	public boolean isResolved();
@@ -60,25 +60,25 @@
 	 * Returns whether this constraint could be satisfied by the given supplier.
 	 * This will depend on the suppliers different attributes including its name,
 	 * versions and other arbitrary attributes
-	 * 
-	 * @param supplier a supplier to be tested against this constraint (may be 
+	 *
+	 * @param supplier a supplier to be tested against this constraint (may be
 	 * <code>null</code>)
-	 * @return <code>true</code> if this constraint could be resolved using the supplier, 
-	 * <code>false</code> otherwise 
+	 * @return <code>true</code> if this constraint could be resolved using the supplier,
+	 * <code>false</code> otherwise
 	 */
 	public boolean isSatisfiedBy(BaseDescription supplier);
 
 	/**
 	 * Returns the supplier that satisfies this constraint, if it is resolved.
-	 *  
-	 * @return a supplier, or <code>null</code> 
+	 *
+	 * @return a supplier, or <code>null</code>
 	 * @see #isResolved()
 	 */
 	public BaseDescription getSupplier();
 
 	/**
 	 * Returns the requirement represented by this constraint.
-	 * Some constraint types may not be able to represent 
+	 * Some constraint types may not be able to represent
 	 * a requirement.  In such cases <code>null</code> is
 	 * returned.
 	 * @return the requirement represented by this constraint
@@ -87,9 +87,9 @@
 	public BundleRequirement getRequirement();
 
 	/**
-	 * Returns the user object associated to this constraint, or 
+	 * Returns the user object associated to this constraint, or
 	 * <code>null</code> if none exists.
-	 *  
+	 *
 	 * @return the user object associated to this constraint,
 	 * or <code>null</code>
 	 * @since 3.8
@@ -98,11 +98,11 @@
 
 	/**
 	 * Associates a user-provided object to this constraint, or
-	 * removes an existing association, if <code>null</code> is provided. The 
-	 * provided object is not interpreted in any ways by this 
+	 * removes an existing association, if <code>null</code> is provided. The
+	 * provided object is not interpreted in any ways by this
 	 * constrain.
-	 * 
-	 * @param userObject an arbitrary object provided by the user, or 
+	 *
+	 * @param userObject an arbitrary object provided by the user, or
 	 * <code>null</code>
 	 * @since 3.8
 	 */
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/VersionRange.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/VersionRange.java
index ec61c40..d2dfe0b 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/VersionRange.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/resolver/VersionRange.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -39,7 +39,7 @@
 	 * then {@link Version#emptyVersion} is used.
 	 * @param maxVersion the maximum version of the range. If <code>null</code>
 	 * then new Version(Integer.MAX_VALUE, Integer.MAX_VALUE, Integer.MAX_VALUE)
-	 * is used. 
+	 * is used.
 	 */
 	public VersionRange(Version minVersion, boolean includeMin, Version maxVersion, boolean includeMax) {
 		super(includeMin ? INCLUDE_MIN : EXCLUDE_MIN, minVersion == null ? Version.emptyVersion : minVersion, versionMax.equals(maxVersion) ? null : maxVersion, includeMax ? INCLUDE_MAX : EXCLUDE_MAX);
@@ -47,7 +47,7 @@
 
 	/**
 	 * Creates a version range from the specified string.
-	 * 
+	 *
 	 * <p>
 	 * Here is the grammar for version range strings.
 	 * </p>
@@ -62,7 +62,7 @@
 	 * include-max ::= ']'
 	 * exclude-max ::= ')'
 	 * </pre>
-	 * 
+	 *
 	 * @param versionRange string representation of the version range or <code>null</code>
 	 * for the empty range "0.0.0"
 	 * @see Version#Version(String) definition of <code>version</code>
@@ -92,7 +92,7 @@
 	 * Returns the maximum Version of this VersionRange.
 	 * <p>
 	 * This method is deprecated.  For ranges that have no maximum this method
-	 * incorrectly returns a version equal to 
+	 * incorrectly returns a version equal to
 	 * <code>Version(Integer.MAX_VALUE, Integer.MAX_VALUE, Integer.MAX_VALUE)</code>.
 	 * Use {@link org.osgi.framework.VersionRange#getRight()} instead.
 	 * @return the maximum Version of this VersionRange
@@ -116,11 +116,11 @@
 	 * Returns whether the given version is included in this VersionRange.
 	 * This will depend on the minimum and maximum versions of this VersionRange
 	 * and the given version.
-	 * 
-	 * @param version a version to be tested for inclusion in this VersionRange. 
+	 *
+	 * @param version a version to be tested for inclusion in this VersionRange.
 	 * If <code>null</code> then {@link Version#emptyVersion} is used.
-	 * @return <code>true</code> if the version is included, 
-	 * <code>false</code> otherwise 
+	 * @return <code>true</code> if the version is included,
+	 * <code>false</code> otherwise
 	 */
 	public boolean isIncluded(Version version) {
 		if (version == null)
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/security/TrustEngine.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/security/TrustEngine.java
index fd94539..b905b8f 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/security/TrustEngine.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/service/security/TrustEngine.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -19,7 +19,7 @@
 import org.eclipse.osgi.internal.signedcontent.TrustEngineListener;
 
 /**
- * A <code>TrustEngine</code> is used to establish the authenticity of a 
+ * A <code>TrustEngine</code> is used to establish the authenticity of a
  * {@link Certificate} chain.
  * <p>
  * Clients may implement this interface.
@@ -29,7 +29,7 @@
 public abstract class TrustEngine {
 	/**
 	 * Returns the certificate trust anchor contained in the specified chain which
-	 * was used to establish the authenticity of the chain.  If no 
+	 * was used to establish the authenticity of the chain.  If no
 	 * trust anchor is found in the chain then <code>null</code> is returned.
 	 * @param chain - a complete or incomplete certificate chain, implementations *MAY* complete chains
 	 * @return - the certificate trust anchor used to establish authenticity
@@ -38,7 +38,7 @@
 	public abstract Certificate findTrustAnchor(Certificate[] chain) throws IOException;
 
 	/**
-	 * Add a trust anchor point to this trust engine. A trust anchor implies that a certificate, 
+	 * Add a trust anchor point to this trust engine. A trust anchor implies that a certificate,
 	 * and any of its children, is to be considered trusted.  If <code>null</code> is used
 	 * as the alias then an alias will be generated based on the trust anchor certificate.
 	 * @param anchor - the certificate to add as an anchor point
@@ -58,7 +58,7 @@
 	}
 
 	/**
-	 * Add a trust anchor point to this trust engine. A trust anchor implies that a certificate, 
+	 * Add a trust anchor point to this trust engine. A trust anchor implies that a certificate,
 	 * and any of its children, is to be considered trusted.  If <code>null</code> is used
 	 * as the alias then an alias will be generated based on the trust anchor certificate.
 	 * @param anchor - the certificate to add as an anchor point
@@ -118,7 +118,7 @@
 
 	/**
 	 * Return the certificate associated with the unique "friendly name" in the engine.
-	 * @param alias - the friendly name  
+	 * @param alias - the friendly name
 	 * @return the associated trust anchor
 	 * @throws IOException if there is a problem connecting to the backing store
 	 * @throws GeneralSecurityException if there is a certificate problem
@@ -135,14 +135,14 @@
 
 	/**
 	 * Return a value indicate whether this trust engine is read-only.
-	 * 
+	 *
 	 * @return	true if this trust engine is read-only false otherwise.
 	 */
 	public abstract boolean isReadOnly();
 
 	/**
 	 * Return a representation string of this trust engine
-	 * 
+	 *
 	 * @return	a string
 	 */
 	public abstract String getName();
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/signedcontent/InvalidContentException.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/signedcontent/InvalidContentException.java
index a01b67a..5f39946 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/signedcontent/InvalidContentException.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/signedcontent/InvalidContentException.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -27,7 +27,7 @@
 
 	/**
 	 * Constructs an <code>InvalidContentException</code> with the specified detail
-	 * message and cause. 
+	 * message and cause.
 	 *
 	 * @param message the exception message
 	 * @param cause the cause, may be <code>null</code>
@@ -40,7 +40,7 @@
 	/**
 	 * Returns the cause of this exception or <code>null</code> if no cause
 	 * was specified when this exception was created.
-	 * 
+	 *
 	 * @return The cause of this exception or <code>null</code> if no cause was created.
 	 */
 	@Override
@@ -50,7 +50,7 @@
 
 	/**
 	 * The cause of this exception can only be set when constructed.
-	 * 
+	 *
 	 * @param t Cause of the exception.
 	 * @return This object.
 	 * @throws java.lang.IllegalStateException This method will always throw an
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/signedcontent/SignedContent.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/signedcontent/SignedContent.java
index a3b59f9..6fdedc2 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/signedcontent/SignedContent.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/signedcontent/SignedContent.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -21,7 +21,7 @@
  * A <code>SignedContent</code> object represents content which may be signed.  A
  * {@link SignedContentFactory} is used to create signed content objects.
  * <p>
- * A <code>SignedContent</code> object is intended to provide information about 
+ * A <code>SignedContent</code> object is intended to provide information about
  * the signers of the content, and cannot be used to access the actual data of the content.
  * </p>
  * <p>
@@ -34,13 +34,13 @@
 
 	/**
 	 * Returns all entries of the content.  The returned entries can be used
-	 * to verify the entry content using {@link SignedContentEntry#verify()} and 
+	 * to verify the entry content using {@link SignedContentEntry#verify()} and
 	 * get signer info for each entry in this content using {@link SignedContentEntry#getSignerInfos()}.
-	 * Note that this operation may be expensive because it requires an 
+	 * Note that this operation may be expensive because it requires an
 	 * exhaustive search for entries over the entire content.
 	 * <p>
 	 * Unsigned entries are included in the result.  Entries for which signer info exists
-	 * but no content is found are also returned. For example, when an entry is removed from 
+	 * but no content is found are also returned. For example, when an entry is removed from
 	 * a signed jar but the jar is not resigned, the signer thinks the entry should exist
 	 * but the content got removed.  This would be considered an invalid entry which would fail verification.
 	 * </p>
@@ -64,7 +64,7 @@
 
 	/**
 	 * Returns true if the content is signed; false otherwise.  This is a convenience method
-	 * equivalent to calling <code>{@link #getSignerInfos()}.length &gt; 0</code> 
+	 * equivalent to calling <code>{@link #getSignerInfos()}.length &gt; 0</code>
 	 * @return true if the content is signed
 	 */
 	public boolean isSigned();
@@ -84,8 +84,8 @@
 	public SignerInfo getTSASignerInfo(SignerInfo signerInfo);
 
 	/**
-	 * Checks if the certificates are valid for the specified signer.  If the signer has a singing time 
-	 * returned by {@link #getSigningTime(SignerInfo)} then that time is used to check the 
+	 * Checks if the certificates are valid for the specified signer.  If the signer has a singing time
+	 * returned by {@link #getSigningTime(SignerInfo)} then that time is used to check the
 	 * validity of the certificates; otherwise the current time is used.
 	 * @param signerInfo the signer info to check validity for.
 	 * @throws CertificateExpiredException if one of the certificates of this signer is expired
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/signedcontent/SignedContentEntry.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/signedcontent/SignedContentEntry.java
index 1905699..47603cf 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/signedcontent/SignedContentEntry.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/signedcontent/SignedContentEntry.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -21,7 +21,7 @@
  * A <code>SignedContentEntry</code> represents a content entry which may be
  * signed.
  * <p>
- * A <code>SignedContentEntry</code> object is intended to provide information about 
+ * A <code>SignedContentEntry</code> object is intended to provide information about
  * the signers of the content entry, and cannot be used to access the actual data of the entry.
  * </p>
  * <p>
@@ -46,7 +46,7 @@
 
 	/**
 	 * Returns true if the entry is signed; false otherwise.  This is a convenience method
-	 * equivalent to calling <code>{@link #getSignerInfos()}.length &gt; 0</code> 
+	 * equivalent to calling <code>{@link #getSignerInfos()}.length &gt; 0</code>
 	 * @return true if the content is signed
 	 */
 	public boolean isSigned();
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/signedcontent/SignedContentFactory.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/signedcontent/SignedContentFactory.java
index c7dbc80..64bc245 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/signedcontent/SignedContentFactory.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/signedcontent/SignedContentFactory.java
@@ -25,7 +25,7 @@
  * The framework will register a factory implementation as an OSGi service.
  * This service can be used to get <code>SignedContent</code> for a bundle.
  * It can also be used to get <code>SignedContent</code> for a repository file.
- * The supported formats for file repositories are jar files and  directories containing the 
+ * The supported formats for file repositories are jar files and  directories containing the
  * content of an extracted jar.
  * </p>
  * <p>
@@ -50,7 +50,7 @@
 
 	/**
 	 * Returns a <code>SignedContent</code> object for the specified bundle.
-	 * @param bundle the bundle to get a signed content for. 
+	 * @param bundle the bundle to get a signed content for.
 	 * @return signed content for the specified bundle.
 	 * @throws IOException if an IO exception occurs while reading the bundle content
 	 * @throws NoSuchProviderException if there's no security provider for the signed content
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/signedcontent/SignerInfo.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/signedcontent/SignerInfo.java
index 92243d9..4d62547 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/signedcontent/SignerInfo.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/signedcontent/SignerInfo.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -39,14 +39,14 @@
 	public Certificate getTrustAnchor();
 
 	/**
-	 * Returns true if the trust anchor has been authenticated.  This is a convenience 
+	 * Returns true if the trust anchor has been authenticated.  This is a convenience
 	 * method equivalent to calling <code>{@link #getTrustAnchor()} != null</code>
 	 * @return true if the the signer info is trusted
 	 */
 	public boolean isTrusted();
 
 	/**
-	 * Returns the <code>MessageDigest</code> algorithm used to verify content signed by this 
+	 * Returns the <code>MessageDigest</code> algorithm used to verify content signed by this
 	 * signer info.
 	 * @return the algorithm
 	 */
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/BundleInfo.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/BundleInfo.java
index fd100cd..3a30148 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/BundleInfo.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/BundleInfo.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -307,9 +307,9 @@
 		}
 
 		/**
-		 * Gets called by BundleFile during {@link BundleFile#getFile(String, boolean)}.  This method 
-		 * will allocate a File object where content of the specified path may be 
-		 * stored for this generation.  The returned File object may 
+		 * Gets called by BundleFile during {@link BundleFile#getFile(String, boolean)}.  This method
+		 * will allocate a File object where content of the specified path may be
+		 * stored for this generation.  The returned File object may
 		 * not exist if the content has not previously been stored.
 		 * @param path the path to the content to extract from the generation
 		 * @return a file object where content of the specified path may be stored.
@@ -320,14 +320,14 @@
 		}
 
 		/**
-		 * Gets called by BundleFile during {@link BundleFile#getFile(String, boolean)}.  This method 
-		 * will allocate a File object where content of the specified path may be 
-		 * stored for this generation.  The returned File object may 
+		 * Gets called by BundleFile during {@link BundleFile#getFile(String, boolean)}.  This method
+		 * will allocate a File object where content of the specified path may be
+		 * stored for this generation.  The returned File object may
 		 * not exist if the content has not previously been stored.
 		 * @param path the path to the content to extract from the generation
 		 * @param base the base path that is prepended to the path, may be null
 		 * @return a file object where content of the specified path may be stored.
-		 * @throws StorageException if the path will escape the persistent storage of 
+		 * @throws StorageException if the path will escape the persistent storage of
 		 * the generation starting at the specified base
 		 */
 		public File getExtractFile(String base, String path) {
@@ -556,7 +556,7 @@
 								return true;
 						break;
 					case 'I' :
-						if (line.startsWith("Implementation-Title: ") || line.startsWith("Implementation-Version: ") || line.startsWith("Implementation-Vendor: ")) //$NON-NLS-1$ //$NON-NLS-2$//$NON-NLS-3$ 
+						if (line.startsWith("Implementation-Title: ") || line.startsWith("Implementation-Version: ") || line.startsWith("Implementation-Vendor: ")) //$NON-NLS-1$ //$NON-NLS-2$//$NON-NLS-3$
 							return true;
 						break;
 				}
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/BundleLocalizationImpl.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/BundleLocalizationImpl.java
index 28950e7..099ba2d 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/BundleLocalizationImpl.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/BundleLocalizationImpl.java
@@ -22,9 +22,9 @@
 import org.osgi.framework.Bundle;
 
 /**
- * The implementation of the service that gets ResourceBundle objects from a given 
- * bundle with a given locale. 
- * 
+ * The implementation of the service that gets ResourceBundle objects from a given
+ * bundle with a given locale.
+ *
  * <p>Internal class.</p>
  */
 
@@ -32,7 +32,7 @@
 	/**
 	 * The getLocalization method gets a ResourceBundle object for the given
 	 * locale and bundle.
-	 * 
+	 *
 	 * @return A <code>ResourceBundle</code> object for the given bundle and locale.
 	 * If null is passed for the locale parameter, the default locale is used.
 	 */
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/FrameworkExtensionInstaller.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/FrameworkExtensionInstaller.java
index 59f5701..bcc1da3 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/FrameworkExtensionInstaller.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/FrameworkExtensionInstaller.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/ManifestLocalization.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/ManifestLocalization.java
index cf49f7e..ce0025b 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/ManifestLocalization.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/ManifestLocalization.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/PermissionData.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/PermissionData.java
index abd867c..4b30874 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/PermissionData.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/PermissionData.java
@@ -107,7 +107,7 @@
 
 	/**
 	 * Returns the persistent array of encoded ConditionalPermissionInfo strings
-	 * @return an array of encoded ConditionalPermissionInfo strings or null 
+	 * @return an array of encoded ConditionalPermissionInfo strings or null
 	 * if none exist in persistent storage.
 	 */
 	public String[] getConditionalPermissionInfos() {
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/Storage.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/Storage.java
index 2d5893b..f64df7d 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/Storage.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/Storage.java
@@ -7,10 +7,10 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
- *      Christoph Laeubrich - Bug 527175 - Storage#getSystemContent() should first make the file absolute 
+ *      Christoph Laeubrich - Bug 527175 - Storage#getSystemContent() should first make the file absolute
  *******************************************************************************/
 package org.eclipse.osgi.storage;
 
@@ -577,7 +577,7 @@
 		if (in != null) {
 			return new URLConnection(null) {
 				/**
-				 * @throws IOException  
+				 * @throws IOException
 				 */
 				@Override
 				public void connect() throws IOException {
@@ -585,7 +585,7 @@
 				}
 
 				/**
-				 * @throws IOException  
+				 * @throws IOException
 				 */
 				@Override
 				public InputStream getInputStream() throws IOException {
@@ -1960,7 +1960,7 @@
 					// search the generation until we have searched them all
 					while (nextElement == null && curDataIndex < generationArray.length)
 						nextElement = generationArray[curDataIndex++].getEntry(curPath);
-					// we have searched all datas then advance to the next path 
+					// we have searched all datas then advance to the next path
 					if (curDataIndex >= generationArray.length) {
 						curPathIndex++;
 						curDataIndex = 0;
@@ -2062,7 +2062,7 @@
 		return buffer == null ? filePattern : buffer.toString();
 	}
 
-	// Use LinkedHashSet for optimized performance of contains() plus ordering 
+	// Use LinkedHashSet for optimized performance of contains() plus ordering
 	// guarantees.
 	private static LinkedHashSet<String> listEntryPaths(BundleFile bundleFile, String path, Filter patternFilter, Hashtable<String, String> patternProps, int options, LinkedHashSet<String> pathList) {
 		if (pathList == null)
@@ -2117,7 +2117,7 @@
 		// This has been worked around by the bundles loading the libraries in a particular order (and setting some LIB_PATH env).
 		// The one catch is that the libraries need to be in the same directory and they must use their original lib names.
 		//
-		// This bit of code attempts to do that by using the bundle ID as an ID for the temp dir along with an incrementing ID 
+		// This bit of code attempts to do that by using the bundle ID as an ID for the temp dir along with an incrementing ID
 		// in cases where the temp dir may already exist.
 		Long bundleID = new Long(generation.getBundleInfo().getBundleId());
 		for (int i = 0; i < Integer.MAX_VALUE; i++) {
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/StorageUtil.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/StorageUtil.java
index 634c069..a47980d 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/StorageUtil.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/StorageUtil.java
@@ -222,7 +222,7 @@
 	/**
 	 * To remain Java 6 compatible work around the unreliable renameTo() via
 	 * retries: http://bugs.java.com/view_bug.do?bug_id=6213298
-	 * 
+	 *
 	 * @param from
 	 * @param to
 	 */
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/SystemBundleFile.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/SystemBundleFile.java
index c959047..c679185 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/SystemBundleFile.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/SystemBundleFile.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/bundlefile/BundleEntry.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/bundlefile/BundleEntry.java
index 81ccd31..ffbde9a 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/bundlefile/BundleEntry.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/bundlefile/BundleEntry.java
@@ -61,7 +61,7 @@
 
 	/**
 	 * Get a URL to the bundle entry that uses a common protocol (i.e. file:
-	 * jar: or http: etc.).  
+	 * jar: or http: etc.).
 	 * @return a URL to the bundle entry that uses a common protocol
 	 */
 	public abstract URL getLocalURL();
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/bundlefile/BundleFile.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/bundlefile/BundleFile.java
index 6fba2d6..7a964a2 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/bundlefile/BundleFile.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/bundlefile/BundleFile.java
@@ -26,7 +26,7 @@
 import org.eclipse.osgi.storage.url.bundleresource.Handler;
 
 /**
- * The BundleFile API is used by Adaptors to read resources out of an 
+ * The BundleFile API is used by Adaptors to read resources out of an
  * installed Bundle in the Framework.
  * <p/>
  * Clients wishing to modify or extend the functionality of this class at
@@ -43,7 +43,7 @@
 
 	/**
 	 * BundleFile constructor
-	 * @param basefile The File object where this BundleFile is 
+	 * @param basefile The File object where this BundleFile is
 	 * persistently stored.
 	 */
 	public BundleFile(File basefile) {
@@ -69,35 +69,35 @@
 	 */
 	abstract public BundleEntry getEntry(String path);
 
-	/** 
-	 * Performs the same function as calling 
+	/**
+	 * Performs the same function as calling
 	 * {@link #getEntryPaths(String, boolean)} with <code>recurse</code> equal
 	 * to <code>false</code>.
 	 * @param path path of the entry to locate in the bundle
 	 * @return an Enumeration of Strings that indicate the paths found or
-	 * null if the path does not exist. 
+	 * null if the path does not exist.
 	 */
 	public Enumeration<String> getEntryPaths(String path) {
 		return getEntryPaths(path, false);
 	}
 
-	/** 
-	 * Allows to access the entries of the bundle. 
-	 * Since the bundle content is usually a jar, this 
+	/**
+	 * Allows to access the entries of the bundle.
+	 * Since the bundle content is usually a jar, this
 	 * allows to access the jar contents.
-	 * 
+	 *
 	 * GetEntryPaths allows to enumerate the content of "path".
 	 * If path is a directory, it is equivalent to listing the directory
-	 * contents. The returned names are either files or directories 
-	 * themselves. If a returned name is a directory, it finishes with a 
+	 * contents. The returned names are either files or directories
+	 * themselves. If a returned name is a directory, it finishes with a
 	 * slash. If a returned name is a file, it does not finish with a slash.
 	 * @param path path of the entry to locate in the bundle
-	 * @param recurse - If <code>true</code>, provide entries for the files and 
+	 * @param recurse - If <code>true</code>, provide entries for the files and
 	 *        directories within the directory denoted by <code>path</code> plus
 	 *        all sub-directories and files; otherwise, provide only the entries
 	 *        within the immediate directory.
 	 * @return an Enumeration of Strings that indicate the paths found or
-	 * null if the path does not exist. 
+	 * null if the path does not exist.
 	 */
 	abstract public Enumeration<String> getEntryPaths(String path, boolean recurse);
 
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/bundlefile/BundleFileWrapper.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/bundlefile/BundleFileWrapper.java
index e9146e2..ee593eb 100755
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/bundlefile/BundleFileWrapper.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/bundlefile/BundleFileWrapper.java
@@ -22,12 +22,12 @@
 import org.eclipse.osgi.storage.BundleInfo;
 
 /**
- * A {@link BundleFile bundle file} decorator. 
+ * A {@link BundleFile bundle file} decorator.
  * <p/>
- * Clients wishing to modify or extend the behavior of a bundle file at runtime 
- * should extend this class instead. A hook is provided by the related {@link 
- * BundleFileWrapperFactoryHook abstract factory} class in response to a 
- * {@link BundleFileWrapperFactoryHook#wrapBundleFile(BundleFile, 
+ * Clients wishing to modify or extend the behavior of a bundle file at runtime
+ * should extend this class instead. A hook is provided by the related {@link
+ * BundleFileWrapperFactoryHook abstract factory} class in response to a
+ * {@link BundleFileWrapperFactoryHook#wrapBundleFile(BundleFile,
  * BundleInfo.Generation, boolean) call} from the framework.
  */
 public class BundleFileWrapper extends BundleFile {
@@ -36,7 +36,7 @@
 	/**
 	 * Creates a new <code>BundleFileWrapper</code> instance wrapping the
 	 * given {@link BundleFile bundle file}.
-	 * 
+	 *
 	 * @param bundleFile - The bundle file to wrap.
 	 * @throws NullPointerException - If the bundle file is <code>null</code>.
 	 */
@@ -67,7 +67,7 @@
 
 	/**
 	 * Get the wrapped bundle file.
-	 * 
+	 *
 	 * @return The wrapped bundle file.
 	 */
 	public BundleFile getBundleFile() {
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/bundlefile/BundleFileWrapperChain.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/bundlefile/BundleFileWrapperChain.java
index 3421da4..1fcabe0 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/bundlefile/BundleFileWrapperChain.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/bundlefile/BundleFileWrapperChain.java
@@ -17,7 +17,7 @@
 import org.eclipse.osgi.internal.hookregistry.BundleFileWrapperFactoryHook;
 
 /**
- * Used to chain the BundleFile objects returned from {@link BundleFileWrapperFactoryHook}.  
+ * Used to chain the BundleFile objects returned from {@link BundleFileWrapperFactoryHook}.
  * This class is useful for traversing the chain of wrapped bundle files.
  */
 public class BundleFileWrapperChain extends BundleFileWrapper {
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/bundlefile/CloseableBundleFile.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/bundlefile/CloseableBundleFile.java
index a06223c..73720b9 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/bundlefile/CloseableBundleFile.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/bundlefile/CloseableBundleFile.java
@@ -84,7 +84,7 @@
 					// If the revision has been removed from the list of revisions then it has been deleted
 					// because the bundle has been uninstalled or updated
 					if (!r.getRevisions().getModuleRevisions().contains(r)) {
-						// instead of filling the log with errors about missing files from 
+						// instead of filling the log with errors about missing files from
 						// uninstalled/updated bundles just give it an info level
 						eventType = ContainerEvent.INFO;
 					}
@@ -148,7 +148,7 @@
 	 * Extracts a directory and all sub content to disk
 	 * @param dirName the directory name to extract
 	 * @return the File used to extract the content to.  A value
-	 * of <code>null</code> is returned if the directory to extract does 
+	 * of <code>null</code> is returned if the directory to extract does
 	 * not exist or if content extraction is not supported.
 	 */
 	File extractDirectory(String dirName) {
@@ -294,7 +294,7 @@
 			LinkedHashSet<String> result = new LinkedHashSet<>();
 			// Get all entries and add the ones of interest.
 			for (String entryPath : getPaths()) {
-				// Is the entry of possible interest? Note that 
+				// Is the entry of possible interest? Note that
 				// string.startsWith("") == true.
 				if (entryPath.startsWith(path)) {
 					// If we get here, we know that the entry is either (1) equal to
@@ -430,7 +430,7 @@
 	 * This method will ensure the bundle file is open,
 	 * call {@link #doGetInputStream(Object)} to get the
 	 * actual input stream, then if the bundle file limit
-	 * is enabled it will wrapper the input stream in a 
+	 * is enabled it will wrapper the input stream in a
 	 * special input stream that keeps track of active
 	 * input streams to prevent the bundle file from being
 	 * closed until the stream is closed (or a timeout happens).
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/bundlefile/DirZipBundleEntry.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/bundlefile/DirZipBundleEntry.java
index 8e62379..288f436 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/bundlefile/DirZipBundleEntry.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/bundlefile/DirZipBundleEntry.java
@@ -19,7 +19,7 @@
 import java.net.URL;
 
 /**
- * Represents a directory entry in a ZipBundleFile.  This object is used to 
+ * Represents a directory entry in a ZipBundleFile.  This object is used to
  * reference a directory entry in a ZipBundleFile when the directory entries are
  * not included in the zip file.
  */
@@ -40,7 +40,7 @@
 	}
 
 	/**
-	 * @throws IOException  
+	 * @throws IOException
 	 */
 	@Override
 	public InputStream getInputStream() throws IOException {
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/bundlefile/MRUBundleFileList.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/bundlefile/MRUBundleFileList.java
index e6d8caf..15d6ac9 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/bundlefile/MRUBundleFileList.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/bundlefile/MRUBundleFileList.java
@@ -72,8 +72,8 @@
 	}
 
 	/**
-	 * Adds a BundleFile which is about to be opened to the MRU list.  If 
-	 * the number of open BundleFiles == the fileLimit then the least 
+	 * Adds a BundleFile which is about to be opened to the MRU list.  If
+	 * the number of open BundleFiles == the fileLimit then the least
 	 * recently used BundleFile is closed.
 	 * @param bundleFile the bundle file about to be opened.
 	 * @return true if back pressure is needed
@@ -98,7 +98,7 @@
 					}
 			} else {
 				// numOpen has reached the fileLimit
-				// find the least recently used bundleFile and close it 
+				// find the least recently used bundleFile and close it
 				// and use its slot for the new bundleFile to be opened.
 				index = 0;
 				for (int i = 1; i < fileLimit; i++)
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/bundlefile/NestedDirBundleFile.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/bundlefile/NestedDirBundleFile.java
index 1167b9f..b37922b 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/bundlefile/NestedDirBundleFile.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/bundlefile/NestedDirBundleFile.java
@@ -143,7 +143,7 @@
 	}
 
 	/**
-	 * @throws IOException  
+	 * @throws IOException
 	 */
 	@Override
 	public void open() throws IOException {
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/bundlefile/ZipBundleEntry.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/bundlefile/ZipBundleEntry.java
index 8dba5fd..b15a4cc 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/bundlefile/ZipBundleEntry.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/bundlefile/ZipBundleEntry.java
@@ -95,7 +95,7 @@
 		try {
 			return new URL("jar:" + bundleFile.basefile.toURL() + "!/" + zipEntry.getName()); //$NON-NLS-1$//$NON-NLS-2$
 		} catch (MalformedURLException e) {
-			//This can not happen. 
+			//This can not happen.
 			return null;
 		}
 	}
@@ -108,7 +108,7 @@
 			if (file != null)
 				return file.toURL();
 		} catch (MalformedURLException e) {
-			//This can not happen. 
+			//This can not happen.
 		}
 		return null;
 	}
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/bundlefile/ZipBundleFile.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/bundlefile/ZipBundleFile.java
index d206899..3f668a7 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/bundlefile/ZipBundleFile.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/bundlefile/ZipBundleFile.java
@@ -50,7 +50,7 @@
 
 	/**
 	* Returns a ZipEntry for the bundle file. Must be called while holding the open lock.
-	* This method does not ensure that the ZipFile is opened. Callers may need to call getZipfile() prior to calling this 
+	* This method does not ensure that the ZipFile is opened. Callers may need to call getZipfile() prior to calling this
 	* method.
 	* @param path the path to an entry
 	* @return a ZipEntry or null if the entry does not exist
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/url/BundleResourceHandler.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/url/BundleResourceHandler.java
index 991f057..d377049 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/url/BundleResourceHandler.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/url/BundleResourceHandler.java
@@ -45,8 +45,8 @@
 		this.bundleEntry = bundleEntry;
 	}
 
-	/** 
-	 * Parse reference URL. 
+	/**
+	 * Parse reference URL.
 	 */
 	@Override
 	protected void parseURL(URL url, String str, int start, int end) {
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/url/BundleURLConverter.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/url/BundleURLConverter.java
index 2e4afbc..d3aa6d9 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/url/BundleURLConverter.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/url/BundleURLConverter.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -23,7 +23,7 @@
 /**
  * The service implementation that allows bundleresource or bundleentry
  * URLs to be converted to native file URLs on the local file system.
- * 
+ *
  * <p>Internal class.</p>
  */
 public class BundleURLConverter implements URLConverter {
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/url/reference/Handler.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/url/reference/Handler.java
index a6b1c4f..93c1e36 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/url/reference/Handler.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/url/reference/Handler.java
@@ -18,7 +18,7 @@
 import java.net.*;
 
 /**
- * URLStreamHandler for reference protocol.  A reference URL is used to hold a 
+ * URLStreamHandler for reference protocol.  A reference URL is used to hold a
  * reference to a local file URL.  A reference URL allows bundles to be installed
  * by reference.  This means the content of the bundle will not be copied.  Instead
  * the content of the bundle will be loaded from the reference location specified
@@ -44,7 +44,7 @@
 	}
 
 	/**
-	 * @throws IOException  
+	 * @throws IOException
 	 */
 	@Override
 	protected URLConnection openConnection(URL url) throws IOException {
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/url/reference/ReferenceURLConnection.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/url/reference/ReferenceURLConnection.java
index 80041aa..d6b653f 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/url/reference/ReferenceURLConnection.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/storage/url/reference/ReferenceURLConnection.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -72,19 +72,19 @@
 		if (file.isFile()) {
 			// Try to open the file to ensure that this is possible: see bug 260217
 			// If access is denied, a FileNotFoundException with (access denied) message is thrown
-			// Here file.canRead() cannot be used, because on Windows it does not 
+			// Here file.canRead() cannot be used, because on Windows it does not
 			// return correct values - bug 6203387 in Sun's bug database
 			InputStream is = new FileInputStream(file);
 			is.close();
 		} else if (file.isDirectory()) {
 			// There is no straightforward way to check if a directory
-			// has read permissions - same issues for File.canRead() as above; 
+			// has read permissions - same issues for File.canRead() as above;
 			// try to list the files in the directory
 			File[] files = file.listFiles();
-			// File.listFiles() returns null if the directory does not exist 
+			// File.listFiles() returns null if the directory does not exist
 			// (which is not the current case, because we check that it exists and is directory),
 			// or if an IO error occurred during the listing of the files, including if the
-			// access is denied 
+			// access is denied
 			if (files == null)
 				throw new FileNotFoundException(file.toString() + " (probably access denied)"); //$NON-NLS-1$
 		} else {
diff --git a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/util/TextProcessor.java b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/util/TextProcessor.java
index 69f2e91..f871c4c 100644
--- a/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/util/TextProcessor.java
+++ b/bundles/org.eclipse.osgi/container/src/org/eclipse/osgi/util/TextProcessor.java
@@ -1,13 +1,13 @@
 /*******************************************************************************
  * Copyright (c) 2006, 2012 IBM Corporation and others.
  *
- * This program and the accompanying materials 
+ * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
  * which accompanies this distribution, and is available at
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -27,7 +27,7 @@
  * its semantic meaning and conforms with the Unicode BiDi algorithm within each
  * segment.
  * </p>
- * 
+ *
  * @since 3.2
  * @noextend This class is not intended to be subclassed by clients.
  */
@@ -71,7 +71,7 @@
 	// whether or not processing is needed
 	private static boolean IS_PROCESSING_NEEDED = false;
 
-	// constant used to indicate an LRM need not precede a delimiter 
+	// constant used to indicate an LRM need not precede a delimiter
 	private static final int INDEX_NOT_SET = 999999999;
 
 	static {
@@ -91,7 +91,7 @@
 	 * substitution based on the locale. This is equivalent to calling
 	 * <code>process(String, String)</code> with the default set of
 	 * delimiters.
-	 * 
+	 *
 	 * @param text
 	 *            the text to be processed
 	 * @return the manipulated string
@@ -144,7 +144,7 @@
 	 * <code>String.length()</code> called on the resulting string will not
 	 * return the same values as would be returned for the original string.
 	 * </p>
-	 * 
+	 *
 	 * @param str
 	 *            the text to process, if <code>null</code> return the string
 	 *            as it was passed in
@@ -185,7 +185,7 @@
 			} else if (Character.isDigit(ch)) {
 				if (delimIndex != INDEX_NOT_SET) {
 					// consecutive neutral and weak directional characters
-					// explicitly force direction to be LRM					
+					// explicitly force direction to be LRM
 					target.insert(delimIndex, LRM);
 					delimIndex = INDEX_NOT_SET;
 					isLastRTL = false;
@@ -195,7 +195,7 @@
 					isStringBidi = true;
 					if (delimIndex != INDEX_NOT_SET) {
 						// neutral character followed by strong right directional character
-						// explicitly force direction to be LRM	
+						// explicitly force direction to be LRM
 						target.insert(delimIndex, LRM);
 						delimIndex = INDEX_NOT_SET;
 					}
@@ -211,10 +211,10 @@
 		/*
 		 * TextProcessor is not aware of the orientation of the component owning
 		 * the processed string. Enclose the string in LRE/PDF in either of 2
-		 * cases: 
+		 * cases:
 		 * (1) The string contains BiDi characters - implying that the
-		 * string appearance depends on the basic orientation 
-		 * (2) The runtime locale is BiDi AND either the string does not start with 
+		 * string appearance depends on the basic orientation
+		 * (2) The runtime locale is BiDi AND either the string does not start with
 		 * an LTR character or it ends with LTR char or digit.
 		 */
 		if (isStringBidi || !Character.isLetter(str.charAt(0)) || isNeutral(str.charAt(str.length() - 1))) {
@@ -226,12 +226,12 @@
 	}
 
 	/**
-	 * Removes directional marker characters in the given string that were inserted by 
+	 * Removes directional marker characters in the given string that were inserted by
 	 * utilizing the <code>process(String)</code> or <code>process(String, String)</code>
 	 * methods.
-	 * 
+	 *
 	 * @param str string with directional markers to remove
-	 * @return string with no directional markers 
+	 * @return string with no directional markers
 	 * @see #process(String)
 	 * @see #process(String, String)
 	 * @since 3.3
@@ -261,7 +261,7 @@
 	/**
 	 * Return the string containing all the default delimiter characters to be
 	 * used to segment a given string.
-	 * 
+	 *
 	 * @return delimiter string
 	 */
 	public static String getDefaultDelimiters() {
@@ -275,11 +275,11 @@
 		/*
 		 * Cannot use Character.getDirectionality() since the OSGi library can
 		 * be compiled with execution environments that pre-date that API.
-		 * 
+		 *
 		 * The first range of characters is Unicode Hebrew and Arabic
 		 * characters. The second range of characters is Unicode Hebrew and
 		 * Arabic presentation forms.
-		 * 
+		 *
 		 * NOTE: Farsi and Urdu fall within the Arabic scripts.
 		 */
 		return (((c >= 0x05d0) && (c <= 0x07b1)) || ((c >= 0xfb1d) && (c <= 0xfefc)));
diff --git a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/equinox/log/ExtendedLogEntry.java b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/equinox/log/ExtendedLogEntry.java
index b87daeb..5c9501f 100644
--- a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/equinox/log/ExtendedLogEntry.java
+++ b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/equinox/log/ExtendedLogEntry.java
@@ -16,7 +16,7 @@
 /**
  * Extends the OSGi Log Services <code>LogEntry</code> object to provide additional context information.
  * Otherwise similarly accessible by registering a <code>LogListener</code> object.
- * 
+ *
  * @ThreadSafe
  * @see LogListener
  * @since 3.7
@@ -26,7 +26,7 @@
 	/**
 	 * Returns the logger name associated with this <code>LogEntry</code>
 	 * object.
-	 * 
+	 *
 	 * @return <code>String</code> containing the logger name associated with this
 	 *         <code>LogEntry</code> object;<code>null</code> if no logger name is
 	 *         associated with this <code>LogEntry</code> object.
@@ -37,7 +37,7 @@
 	/**
 	 * Returns the context associated with this <code>LogEntry</code>
 	 * object.
-	 * 
+	 *
 	 * @return <code>Object</code> containing the context associated with this
 	 *         <code>LogEntry</code> object;<code>null</code> if no context is
 	 *         associated with this <code>LogEntry</code> object.
@@ -47,7 +47,7 @@
 	/**
 	 * Returns the thread id of the logging thread associated with this <code>LogEntry</code>
 	 * object.
-	 * 
+	 *
 	 * @return <code>long</code> containing the thread id associated with this
 	 *         <code>LogEntry</code> object.
 	 */
@@ -56,7 +56,7 @@
 	/**
 	 * Returns the thread name of the logging thread associated with this <code>LogEntry</code>
 	 * object.
-	 * 
+	 *
 	 * @return <code>String</code> containing the message associated with this
 	 *         <code>LogEntry</code> object.
 	 */
@@ -64,8 +64,8 @@
 
 	/**
 	 * Returns the log sequence number associated with this <code>LogEntry</code>
-	 * object. 
-	 * 
+	 * object.
+	 *
 	 * @return <code>long</code> containing the sequence number associated with this
 	 *         <code>LogEntry</code> object.
 	 */
diff --git a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/equinox/log/ExtendedLogReaderService.java b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/equinox/log/ExtendedLogReaderService.java
index 2cdf638..909c278 100644
--- a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/equinox/log/ExtendedLogReaderService.java
+++ b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/equinox/log/ExtendedLogReaderService.java
@@ -21,13 +21,13 @@
 public interface ExtendedLogReaderService extends LogReaderService {
 	/**
 	 * Subscribes to <code>LogEntry</code> objects.
-	 * 
+	 *
 	 * <p>
 	 * This method registers a <code>LogListener</code> object with the Log Reader
 	 * Service with a <code>LogFilter</code> to allow pre-filtering of interesting log entries.
 	 * The <code>LogListener.logged(LogEntry)</code> method will be
 	 * called for each <code>LogEntry</code> object placed into the log that matches the filter.
-	 * 
+	 *
 	 * @param listener A <code>LogListener</code> object to register; the
 	 *        <code>LogListener</code> object is used to receive <code>LogEntry</code>
 	 *        objects.
diff --git a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/equinox/log/ExtendedLogService.java b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/equinox/log/ExtendedLogService.java
index 698088f..8f463ec 100644
--- a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/equinox/log/ExtendedLogService.java
+++ b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/equinox/log/ExtendedLogService.java
@@ -25,9 +25,9 @@
 
 	/**
 	 * Returns the <code>Logger<code> object associated with this logger name for the bundle that retrieved this log service.
-	 * If loggerName is null the default <code>Logger</code> for this bundle is returned. 
-	 * 
-	 * @param loggerName The logger name. 
+	 * If loggerName is null the default <code>Logger</code> for this bundle is returned.
+	 *
+	 * @param loggerName The logger name.
 	 * @return <code>Logger</code> associated with the logger name.
 	 */
 	@Override
@@ -35,8 +35,8 @@
 
 	/**
 	 * Returns the logger associated with this logger name and bundle.
-	 * 
-	 * @param loggerName The logger name. 
+	 *
+	 * @param loggerName The logger name.
 	 * @param bundle The bundles associated with this logger. If null the bundle that retrieved this log service is used.
 	 * @return <code>Logger</code> associated with the logger name.
 	* @throws SecurityException if the caller does not have <code>LogPermission[*,LOG]</code>.
diff --git a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/equinox/log/LogPermission.java b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/equinox/log/LogPermission.java
index 70ce208..6c4dd3d 100644
--- a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/equinox/log/LogPermission.java
+++ b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/equinox/log/LogPermission.java
@@ -15,9 +15,9 @@
 
 /**
  * Indicates a bundle's authority to log on behalf of other bundles.
- * 
+ *
  * This permission has only a single action: LOG.
- * 
+ *
  * @ThreadSafe
  * @since 3.7
  */
@@ -32,7 +32,7 @@
 
 	/**
 	 * Create a new LogPermission.
-	 * 
+	 *
 	 * @param name Name must be &quot;*&quot;.
 	 * @param actions <code>log</code> or &quot;*&quot;.
 	 */
diff --git a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/equinox/log/Logger.java b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/equinox/log/Logger.java
index e03633f..b1caf3b 100644
--- a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/equinox/log/Logger.java
+++ b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/equinox/log/Logger.java
@@ -44,7 +44,7 @@
 	/**
 	 * Extends the <code>LogService</code>
 	 * Logs a message with a context object
-	 * 
+	 *
 	 * @param context The context object this message is associated with.
 	 * @param level The log level or severity of the message.
 	 * @param message A human readable string to associate with log entry.
@@ -55,8 +55,8 @@
 	/**
 	 * Logs a message with an exception associated and a
 	 * context object.
-	 * 
-	 * 
+	 *
+	 *
 	 * @param context The context object this message is associated with.
 	 * @param level The log level or severity of the message.
 	 * @param message A human readable string to associate with log entry.
@@ -66,10 +66,10 @@
 	public void log(Object context, int level, String message, Throwable exception);
 
 	/**
-	 * Pre-checks if there are LogListeners who are listening for a matching log entry from this <code>Logger</code>. 
-	 * 
+	 * Pre-checks if there are LogListeners who are listening for a matching log entry from this <code>Logger</code>.
+	 *
 	 * @param level The log level or severity of the message.
-	 * @return <code>boolean</code> True if there a LogListener listening that can handle a log entry for this log level; false otherwise. 
+	 * @return <code>boolean</code> True if there a LogListener listening that can handle a log entry for this log level; false otherwise.
 	 * @see ExtendedLogReaderService#addLogListener(org.osgi.service.log.LogListener, LogFilter)
 	 * @see LogFilter
 	 */
@@ -78,7 +78,7 @@
 	/**
 	 * Returns the name associated with this <code>Logger</code>
 	 * object.
-	 * 
+	 *
 	 * @return <code>String</code> containing the name associated with this
 	 *         <code>Logger</code> object;<code>null</code> if no name is
 	 *         associated.
diff --git a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/console/CommandInterpreter.java b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/console/CommandInterpreter.java
index 844a17c..a4b711d 100644
--- a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/console/CommandInterpreter.java
+++ b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/console/CommandInterpreter.java
@@ -17,7 +17,7 @@
 import java.util.Dictionary;
 import org.osgi.framework.Bundle;
 
-/**	
+/**
  * A command interpreter is a shell that can interpret command
  * lines. This object is passed as parameter when a CommandProvider
  * is invoked.
diff --git a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/console/ConsoleSession.java b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/console/ConsoleSession.java
index cdfedce..cbfab74 100644
--- a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/console/ConsoleSession.java
+++ b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/console/ConsoleSession.java
@@ -20,13 +20,13 @@
 /**
  * A console session service provides the input and output to a single console session.
  * The input will be used by the console to read in console commands.  The output will
- * be used to print the results of console commands. 
+ * be used to print the results of console commands.
  * <p>
- * The console session must be registered as an OSGi service in order to be associated 
- * with a console instance. The console implementation will discover any console session 
- * services and will create a new console instance using the console session for input and 
- * output.  When a session is closed then the console session service will be unregistered 
- * and the console instance will terminate and be disposed of.  The console instance will 
+ * The console session must be registered as an OSGi service in order to be associated
+ * with a console instance. The console implementation will discover any console session
+ * services and will create a new console instance using the console session for input and
+ * output.  When a session is closed then the console session service will be unregistered
+ * and the console instance will terminate and be disposed of.  The console instance will
  * also terminate if the console session service is unregistered for any reason.
  * </p>
  * @since 3.6
@@ -48,7 +48,7 @@
 			try {
 				current.unregister();
 			} catch (IllegalStateException e) {
-				// This can happen if the service is in the process of being 
+				// This can happen if the service is in the process of being
 				// unregistered or if another thread unregistered the service.
 				// Ignoring the exception.
 			}
@@ -56,8 +56,8 @@
 	}
 
 	/**
-	 * Called by the {@link #close()} method to free resources associated 
-	 * with this console session.  For example, closing the streams 
+	 * Called by the {@link #close()} method to free resources associated
+	 * with this console session.  For example, closing the streams
 	 * associated with the input and output for this session.
 	 * @noreference This method is not intended to be referenced by clients.
 	 */
@@ -72,7 +72,7 @@
 	public abstract InputStream getInput();
 
 	/**
-	 * Returns the output for this console session.  This output will be 
+	 * Returns the output for this console session.  This output will be
 	 * used to write the results of console commands.
 	 * @return the output for this console session.
 	 * @noreference This method is not intended to be referenced by clients.
diff --git a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/eventmgr/CopyOnWriteIdentityMap.java b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/eventmgr/CopyOnWriteIdentityMap.java
index 4625925..321aaac 100644
--- a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/eventmgr/CopyOnWriteIdentityMap.java
+++ b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/eventmgr/CopyOnWriteIdentityMap.java
@@ -20,10 +20,10 @@
  * A copy-on-write identity map. Write operations result in copying the underlying data so that
  * simultaneous read operations are not affected.
  * This allows for safe, unsynchronized traversal.
- * 
+ *
  * <p>
  * Note: This class uses identity for key and value comparison, not equals.
- * 
+ *
  * @since 3.5
  */
 public class CopyOnWriteIdentityMap<K, V> implements Map<K, V> {
@@ -34,7 +34,7 @@
 	private static final Entry[] emptyArray = new Entry[0];
 
 	/**
-	 * The array of entries. This field is volatile so it can be 
+	 * The array of entries. This field is volatile so it can be
 	 * accessed from unsynchronized reader methods.
 	 */
 	private volatile Entry<K, V>[] entries;
@@ -106,7 +106,7 @@
 
 	/**
 	 * Add all the entries from the specified map to this map.
-	 * 
+	 *
 	 * @param source The map whose entries are to be added to this map.
 	 */
 	@Override
@@ -133,7 +133,7 @@
 	/**
 	 * Add all the keys from the specified array to this map with the value
 	 * <code>null</code>.
-	 * 
+	 *
 	 * @param keys The array of keys to be added to this map.
 	 */
 	public <L extends K> void putAll(L[] keys) {
@@ -151,7 +151,7 @@
 
 	/**
 	 * Add all the entries to this map.
-	 * 
+	 *
 	 * @param toCopy Array of entries to add to this map.
 	 */
 	private synchronized void putAll(Entry<? extends K, ? extends V>[] toCopy) {
@@ -187,7 +187,7 @@
 	 * Key objects are compared using identity.
 	 *
 	 * @param key The key object to be removed from the map.
-	 * @return <code>null</code> if the key was not in the list. 
+	 * @return <code>null</code> if the key was not in the list.
 	 * Otherwise, the value associated with the key.
 	 * @throws IllegalArgumentException If key is null.
 	 */
@@ -230,7 +230,7 @@
 
 	/**
 	 * Remove all entries from the map.
-	 * 
+	 *
 	 */
 	@Override
 	public synchronized void clear() {
@@ -259,7 +259,7 @@
 
 	/**
 	 * Is the map empty?
-	 * 
+	 *
 	 * @return <code>true</code> if the list is empty.
 	 */
 	@Override
@@ -269,7 +269,7 @@
 
 	/**
 	 * Return the number of entries in the map.
-	 * 
+	 *
 	 * @return The number of entries in the map.
 	 */
 	@Override
@@ -280,7 +280,7 @@
 	/**
 	 * Return the value object for the specified key.
 	 * Keys are compared using identity.
-	 * 
+	 *
 	 * @param key The key object.
 	 * @return The value object for the specified key.
 	 * @throws IllegalArgumentException If key is null.
@@ -302,7 +302,7 @@
 	/**
 	 * Check if the map contains the specified key.
 	 * Keys are compared using identity.
-	 * 
+	 *
 	 * @param key The key object.
 	 * @return <code>true</code> if the specified key is in the map.
 	 * @throws IllegalArgumentException If key is null.
@@ -324,7 +324,7 @@
 	/**
 	 * Check if the map contains the specified value.
 	 * Values are compared using identity.
-	 * 
+	 *
 	 * @param value The value object.
 	 * @return <code>true</code> if the specified value is in the map.
 	 */
@@ -341,7 +341,7 @@
 	/**
 	 * Returns a snapshot of the entries in this map.
 	 * Changes to the returned set or this map will not affect each other.
-	 * 
+	 *
 	 * @return A Set of Map.Entry for each entry in this map.
 	 * The entries returned by the set cannot be modified.
 	 */
@@ -353,7 +353,7 @@
 	/**
 	 * Returns a snapshot of the keys in this map.
 	 * Changes to the returned set or this map will not affect each other.
-	 * 
+	 *
 	 * @return A Set of the key objects in this map
 	 */
 	@Override
@@ -364,7 +364,7 @@
 	/**
 	 * Returns a snapshot of the values in this map.
 	 * Changes to the returned set or this map will not affect each other.
-	 * 
+	 *
 	 * @return A Collection of the value objects in this map.
 	 */
 	@Override
@@ -439,7 +439,7 @@
 
 	/**
 	 * A snapshot of the entries in the map. This snapshot used by
-	 * the map collection views. Changes made by the collection 
+	 * the map collection views. Changes made by the collection
 	 * views only mutate the snapshot and not the map. The collection
 	 * views only allow removal not addition.
 	 */
@@ -516,7 +516,7 @@
 			}
 		}
 
-		/** 
+		/**
 		 * Entry set iterator over the snapshot.
 		 */
 		private final class EntryIterator extends SnapshotIterator<Map.Entry<K, V>> {
@@ -572,7 +572,7 @@
 			}
 		}
 
-		/** 
+		/**
 		 * Key set iterator over the snapshot.
 		 */
 		private final class KeyIterator extends SnapshotIterator<K> {
@@ -628,7 +628,7 @@
 			}
 		}
 
-		/** 
+		/**
 		 * Value collection iterator over the snapshot.
 		 */
 		private final class ValueIterator extends SnapshotIterator<V> {
@@ -642,7 +642,7 @@
 			}
 		}
 
-		/** 
+		/**
 		 * Base iterator class handling removal and concurrent modifications.
 		 */
 		private abstract class SnapshotIterator<E> implements Iterator<E> {
diff --git a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/eventmgr/EventDispatcher.java b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/eventmgr/EventDispatcher.java
index 4d802f2..da51c2b 100644
--- a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/eventmgr/EventDispatcher.java
+++ b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/eventmgr/EventDispatcher.java
@@ -27,7 +27,7 @@
 	 * This method is called once for each listener.
 	 * This method must cast the event listener object to the appropriate listener
 	 * class for the event type and call the appropriate listener method.
-	 * 
+	 *
 	 * <p>The method should properly log/handle any exceptions thrown by the called
 	 * listener. The EventManager will ignore any Throwable thrown by this method
 	 * in order to continue delivery of the event to the next listener.
diff --git a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/eventmgr/EventListeners.java b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/eventmgr/EventListeners.java
index e99af15..9779cd9 100644
--- a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/eventmgr/EventListeners.java
+++ b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/eventmgr/EventListeners.java
@@ -18,12 +18,12 @@
 import java.util.Set;
 
 /**
- * This class manages a list of listeners. 
- * 
+ * This class manages a list of listeners.
+ *
  * Listeners may be added or removed as necessary.
- * 
+ *
  * This class uses identity for comparison, not equals.
- * 
+ *
  * @since 3.1
  * @deprecated As of 3.5. Replaced by CopyOnWriteIdentityMap.
  * @noextend This class is not intended to be subclassed by clients.
@@ -76,7 +76,7 @@
 
 	/**
 	 * Remove all listeners from the list.
-	 * 
+	 *
 	 * This method calls the clear method.
 	 */
 	public void removeAllListeners() {
diff --git a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/eventmgr/EventManager.java b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/eventmgr/EventManager.java
index e35f244..32e1067 100644
--- a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/eventmgr/EventManager.java
+++ b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/eventmgr/EventManager.java
@@ -26,8 +26,8 @@
  * ListenerQueue for dispatching events. CopyOnWriteIdentityMap objects
  * must be used to manage listener lists.
  *
- * <p>This example uses the fictitious SomeEvent class and shows how to use this package 
- * to deliver a SomeEvent to a set of SomeEventListeners.  
+ * <p>This example uses the fictitious SomeEvent class and shows how to use this package
+ * to deliver a SomeEvent to a set of SomeEventListeners.
  * <pre>
  *
  * 	// Create an EventManager with a name for an asynchronous event dispatch thread
@@ -43,7 +43,7 @@
  *	ListenerQueue listenerQueue = new ListenerQueue(eventManager);
  *	// Add the listeners to the queue and associate them with the event dispatcher
  *	listenerQueue.queueListeners(eventListeners.entrySet(), new EventDispatcher() {
- *		public void dispatchEvent(Object eventListener, Object listenerObject, 
+ *		public void dispatchEvent(Object eventListener, Object listenerObject,
  *                                    int eventAction, Object eventObject) {
  * 			try {
  *				(SomeEventListener)eventListener.someEventOccured((SomeEvent)eventObject);
@@ -52,51 +52,51 @@
  * 			}
  *		}
  *	});
- *	// Deliver the event to the listeners. 
+ *	// Deliver the event to the listeners.
  *	listenerQueue.dispatchEventAsynchronous(0, new SomeEvent());
- *		
+ *
  *	// Remove the listener from the listener list
  *	eventListeners.remove(someEventListener);
  *
  *	// Close EventManager to clean when done to terminate async event dispatch thread.
- *	// Note that closing the event manager while asynchronously delivering events 
- *	// may cause some events to not be delivered before the async event dispatch 
+ *	// Note that closing the event manager while asynchronously delivering events
+ *	// may cause some events to not be delivered before the async event dispatch
  *	// thread terminates
  *	eventManager.close();
  * </pre>
- * 
+ *
  * <p>At first glance, this package may seem more complicated than necessary
  * but it has support for some important features. The listener list supports
  * companion objects for each listener object. This is used by the OSGi framework
  * to create wrapper objects for a listener which are passed to the event dispatcher.
  * The ListenerQueue class is used to build a snap shot of the listeners prior to beginning
- * event dispatch. 
- * 
- * The OSGi framework uses a 2 level listener list for each listener type (4 types). 
- * Level one is managed per framework instance and contains the list of BundleContexts which have 
- * registered a listener. Level 2 is managed per BundleContext for the listeners in that 
- * context. This allows all the listeners of a bundle to be easily and atomically removed from 
- * the level one list. To use a "flat" list for all bundles would require the list to know which 
- * bundle registered a listener object so that the list could be traversed when stopping a bundle 
- * to remove all the bundle's listeners. 
- * 
- * When an event is fired, a snapshot list (ListenerQueue) must be made of the current listeners before delivery 
- * is attempted. The snapshot list is necessary to allow the listener list to be modified while the 
+ * event dispatch.
+ *
+ * The OSGi framework uses a 2 level listener list for each listener type (4 types).
+ * Level one is managed per framework instance and contains the list of BundleContexts which have
+ * registered a listener. Level 2 is managed per BundleContext for the listeners in that
+ * context. This allows all the listeners of a bundle to be easily and atomically removed from
+ * the level one list. To use a "flat" list for all bundles would require the list to know which
+ * bundle registered a listener object so that the list could be traversed when stopping a bundle
+ * to remove all the bundle's listeners.
+ *
+ * When an event is fired, a snapshot list (ListenerQueue) must be made of the current listeners before delivery
+ * is attempted. The snapshot list is necessary to allow the listener list to be modified while the
  * event is being delivered to the snapshot list. The memory cost of the snapshot list is
- * low since the ListenerQueue object uses the copy-on-write semantics 
+ * low since the ListenerQueue object uses the copy-on-write semantics
  * of the CopyOnWriteIdentityMap. This guarantees the snapshot list is never modified once created.
- * 
+ *
  * The OSGi framework also uses a 2 level dispatch technique (EventDispatcher).
- * Level one dispatch is used by the framework to add the level 2 listener list of each 
+ * Level one dispatch is used by the framework to add the level 2 listener list of each
  * BundleContext to the snapshot in preparation for delivery of the event.
- * Level 2 dispatch is used as the final event deliverer and must cast the listener 
+ * Level 2 dispatch is used as the final event deliverer and must cast the listener
  * and event objects to the proper type before calling the listener. Level 2 dispatch
- * will cancel delivery of an event 
+ * will cancel delivery of an event
  * to a bundle that has stopped between the time the snapshot was created and the
  * attempt was made to deliver the event.
- * 
- * <p> The highly dynamic nature of the OSGi framework had necessitated these features for 
- * proper and efficient event delivery.  
+ *
+ * <p> The highly dynamic nature of the OSGi framework had necessitated these features for
+ * proper and efficient event delivery.
  * @since 3.1
  * @noextend This class is not intended to be subclassed by clients.
  */
@@ -110,9 +110,9 @@
 	 */
 	private EventThread<?, ?, ?> thread;
 
-	/** 
-	 * Once closed, an attempt to create a new EventThread will result in an 
-	 * IllegalStateException. 
+	/**
+	 * Once closed, an attempt to create a new EventThread will result in an
+	 * IllegalStateException.
 	 */
 	private boolean closed;
 
@@ -167,8 +167,8 @@
 	 * This method can be called to release any resources associated with this
 	 * EventManager.
 	 * <p>
-	 * Closing this EventManager while it is asynchronously delivering events 
-	 * may cause some events to not be delivered before the async event dispatch 
+	 * Closing this EventManager while it is asynchronously delivering events
+	 * may cause some events to not be delivered before the async event dispatch
 	 * thread terminates.
 	 */
 	public synchronized void close() {
@@ -291,8 +291,8 @@
 		private volatile boolean running;
 
 		/**
-		 * Constructor for the event thread. 
-		 * @param threadName Name of the EventThread 
+		 * Constructor for the event thread.
+		 * @param threadName Name of the EventThread
 		 */
 		EventThread(ThreadGroup threadGroup, String threadName) {
 			super(threadGroup, threadName == null ? getNextName() : threadName);
@@ -308,8 +308,8 @@
 		}
 
 		/**
-		 * Constructor for the event thread. 
-		 * @param threadName Name of the EventThread 
+		 * Constructor for the event thread.
+		 * @param threadName Name of the EventThread
 		 */
 		EventThread(String threadName) {
 			this(null, threadName);
@@ -344,7 +344,7 @@
 					}
 					EventManager.dispatchEvent(item.listeners, item.dispatcher, item.action, item.object);
 					// Bug 299589: since the call to getNextEvent() will eventually block for a long time, we need to make sure that the 'item'
-					// variable is cleared of the previous value before the call to getNextEvent(). See VM SPec 2.5.7 for why the compiler 
+					// variable is cleared of the previous value before the call to getNextEvent(). See VM SPec 2.5.7 for why the compiler
 					// will not automatically clear this variable for each loop iteration.
 					item = null;
 				}
diff --git a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/eventmgr/ListenerQueue.java b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/eventmgr/ListenerQueue.java
index 37a0f18..69973aa 100644
--- a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/eventmgr/ListenerQueue.java
+++ b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/eventmgr/ListenerQueue.java
@@ -32,8 +32,8 @@
  * can then be synchronously or asynchronously delivered to the list of
  * listeners. After the event has been dispatched for delivery, the
  * ListenerQueue object should be discarded as it is likely the list of listeners is stale.
- * A new ListenerQueue object should be created when it is time to deliver 
- * another event. The Sets used to build the list of listeners must not change after being 
+ * A new ListenerQueue object should be created when it is time to deliver
+ * another event. The Sets used to build the list of listeners must not change after being
  * added to the list.
  * @since 3.1
  */
@@ -48,7 +48,7 @@
 	private final Map<Set<Map.Entry<K, V>>, EventDispatcher<K, V, E>> queue;
 
 	/**
-	 * Once the listener queue has been used to dispatch an event, 
+	 * Once the listener queue has been used to dispatch an event,
 	 * you cannot add modify the queue.
 	 * Access to this field must be protected by a synchronized region.
 	 */
diff --git a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/internal/reliablefile/ReliableFile.java b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/internal/reliablefile/ReliableFile.java
index ca2b716..7cd5271 100644
--- a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/internal/reliablefile/ReliableFile.java
+++ b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/internal/reliablefile/ReliableFile.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -27,17 +27,17 @@
  */
 public class ReliableFile {
 	/**
-	 * Open mask. Obtain the best data stream available. If the primary data 
-	 * contents are invalid (corrupt, missing, etc.), the data for a prior 
-	 * version may be used. 
+	 * Open mask. Obtain the best data stream available. If the primary data
+	 * contents are invalid (corrupt, missing, etc.), the data for a prior
+	 * version may be used.
 	 * An IOException will be thrown if a valid data content can not be
-	 * determined. 
+	 * determined.
 	 * This is mutually exclusive with <code>OPEN_FAIL_ON_PRIMARY</code>.
 	 */
 	public static final int OPEN_BEST_AVAILABLE = 0;
 	/**
-	 * Open mask. Obtain only the data stream for the primary file where any other 
-	 * version will not be valid. This should be used for data streams that are 
+	 * Open mask. Obtain only the data stream for the primary file where any other
+	 * version will not be valid. This should be used for data streams that are
 	 * managed as a group as a prior contents may not match the other group data.
 	 * If the primary data is not invalid, a IOException will be thrown.
 	 * This is mutually exclusive with <code>OPEN_BEST_AVAILABLE</code>.
@@ -62,14 +62,14 @@
 
 	/**
 	 * Property to set the maximum size of a file that will be buffered. When calculating a ReliableFile
-	 * checksum, if the file is this size or small, ReliableFile will read the file contents into a 
+	 * checksum, if the file is this size or small, ReliableFile will read the file contents into a
 	 * <code>BufferedInputStream</code> and reset the buffer to avoid having to read the data from the
 	 * media twice. Since this method require memory for storage, it is limited to this size. The default
 	 * maximum is 128-KBytes.
 	 */
 	public static final String PROP_MAX_BUFFER = "osgi.reliableFile.maxInputStreamBuffer"; //$NON-NLS-1$
 	/**
-	 * The maximum number of generations to keep as backup files in case last generation 
+	 * The maximum number of generations to keep as backup files in case last generation
 	 * file is determined to be invalid.
 	 */
 	public static final String PROP_MAX_GENERATIONS = "osgi.ReliableFile.maxGenerations"; //$NON-NLS-1$
@@ -231,7 +231,7 @@
 	 * Returns an InputStream object for reading the target file.
 	 *
 	 * @param generation the maximum generation to evaluate
-	 * @param openMask mask used to open data. 
+	 * @param openMask mask used to open data.
 	 * are invalid (corrupt, missing, etc).
 	 * @return An InputStream object which can be used to read the target file.
 	 * @throws IOException If an error occurs preparing the file.
@@ -340,7 +340,7 @@
 
 	/**
 	 * Returns an OutputStream object for writing the target file.
-	 * 
+	 *
 	 * @param append append new data to an existing file.
 	 * @param appendGeneration specific generation of file to append from.
 	 * @return An OutputStream object which can be used to write the target file.
@@ -445,7 +445,7 @@
 		String name = referenceFile.getName();
 		File parent = new File(referenceFile.getParent());
 		int generationCount = generations.length;
-		// if a base file is in the list (0 in generations[]), we will 
+		// if a base file is in the list (0 in generations[]), we will
 		//  never delete these files, so don't count them in the old
 		//  generation count.
 		if (generations[generationCount - 1] == 0)
@@ -529,7 +529,7 @@
 
 	/**
 	 * Answers a boolean indicating whether or not the specified reliable file
-	 * exists on the underlying file system. This call only returns if a file 
+	 * exists on the underlying file system. This call only returns if a file
 	 * exists and not if the file contents are valid.
 	 * @param file returns true if the specified reliable file exists; otherwise false is returned
 	 *
@@ -556,7 +556,7 @@
 	}
 
 	/**
-	 * Returns the time that the reliable file was last modified. Only the time 
+	 * Returns the time that the reliable file was last modified. Only the time
 	 * of the last file generation is returned.
 	 * @param file the file to determine the time of.
 	 * @return time the file was last modified (see java.io.File.lastModified()).
@@ -590,7 +590,7 @@
 	/**
 	 * Returns the a version number of a reliable managed file. The version can be expected
 	 * to be unique for each successful file update.
-	 * 
+	 *
 	 * @param file the file to determine the version of.
 	 * @return a unique version of this current file. A value of -1 indicates the file does
 	 * not exist or an error occurred.
@@ -634,7 +634,7 @@
 	 * Get a list of ReliableFile base names in a given directory. Only files with a valid
 	 * ReliableFile generation are included.
 	 * @param directory the directory to inquire.
-	 * @return an array of ReliableFile names in the directory. 
+	 * @return an array of ReliableFile names in the directory.
 	 * @throws IOException if an error occurs.
 	 */
 	public static String[] getBaseFiles(File directory) throws IOException {
@@ -682,7 +682,7 @@
 	}
 
 	/**
-	 * Inform ReliableFile that a file has been updated outside of 
+	 * Inform ReliableFile that a file has been updated outside of
 	 * ReliableFile.
 	 * @param file
 	 */
@@ -710,10 +710,10 @@
 
 	/**
 	 * Returns the size of the ReliableFile signature + CRC at the end of the file.
-	 * This method should be called only after calling getInputStream() or 
+	 * This method should be called only after calling getInputStream() or
 	 * getOutputStream() methods.
 	 *
-	 * @return <code>int</code> size of the ReliableFIle signature + CRC appended 
+	 * @return <code>int</code> size of the ReliableFIle signature + CRC appended
 	 * to the end of the file.
 	 * @throws IOException if getInputStream() or getOutputStream has not been
 	 * called.
@@ -745,11 +745,11 @@
 	}
 
 	/**
-	 * Returns a Checksum object for the current file contents. This method 
-	 * should be called only after calling getInputStream() or 
+	 * Returns a Checksum object for the current file contents. This method
+	 * should be called only after calling getInputStream() or
 	 * getOutputStream() methods.
 	 *
-	 * @return Object implementing Checksum interface initialized to the 
+	 * @return Object implementing Checksum interface initialized to the
 	 * current file contents.
 	 * @throws IOException if getOutputStream for append has not been called.
 	 */
diff --git a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/internal/reliablefile/ReliableFileInputStream.java b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/internal/reliablefile/ReliableFileInputStream.java
index 2c514dc..089f0e6 100644
--- a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/internal/reliablefile/ReliableFileInputStream.java
+++ b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/internal/reliablefile/ReliableFileInputStream.java
@@ -30,17 +30,17 @@
 	 */
 	private ReliableFile reliable;
 
-	/** 
+	/**
 	 * size of crc and signature
 	 */
 	private int sigSize;
 
-	/** 
+	/**
 	 * current position reading from file
 	 */
 	private long readPos;
 
-	/** 
+	/**
 	 * total file length available for reading
 	 */
 	private long length;
@@ -72,7 +72,7 @@
 	/**
 	 * Constructs a new ReliableFileInputStream on the File <code>file</code>.  If the
 	 * file does not exist, the <code>FileNotFoundException</code> is thrown.
-	 * 
+	 *
 	 * @param file the File on which to stream reads.
 	 * @param generation a specific generation requested.
 	 * @param openMask mask used to open data.
@@ -84,10 +84,10 @@
 	}
 
 	/**
-	 * 
+	 *
 	 * @param reliable The ReliableFile on which to read.
 	 * @param generation a specific generation requested.
-	 * @param openMask mask used to open data. 
+	 * @param openMask mask used to open data.
 	 * are invalid (corrupt, missing, etc).
 	 * @throws IOException If an error occurs opening the file.
 	 */
@@ -170,7 +170,7 @@
 
 	/**
 	 * Override default available method.
-	 * @throws IOException 
+	 * @throws IOException
 	 * @see FilterInputStream#available()
 	 */
 	@Override
diff --git a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/log/FrameworkLog.java b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/log/FrameworkLog.java
index c098589..eb1ff48 100644
--- a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/log/FrameworkLog.java
+++ b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/log/FrameworkLog.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -19,18 +19,18 @@
 /**
  * The FramworkLog interface.  A FrameworkLog implementation is provided by the
  * FrameworkAdaptor and used by the Framework to log any error messages and
- * FrameworkEvents of type ERROR.  The FrameworkLog may persist the log messages 
+ * FrameworkEvents of type ERROR.  The FrameworkLog may persist the log messages
  * to the filesystem or allow other ways of accessing the log information.
  * @since 3.1
  * @noimplement This interface is not intended to be implemented by clients.
  */
 public interface FrameworkLog {
 	/**
-	 * A service lookup constant (value "performance") indicating an 
-	 * implementation of the logging service that logs performance events. 
-	 * Create a filter with this property set to <code>"true"</code> in order to 
+	 * A service lookup constant (value "performance") indicating an
+	 * implementation of the logging service that logs performance events.
+	 * Create a filter with this property set to <code>"true"</code> in order to
 	 * obtain a performance log.
-	 * 
+	 *
 	 * @since 3.1
 	 */
 	public static final String SERVICE_PERFORMANCE = "performance"; //$NON-NLS-1$
@@ -50,28 +50,28 @@
 	/**
 	 * Sets the current Writer used to log messages to the specified
 	 * newWriter.  If append is set to true then the content
-	 * of the current Writer will be appended to the new Writer 
+	 * of the current Writer will be appended to the new Writer
 	 * if possible.
-	 * @param newWriter The Writer to use for logging messages. 
+	 * @param newWriter The Writer to use for logging messages.
 	 * @param append Indicates whether the content of the current Writer
-	 * used for logging messages should be appended to the end of the new 
+	 * used for logging messages should be appended to the end of the new
 	 * Writer.
 	 */
 	public void setWriter(Writer newWriter, boolean append);
 
-	/** 
+	/**
 	 * Sets the current File used to log messages to a FileWriter
-	 * using the specified File.  If append is set to true then the 
-	 * content of the current Writer will be appended to the 
+	 * using the specified File.  If append is set to true then the
+	 * content of the current Writer will be appended to the
 	 * new File if possible.
 	 * @param newFile The File to create a new FileWriter which will be
 	 * used for logging messages.
 	 * @param append Indicates whether the content of the current Writer
-	 * used for logging messages should be appended to the end of the new 
+	 * used for logging messages should be appended to the end of the new
 	 * File.
 	 * @throws IOException if any problem occurs while constructing a
-	 * FileWriter from the newFile.  If this exception is thrown the 
-	 * FrameworkLog will not be affected and will continue to use the 
+	 * FileWriter from the newFile.  If this exception is thrown the
+	 * FrameworkLog will not be affected and will continue to use the
 	 * current Writer to log messages.
 	 */
 	public void setFile(File newFile, boolean append) throws IOException;
diff --git a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/log/FrameworkLogEntry.java b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/log/FrameworkLogEntry.java
index be7dab9..1a1dcb5 100644
--- a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/log/FrameworkLogEntry.java
+++ b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/framework/log/FrameworkLogEntry.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -27,21 +27,21 @@
 	 */
 	public static final int OK = 0;
 
-	/** 
+	/**
 	 * Severity constant (bit mask, value 1) indicating this log entry is informational only.
 	 * @see #getSeverity()
 	 * @since 3.2
 	 */
 	public static final int INFO = 0x01;
 
-	/** 
+	/**
 	 * Severity constant (bit mask, value 2) indicating this log entry represents a warning.
 	 * @see #getSeverity()
 	 * @since 3.2
 	 */
 	public static final int WARNING = 0x02;
 
-	/** 
+	/**
 	 * Severity constant (bit mask, value 4) indicating this log entry represents an error.
 	 * @see #getSeverity()
 	 * @since 3.2
@@ -57,7 +57,7 @@
 
 	// It would be nice to rename some of these fields but we cannot change the getter method
 	// names without breaking clients.  Changing only the field names would be confusing.
-	//TODO "entry" has another meaning here - title, summary, tag are better names 
+	//TODO "entry" has another meaning here - title, summary, tag are better names
 	private final String entry;
 	private final String message;
 	//TODO get rid of this
@@ -120,7 +120,7 @@
 	}
 
 	/**
-	 * 
+	 *
 	 * @return Returns the children.
 	 */
 	public FrameworkLogEntry[] getChildren() {
@@ -170,7 +170,7 @@
 	 * no children.
 	 * </p>
 	 *
-	 * @return the severity: one of <code>OK</code>, <code>ERROR</code>, 
+	 * @return the severity: one of <code>OK</code>, <code>ERROR</code>,
 	 * <code>INFO</code>, <code>WARNING</code>,  or <code>CANCEL</code>
 	 * @since 3.2
 	 */
@@ -191,7 +191,7 @@
 	/**
 	 * Returns the context associated with this <code>FrameworkLogEntry</code>
 	 * object.
-	 * 
+	 *
 	 * @return <code>Object</code> containing the context associated with this
 	 *         <code>FrameworkLogEntry</code> object;<code>null</code> if no context is
 	 *         associated with this <code>FrameworkLogEntry</code> object.
diff --git a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/internal/location/LocationHelper.java b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/internal/location/LocationHelper.java
index 19237ed..eaf93e2 100644
--- a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/internal/location/LocationHelper.java
+++ b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/internal/location/LocationHelper.java
@@ -1,13 +1,13 @@
 /*******************************************************************************
  * Copyright (c) 2006, 2016 IBM Corporation and others.
  *
- * This program and the accompanying materials 
+ * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
  * which accompanies this distribution, and is available at
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -129,7 +129,7 @@
 	}
 
 	public static String decode(String urlString, boolean plusEncoded) {
-		//first encode '+' characters, because URLDecoder incorrectly converts 
+		//first encode '+' characters, because URLDecoder incorrectly converts
 		//them to spaces on certain class library implementations.
 		if (plusEncoded && urlString.indexOf('+') >= 0) {
 			int len = urlString.length();
diff --git a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/internal/location/Locker.java b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/internal/location/Locker.java
index 217ad8c..7a64386 100644
--- a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/internal/location/Locker.java
+++ b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/internal/location/Locker.java
@@ -27,7 +27,7 @@
 
 	static class MockLocker implements Locker {
 		/**
-		 * @throws IOException  
+		 * @throws IOException
 		 */
 		@Override
 		public boolean lock() throws IOException {
diff --git a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/internal/messages/Msg.java b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/internal/messages/Msg.java
index e145233..5434a0e 100644
--- a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/internal/messages/Msg.java
+++ b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/internal/messages/Msg.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/internal/util/SupplementDebug.java b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/internal/util/SupplementDebug.java
index 2e22d58..8583e4b 100644
--- a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/internal/util/SupplementDebug.java
+++ b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/internal/util/SupplementDebug.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM - Initial API and implementation
  *******************************************************************************/
diff --git a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/report/resolution/ResolutionReport.java b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/report/resolution/ResolutionReport.java
index bc731a1..df608ae 100644
--- a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/report/resolution/ResolutionReport.java
+++ b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/report/resolution/ResolutionReport.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -52,7 +52,7 @@
 					targetTriggers.add(revision);
 				}
 			}
-			
+
 		}
 
 		class DiagResolverHook implements ResolverHook, ResolutionReport.Listener {
@@ -70,7 +70,7 @@
 					Collection<BundleCapability> candidates) { }
 
 			public void end() { }
-			
+
 		}
 		public ResolverHook begin(Collection<BundleRevision> triggers) {
 			if (triggers.containsAll(targetTriggers)) {
@@ -85,7 +85,7 @@
 			return report;
 		}
 	}
- * </pre> 
+ * </pre>
  * @since 3.10
  */
 public interface ResolutionReport {
@@ -131,10 +131,10 @@
 		// TODO Can this make use of generics? Or should this be Map<String, Object>
 		// and each enum would define the key constants?
 		/**
-		 * Returns the data associated with this resolution report entry.  The 
+		 * Returns the data associated with this resolution report entry.  The
 		 * structure of the data is determined by the <code>Type</code>
 		 * of the entry and may by <code>null</code>.
-		 * 
+		 *
 		 * @return the data associated with this resolution report entry.
 		 * @see Type
 		 */
@@ -159,7 +159,7 @@
 
 	/**
 	 * Returns all resolution report entries associated with this report.
-	 * The key is the unresolved resource and the value is a list of 
+	 * The key is the unresolved resource and the value is a list of
 	 * report entries that caused the associated resource  to not be able to resolve.
 	 * @return all resolution report entries associated with this report.
 	 */
@@ -168,10 +168,10 @@
 	/**
 	 * Returns the resolution exception associated with the resolve process
 	 * or {@code null} if there is no resolution exception.  For some resolve
-	 * operations a resolution exception may not be thrown even if the 
+	 * operations a resolution exception may not be thrown even if the
 	 * resolve process could not resolve some resources.  For example, if
 	 * the resources are optional resources to resolve.
-	 * @return the resolution exception or {@code null} if there is 
+	 * @return the resolution exception or {@code null} if there is
 	 * no resolution exception.
 	 */
 	ResolutionException getResolutionException();
diff --git a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/service/datalocation/Location.java b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/service/datalocation/Location.java
index 2bddc4f..8ca4cb0 100644
--- a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/service/datalocation/Location.java
+++ b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/service/datalocation/Location.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -17,12 +17,12 @@
 import java.net.URL;
 
 /**
- * A Location represents a URL which may have a default value, may be read only, may 
+ * A Location represents a URL which may have a default value, may be read only, may
  * or may not have a current value and may be cascaded on to a parent location.
  * <p>
  * This interface is not intended to be implemented by clients.
  * </p>
- * 
+ *
  * @since 3.0
  * @noimplement This interface is not intended to be implemented by clients.
  */
@@ -31,7 +31,7 @@
 	/**
 	 * Constant which defines the filter string for acquiring the service which
 	 * specifies the instance location.
-	 * 
+	 *
 	 * @since 3.2
 	 */
 	public static final String INSTANCE_FILTER = "(&(objectClass=" + Location.class.getName() + ")(type=osgi.instance.area))"; //$NON-NLS-1$ //$NON-NLS-2$
@@ -39,7 +39,7 @@
 	/**
 	 * Constant which defines the filter string for acquiring the service which
 	 * specifies the install location.
-	 * 
+	 *
 	 * @since 3.2
 	 */
 	public static final String INSTALL_FILTER = "(&(objectClass=" + Location.class.getName() + ")(type=osgi.install.area))"; //$NON-NLS-1$ //$NON-NLS-2$
@@ -47,7 +47,7 @@
 	/**
 	 * Constant which defines the filter string for acquiring the service which
 	 * specifies the configuration location.
-	 * 
+	 *
 	 * @since 3.2
 	 */
 	public static final String CONFIGURATION_FILTER = "(&(objectClass=" + Location.class.getName() + ")(type=osgi.configuration.area))"; //$NON-NLS-1$ //$NON-NLS-2$
@@ -55,7 +55,7 @@
 	/**
 	 * Constant which defines the filter string for acquiring the service which
 	 * specifies the user location.
-	 * 
+	 *
 	 * @since 3.2
 	 */
 	public static final String USER_FILTER = "(&(objectClass=" + Location.class.getName() + ")(type=osgi.user.area))"; //$NON-NLS-1$ //$NON-NLS-2$
@@ -63,7 +63,7 @@
 	/**
 	 * Constant which defines the filter string for acquiring the service which
 	 * specifies the eclipse home location.
-	 * 
+	 *
 	 * @since 3.4
 	 */
 	public static final String ECLIPSE_HOME_FILTER = "(&(objectClass=" + Location.class.getName() + ")(type=eclipse.home.location))"; //$NON-NLS-1$ //$NON-NLS-2$
@@ -71,7 +71,7 @@
 	/**
 	 * Returns <code>true</code> if this location allows a default value to be assigned
 	 * and <code>false</code> otherwise.
-	 * 
+	 *
 	 * @return whether or not this location can have a default value assigned
 	 */
 	public boolean allowsDefault();
@@ -80,24 +80,24 @@
 	 * Returns the default value of this location if any.  If no default is available then
 	 * <code>null</code> is returned. Note that even locations which allow defaults may still
 	 * return <code>null</code>.
-	 * 
+	 *
 	 * @return the default value for this location or <code>null</code>
 	 */
 	public URL getDefault();
 
 	/**
 	 * Returns the parent of this location or <code>null</code> if none is available.
-	 * 
+	 *
 	 * @return the parent of this location or <code>null</code>
 	 */
 	public Location getParentLocation();
 
 	/**
-	 * Returns the actual {@link URL} of this location.  If the location's value has been set, 
-	 * that value is returned.  If the value is not set and the location allows defaults, 
+	 * Returns the actual {@link URL} of this location.  If the location's value has been set,
+	 * that value is returned.  If the value is not set and the location allows defaults,
 	 * the value is set to the default and returned.  In all other cases <code>null</code>
 	 * is returned.
-	 * 
+	 *
 	 * @return the URL for this location or <code>null</code> if none
 	 */
 	public URL getURL();
@@ -105,7 +105,7 @@
 	/**
 	 * Returns <code>true</code> if this location has a value and <code>false</code>
 	 * otherwise.
-	 * 
+	 *
 	 * @return boolean value indicating whether or not the value is set
 	 */
 	public boolean isSet();
@@ -115,18 +115,18 @@
 	 * <code>false</code> otherwise.  The read only character
 	 * of a location is not in enforced in any way but rather expresses the intention of the
 	 * location's creator.
-	 * 
+	 *
 	 * @return boolean value indicating whether the location is read only
 	 */
 	public boolean isReadOnly();
 
 	/**
-	 * Sets and optionally locks the location's value to the given {@link URL}.  If the location 
+	 * Sets and optionally locks the location's value to the given {@link URL}.  If the location
 	 * already has a value an exception is thrown.  If locking is requested and fails, <code>false</code>
 	 * is returned and the {@link URL} of this location is not set.
-	 * 
+	 *
 	 * @param value the value of this location
-	 * @param lock whether or not to lock this location 
+	 * @param lock whether or not to lock this location
 	 * @return whether or not the location was successfully set and, if requested, locked.
 	 * @throws IllegalStateException if the location's value is already set
 	 * @deprecated use {@link #set(URL, boolean)} instead.
@@ -134,12 +134,12 @@
 	public boolean setURL(URL value, boolean lock) throws IllegalStateException;
 
 	/**
-	 * Sets and optionally locks the location's value to the given {@link URL}.  If the location 
+	 * Sets and optionally locks the location's value to the given {@link URL}.  If the location
 	 * already has a value an exception is thrown.  If locking is requested and fails, <code>false</code>
 	 * is returned and the {@link URL} of this location is not set.
-	 * 
+	 *
 	 * @param value the value of this location
-	 * @param lock whether or not to lock this location 
+	 * @param lock whether or not to lock this location
 	 * @return whether or not the location was successfully set and, if requested, locked.
 	 * @throws IllegalStateException if the location's value is already set
 	 * @throws IOException if there was an unexpected problem while acquiring the lock
@@ -148,12 +148,12 @@
 	public boolean set(URL value, boolean lock) throws IllegalStateException, IOException;
 
 	/**
-	 * Sets and optionally locks the location's value to the given {@link URL} using the given lock file.  If the location 
+	 * Sets and optionally locks the location's value to the given {@link URL} using the given lock file.  If the location
 	 * already has a value an exception is thrown.  If locking is requested and fails, <code>false</code>
 	 * is returned and the {@link URL} of this location is not set.
-	 * 
+	 *
 	 * @param value the value of this location
-	 * @param lock whether or not to lock this location 
+	 * @param lock whether or not to lock this location
 	 * @param lockFilePath the path to the lock file.  This path will be used to establish locks on this location.
 	 * The path may be an absolute path or it may be relative to the given URL.  If a <code>null</code>
 	 * value is used then a default lock path will be used for this location.
@@ -166,20 +166,20 @@
 
 	/**
 	 * Attempts to lock this location with a canonical locking mechanism and return
-	 * <code>true</code> if the lock could be acquired.  Not all locations can be 
+	 * <code>true</code> if the lock could be acquired.  Not all locations can be
 	 * locked.
 	 * <p>
-	 * Locking a location is advisory only.  That is, it does not prevent other applications from 
+	 * Locking a location is advisory only.  That is, it does not prevent other applications from
 	 * modifying the same location
 	 * </p>
 	 * @return true if the lock could be acquired; otherwise false is returned
-	 * 
+	 *
 	 * @exception IOException if there was an unexpected problem while acquiring the lock
 	 */
 	public boolean lock() throws IOException;
 
 	/**
-	 * Releases the lock on this location.  If the location is not already locked, no action 
+	 * Releases the lock on this location.  If the location is not already locked, no action
 	 * is taken.
 	 */
 	public void release();
@@ -204,12 +204,12 @@
 	public Location createLocation(Location parent, URL defaultValue, boolean readonly);
 
 	/**
-	 * Returns a URL to the specified path within this location.  The path 
-	 * of the returned URL may not exist yet.  It is the responsibility of the 
+	 * Returns a URL to the specified path within this location.  The path
+	 * of the returned URL may not exist yet.  It is the responsibility of the
 	 * client to create the content of the data area returned if it does not exist.
 	 * <p>
-	 * This method can be used to obtain a private area within the given location. 
-	 * For example use the symbolic name of a bundle to obtain a data area specific 
+	 * This method can be used to obtain a private area within the given location.
+	 * For example use the symbolic name of a bundle to obtain a data area specific
 	 * to that bundle.
 	 * </p>
 	 * <p>
@@ -218,7 +218,7 @@
 	 * this method is called and the location URL has not been set and there is
 	 * no default value for this location.
 	 * </p>
-	 * 
+	 *
 	 * @param path the name of the path to get from this location
 	 * @return the URL to the data area with the specified path.
 	 * @throws IOException if the location URL is not already set
diff --git a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/service/debug/DebugOptions.java b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/service/debug/DebugOptions.java
index 2ff4026..46d10ca 100644
--- a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/service/debug/DebugOptions.java
+++ b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/service/debug/DebugOptions.java
@@ -19,29 +19,29 @@
 /**
  * Used to get debug options settings and creating a new {@link DebugTrace} instance for
  * a bundle to use for dynamic tracing.
- * 
+ *
  * @noimplement This interface is not intended to be implemented by clients.
  * @noextend This interface is not intended to be extended by clients.
  * @since 3.1
  */
 public interface DebugOptions {
 	/**
-	 * The service property (named &quot;listener.symbolic.name&quot;) which specifies 
+	 * The service property (named &quot;listener.symbolic.name&quot;) which specifies
 	 * the bundle symbolic name of a {@link DebugOptionsListener} service.
-	 * 
+	 *
 	 * @since 3.5
 	 */
 	public static String LISTENER_SYMBOLICNAME = "listener.symbolic.name"; //$NON-NLS-1$
 
 	/**
 	 * Returns the identified option as a boolean value.  The specified
-	 * defaultValue is returned if no such option is found or if debug is not enabled.   
-	 * 
+	 * defaultValue is returned if no such option is found or if debug is not enabled.
+	 *
 	 * <p>
-	 * Options are specified in the general form <i>&lt;Bundle-SymbolicName&gt;/&lt;option-path&gt;</i>.  
+	 * Options are specified in the general form <i>&lt;Bundle-SymbolicName&gt;/&lt;option-path&gt;</i>.
 	 * For example, <code>org.eclipse.core.runtime/debug</code>
 	 * </p>
-	 * 
+	 *
 	 * @param option the name of the option to lookup
 	 * @param defaultValue the value to return if no such option is found
 	 * @return the value of the requested debug option or the
@@ -52,28 +52,28 @@
 	/**
 	 * Returns the identified option.  A <code>null</code> value
 	 * is returned if no such option is found or if debug is not enabled.
-	 * 
+	 *
 	 * <p>
 	 * Options are specified
-	 * in the general form <i>&lt;Bundle-SymbolicName&gt;/&lt;option-path&gt;</i>.  
+	 * in the general form <i>&lt;Bundle-SymbolicName&gt;/&lt;option-path&gt;</i>.
 	 * For example, <code>org.eclipse.core.runtime/debug</code>
 	 *</p>
-	 * 
+	 *
 	 * @param option the name of the option to lookup
 	 * @return the value of the requested debug option or <code>null</code>
 	 */
 	public abstract String getOption(String option);
 
 	/**
-	 * Returns the identified option.  The specified defaultValue is 
+	 * Returns the identified option.  The specified defaultValue is
 	 * returned if no such option is found or if debug is not enabled.
-	 * 
+	 *
 	 * <p>
 	 * Options are specified
-	 * in the general form <i>&lt;Bundle-SymbolicName&gt;/&lt;option-path&gt;</i>.  
+	 * in the general form <i>&lt;Bundle-SymbolicName&gt;/&lt;option-path&gt;</i>.
 	 * For example, <code>org.eclipse.core.runtime/debug</code>
 	 * </p>
-	 * 
+	 *
 	 * @param option the name of the option to lookup
 	 * @param defaultValue the value to return if no such option is found
 	 * @return the value of the requested debug option or the
@@ -83,16 +83,16 @@
 
 	/**
 	 * Returns the identified option as an int value.  The specified
-	 * defaultValue is returned if no such option is found or if a 
-	 * NumberFormatException is thrown while converting the option value 
+	 * defaultValue is returned if no such option is found or if a
+	 * NumberFormatException is thrown while converting the option value
 	 * to an integer or if debug is not enabled.
-	 * 
+	 *
 	 * <p>
 	 * Options are specified
-	 * in the general form <i>&lt;Bundle-SymbolicName&gt;/&lt;option-path&gt;</i>.  
+	 * in the general form <i>&lt;Bundle-SymbolicName&gt;/&lt;option-path&gt;</i>.
 	 * For example, <code>org.eclipse.core.runtime/debug</code>
 	 * </p>
-	 * 
+	 *
 	 * @param option the name of the option to lookup
 	 * @param defaultValue the value to return if no such option is found
 	 * @return the value of the requested debug option or the
@@ -101,11 +101,11 @@
 	public abstract int getIntegerOption(String option, int defaultValue);
 
 	/**
-	 * Returns a snapshot of the current options.  All 
+	 * Returns a snapshot of the current options.  All
 	 * keys and values are of type <code>String</code>.  If no
 	 * options are set then an empty map is returned.
 	 * <p>
-	 * If debug is not enabled then the snapshot of the current disabled 
+	 * If debug is not enabled then the snapshot of the current disabled
 	 * values is returned. See {@link DebugOptions#setDebugEnabled(boolean)}.
 	 * </p>
 	 * @return a snapshot of the current options.
@@ -114,7 +114,7 @@
 	public Map<String, String> getOptions();
 
 	/**
-	 * Sets the identified option to the identified value.  If debug is 
+	 * Sets the identified option to the identified value.  If debug is
 	 * not enabled then the specified option is not changed.
 	 * @param option the name of the option to set
 	 * @param value the value of the option to set
@@ -124,13 +124,13 @@
 	/**
 	 * Sets the current option key/value pairs to the specified options.
 	 * The specified map replaces all keys and values of the current debug options.
-	 * An <code>IllegalArgumentException</code> is thrown if any key or value 
+	 * An <code>IllegalArgumentException</code> is thrown if any key or value
 	 * in the specified map is not of type <code>String</code>.
 	 * <p>
 	 * If debug is not enabled then the specified options are saved as
-	 * the disabled values and no notifications will be sent. 
+	 * the disabled values and no notifications will be sent.
 	 * See {@link DebugOptions#setDebugEnabled(boolean)}.
-	 * If debug is enabled then notifications will be sent to the 
+	 * If debug is enabled then notifications will be sent to the
 	 * listeners which have options that have been changed, added or removed.
 	 * </p>
 
@@ -160,8 +160,8 @@
 	 * When debug is disabled all debug options are unset.
 	 * When disabling debug the current debug option values are
 	 * stored in memory as disabled values.  If debug is re-enabled the
-	 * disabled values will be set back and enabled.  The disabled values 
-	 * are only stored in memory and if the framework is restarted then 
+	 * disabled values will be set back and enabled.  The disabled values
+	 * are only stored in memory and if the framework is restarted then
 	 * the disabled option values will be lost.
 	 * </p>
 	 * @param value If <code>true</code>, debug is enabled, otherwise
@@ -170,12 +170,12 @@
 	 */
 	public abstract void setDebugEnabled(boolean value);
 
-	/** 
+	/**
 	 * Sets the current file used to trace messages to.
 	 * A <code>null</code> value is allowed which indicates
 	 * that <code>System.out</code> will be used
 	 * for trace messages.
-	 * 
+	 *
 	 * @param newFile The file to be used for tracing messages.
 	 * A <code>null</code> value is allowed.
 	 * @since 3.5
@@ -186,7 +186,7 @@
 	 * Returns the trace file if it is set, otherwise <code>null</code> is returned.
 	 * A <code>null</code> value indicates that <code>System.out</code> is used
 	 * for trace messages.
-	 * 
+	 *
 	 * @return the trace file if it is set, otherwise <code>null</code> is returned.
 	 * @since 3.5
 	 */
@@ -196,13 +196,13 @@
 	 * Creates a new <code>DebugTrace</code> instance for the specified bundle symbolic name.
 	 * If a <code>DebugTrace</code> object has already been created for the specified symbolic
 	 * name then the existing <code>DebugTrace</code> object will be returned.
-	 * 
+	 *
 	 * The class name, method name, and line number of any callers to the <code>DebugTrace</code>
 	 * API will automatically be determined by parsing the stack trace of the executing thread.
-	 * These attributes will be set based on the first caller of this API. 
-	 * 
+	 * These attributes will be set based on the first caller of this API.
+	 *
 	 * @param bundleSymbolicName The symbolic name of the bundle that is requesting a
-	 * new instance of a <code>DebugTrace</code>.   
+	 * new instance of a <code>DebugTrace</code>.
 	 * @return A new or existing <code>DebugTrace</code> object for the specified plug-in ID
 	 * @since 3.5
 	 */
@@ -220,7 +220,7 @@
 	 *
 	 * @param bundleSymbolicName The symbolic name of the bundle that is requesting a
 	 * new instance of a <code>DebugTrace</code>.
-	 * @param traceEntryClass The class that is being used to abstract tracing calls for a bundle. 
+	 * @param traceEntryClass The class that is being used to abstract tracing calls for a bundle.
 	 * @return A new or existing <code>DebugTrace</code> object for the specified plug-in ID
 	 * @since 3.5
 	 */
diff --git a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/service/debug/DebugOptionsListener.java b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/service/debug/DebugOptionsListener.java
index b679523..c626298 100644
--- a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/service/debug/DebugOptionsListener.java
+++ b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/service/debug/DebugOptionsListener.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -16,14 +16,14 @@
 import java.util.EventListener;
 
 /**
- * A debug options listener is notified whenever one of its plug-in option-path entries is 
+ * A debug options listener is notified whenever one of its plug-in option-path entries is
  * changed.  A listener is registered as an OSGi service using the {@link DebugOptions#LISTENER_SYMBOLICNAME}
  * service property to specify the symbolic name of the debug options listener.
  * <p>
- * The {@link DebugOptionsListener#optionsChanged(DebugOptions)} method will automatically 
- * be called upon registration of the debug options listener service.  This allows the 
- * listener to obtain the initial debug options.  This initial call to the listener 
- * will happen even if debug is not enabled at the time of registration 
+ * The {@link DebugOptionsListener#optionsChanged(DebugOptions)} method will automatically
+ * be called upon registration of the debug options listener service.  This allows the
+ * listener to obtain the initial debug options.  This initial call to the listener
+ * will happen even if debug is not enabled at the time of registration
  * ({@link DebugOptions#isDebugEnabled()} will return false in this case).
  * </p>
  * A debug options listener allows a bundle to cache trace option values in boolean fields for performance
@@ -32,25 +32,25 @@
  * public class Activator implements BundleActivator, DebugOptionsListener {
  * 	public static boolean DEBUG = false;
  * 	public static DebugTrace trace;
- * 	
+ *
  * 	public void start(BundleContext context) {
  * 		Hashtable props = new Hashtable(4);
  * 		props.put(DebugOptions.LISTENER_SYMBOLICNAME, "com.mycompany.mybundle");
  * 		context.registerService(DebugOptionsListener.class.getName(), this, props);
  * 	}
- * 
+ *
  * 	public void optionsChanged(DebugOptions options) {
  * 		if (trace == null)
  * 			trace = options.newDebugTrace("com.mycompany.mybundle");
  * 		DEBUG = options.getBooleanOption("com.mycompany.mybundle/debug", false);
  * 	}
- * 	
+ *
  * 	public void doSomeWork() {
  * 		if (DEBUG)
  * 			trace.trace(null, "Doing some work");
  * 	}
  * 	...
- * } 
+ * }
  * </pre>
  * @since 3.5
  */
@@ -58,9 +58,9 @@
 
 	/**
 	 * Notifies this listener that an option-path for its plug-in has changed.
-	 * This method is also called initially by the DebugOptions implementation 
+	 * This method is also called initially by the DebugOptions implementation
 	 * when the listener is registered as a service.  This allows the listener
-	 * to obtain the initial set of debug options without the need to 
+	 * to obtain the initial set of debug options without the need to
 	 * acquire the debug options service.
 	 * @param options a reference to the DebugOptions
 	 */
diff --git a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/service/debug/DebugTrace.java b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/service/debug/DebugTrace.java
index fc51616..35b4137 100644
--- a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/service/debug/DebugTrace.java
+++ b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/service/debug/DebugTrace.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -16,10 +16,10 @@
 /**
  * A DebugTrace is used to record debug trace statements, based on the current
  * option settings in a corresponding {@link DebugOptions} class. The trace implementation
- * will automatically insert additional contextual information such as the bundle, class, 
- * and method performing the tracing. 
+ * will automatically insert additional contextual information such as the bundle, class,
+ * and method performing the tracing.
  * <p>
- * Trace statements may be written to a file, or onto standard output, depending on 
+ * Trace statements may be written to a file, or onto standard output, depending on
  * how the {@link DebugOptions} is configured (See {@link DebugOptions#setFile(java.io.File)}).
  * </p>
  * <p>
@@ -32,11 +32,11 @@
  * has a value of "true".
  * </p>
  * <p>
- * Note that the pipe character ("&#124;") is reserved for internal use. If this character 
+ * Note that the pipe character ("&#124;") is reserved for internal use. If this character
  * happens to occur in any of the thread name, the option, the message or an Exception
- * message, it will be escaped to the corresponding HTML representation ("&amp;&#35;124&#59;").   
+ * message, it will be escaped to the corresponding HTML representation ("&amp;&#35;124&#59;").
  * </p>
- *  
+ *
  * @since 3.5
  * @noimplement This interface is not intended to be implemented by clients.
  * @noextend This interface is not intended to be extended by clients.
@@ -45,7 +45,7 @@
 
 	/**
 	 * Traces a message for the specified option.
-	 * 
+	 *
 	 * @param option The name of the boolean option that will control whether the
 	 * trace statement is printed (e.g., "/debug/myComponent"), or <code>null</code>
 	 * @param message The trace message to display
@@ -54,7 +54,7 @@
 
 	/**
 	 * Traces a message and exception for the specified option.
-	 * 
+	 *
 	 * @param option The name of the boolean option that will control whether the
 	 * trace statement is printed (e.g., "/debug/myComponent"), or <code>null</code>
 	 * @param message The trace message to display
@@ -63,7 +63,7 @@
 	public void trace(final String option, final String message, final Throwable error);
 
 	/**
-	 * Adds a trace message showing a thread stack dump for the current class and 
+	 * Adds a trace message showing a thread stack dump for the current class and
 	 * method being executed for the specified option.
 	 *
 	 * @param option The name of the boolean option that will control whether the
@@ -73,17 +73,17 @@
 
 	/**
 	 * Add a trace message level stating that a method is being executed for the specified option.
-	 * 
+	 *
 	 * @param option The name of the boolean option that will control whether the
 	 * trace statement is printed (e.g., "/debug/myComponent"), or <code>null</code>
 	 */
 	public void traceEntry(final String option);
 
 	/**
-	 * Add a trace message level stating that a method with the specified argument 
-	 * values is being executed for the specified option. The result of {@link String#valueOf(Object)} 
+	 * Add a trace message level stating that a method with the specified argument
+	 * values is being executed for the specified option. The result of {@link String#valueOf(Object)}
 	 * on the methodArgument will be written to the trace file.
-	 * 
+	 *
 	 * @param option The name of the boolean option that will control whether the
 	 * trace statement is printed (e.g., "/debug/myComponent"), or <code>null</code>
 	 * @param methodArgument
@@ -92,10 +92,10 @@
 	public void traceEntry(final String option, final Object methodArgument);
 
 	/**
-	 * Add a trace message level stating that a method with the specified arguments 
-	 * values is being executed for the specified option. The result of {@link String#valueOf(Object)} 
+	 * Add a trace message level stating that a method with the specified arguments
+	 * values is being executed for the specified option. The result of {@link String#valueOf(Object)}
 	 * on each argument will be written to the trace file.
-	 * 
+	 *
 	 * @param option The name of the boolean option that will control whether the
 	 * trace statement is printed (e.g., "/debug/myComponent"), or <code>null</code>
 	 * @param methodArguments
@@ -105,17 +105,17 @@
 
 	/**
 	 * Add a trace message level stating that a method has completed execution for the specified option.
-	 * 
+	 *
 	 * @param option The name of the boolean option that will control whether the
 	 * trace statement is printed (e.g., "/debug/myComponent"), or <code>null</code>
 	 */
 	public void traceExit(final String option);
 
 	/**
-	 * Add a trace message level stating that a method with the specified result value 
-	 * has completed execution for the specified option. The result of {@link String#valueOf(Object)} 
+	 * Add a trace message level stating that a method with the specified result value
+	 * has completed execution for the specified option. The result of {@link String#valueOf(Object)}
 	 * on the result object will be written to the trace file.
-	 * 
+	 *
 	 * @param option The name of the boolean option that will control whether the
 	 * trace statement is printed (e.g., "/debug/myComponent"), or <code>null</code>
 	 * @param result The result being returned from the method that was executed
diff --git a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/service/environment/Constants.java b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/service/environment/Constants.java
index ba74963..090284a 100644
--- a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/service/environment/Constants.java
+++ b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/service/environment/Constants.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -142,7 +142,7 @@
 	/**
 	 * Constant string (value "x86_64") indicating the platform is running on an
 	 * x86 64bit-based architecture.
-	 * 
+	 *
 	 * @since 3.1
 	 */
 	public static final String ARCH_X86_64 = "x86_64";//$NON-NLS-1$
@@ -150,7 +150,7 @@
 	/**
 	 * Constant string (value "amd64") indicating the platform is running on an
 	 * AMD64-based architecture.
-	 * 
+	 *
 	 * @deprecated use <code>ARCH_X86_64</code> instead. Note the values
 	 * has been changed to be the value of the <code>ARCH_X86_64</code> constant.
 	 */
@@ -165,7 +165,7 @@
 	/**
 	 * Constant string (value "ia64_32") indicating the platform is running on an
 	 * IA64 32bit-based architecture.
-	 * 
+	 *
 	 * @since 3.1
 	 */
 	public static final String ARCH_IA64_32 = "ia64_32";//$NON-NLS-1$
diff --git a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/service/environment/EnvironmentInfo.java b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/service/environment/EnvironmentInfo.java
index 68835a8..6e3277a 100644
--- a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/service/environment/EnvironmentInfo.java
+++ b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/service/environment/EnvironmentInfo.java
@@ -16,12 +16,12 @@
 /**
  * A Framework service which gives access to the command line used to start
  * this running framework as well as information about the environment
- * such as the current operating system, machine architecture, locale and 
+ * such as the current operating system, machine architecture, locale and
  * windowing system.
  * <p>
  * This interface is not intended to be implemented by clients.
  * </p>
- * 
+ *
  * @since 3.0
  * @noimplement This interface is not intended to be implemented by clients.
  */
@@ -31,7 +31,7 @@
 
 	/**
 	 * Returns all command line arguments specified when the running framework was started.
-	 * 
+	 *
 	 * @return the array of command line arguments.
 	 */
 	public String[] getCommandLineArgs();
@@ -39,7 +39,7 @@
 	/**
 	 * Returns the arguments consumed by the framework implementation itself.  Which
 	 * arguments are consumed is implementation specific.
-	 * 
+	 *
 	 * @return the array of command line arguments consumed by the framework.
 	 */
 	public String[] getFrameworkArgs();
@@ -47,17 +47,17 @@
 	/**
 	 * Returns the arguments not consumed by the framework implementation itself.  Which
 	 * arguments are consumed is implementation specific.
-	 * 
+	 *
 	 * @return the array of command line arguments not consumed by the framework.
 	 */
 	public String[] getNonFrameworkArgs();
 
 	/**
-	 * Returns the string name of the current system architecture.  
-	 * The value is a user-defined string if the architecture is 
-	 * specified on the command line, otherwise it is the value 
+	 * Returns the string name of the current system architecture.
+	 * The value is a user-defined string if the architecture is
+	 * specified on the command line, otherwise it is the value
 	 * returned by <code>java.lang.System.getProperty("os.arch")</code>.
-	 * 
+	 *
 	 * @return the string name of the current system architecture
 	 */
 	public String getOSArch();
@@ -72,11 +72,11 @@
 
 	/**
 	 * Returns the string name of the current operating system for use in finding
-	 * files whose path starts with <code>$os$</code>.  Return {@link Constants#OS_UNKNOWN} 
+	 * files whose path starts with <code>$os$</code>.  Return {@link Constants#OS_UNKNOWN}
 	 * if the operating system cannot be determined.
-	 * <p>  
+	 * <p>
 	 * The value may indicate one of the operating systems known to the platform
-	 * (as specified in <code>org.eclipse.core.runtime.Platform#knownOSValues</code>) 
+	 * (as specified in <code>org.eclipse.core.runtime.Platform#knownOSValues</code>)
 	 * or a user-defined string if the operating system name is specified on the command line.
 	 * </p>
 	 *
@@ -96,7 +96,7 @@
 	/**
 	 * Returns <code>true</code> if the framework is in debug mode and
 	 * <code>false</code> otherwise.
-	 * 
+	 *
 	 * @return whether or not the framework is in debug mode
 	 */
 	public boolean inDebugMode();
@@ -104,15 +104,15 @@
 	/**
 	 * Returns <code>true</code> if the framework is in development mode
 	 * and <code>false</code> otherwise.
-	 * 
+	 *
 	 * @return whether or not the framework is in development mode
 	 */
 	public boolean inDevelopmentMode();
 
 	/**
-	 * Returns the value for the specified property.  Environment Properties are 
+	 * Returns the value for the specified property.  Environment Properties are
 	 * backed by the Java system properties.  When the option
-	 * <code>osgi.framework.useSystemProperties</code> is used then 
+	 * <code>osgi.framework.useSystemProperties</code> is used then
 	 * the environment properties are specific for each instance of the framework.
 	 * <p>
 	 * This method should be used instead of the <code>System.getProperty(String)</code>
@@ -125,9 +125,9 @@
 	public String getProperty(String key);
 
 	/**
-	 * Sets the value for the specified property.  Environment Properties are 
+	 * Sets the value for the specified property.  Environment Properties are
 	 * backed by the Java system properties.  When the option
-	 * <code>osgi.framework.useSystemProperties</code> is used then 
+	 * <code>osgi.framework.useSystemProperties</code> is used then
 	 * the environment properties are specific for each instance of the framework.
 	 * <p>
 	 * This method should be used instead of the <code>System.setProperty(String, String)</code>
diff --git a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/service/localization/BundleLocalization.java b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/service/localization/BundleLocalization.java
index 11c285a..e0d1492 100644
--- a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/service/localization/BundleLocalization.java
+++ b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/service/localization/BundleLocalization.java
@@ -17,8 +17,8 @@
 import org.osgi.framework.Bundle;
 
 /**
- * The interface of the service that gets {@link ResourceBundle} objects from a given 
- * bundle with a given locale. 
+ * The interface of the service that gets {@link ResourceBundle} objects from a given
+ * bundle with a given locale.
  * <p>
  * This interface is not intended to be implemented by clients.
  * </p>
@@ -32,7 +32,7 @@
 	 * @param bundle the bundle to get localization for
 	 * @param locale the name of the locale to get, or <code>null</code> if
 	 * the default locale is to be used
-	 * 
+	 *
 	 * @return A <code>ResourceBundle</code> object for the given bundle and locale,
 	 * or <code>null</code> is returned if no ResourceBundle object can
 	 * be loaded.
diff --git a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/service/localization/LocaleProvider.java b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/service/localization/LocaleProvider.java
index 4643951..562cac9 100644
--- a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/service/localization/LocaleProvider.java
+++ b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/service/localization/LocaleProvider.java
@@ -16,16 +16,16 @@
 import java.util.Locale;
 
 /**
- * A service that is used to determine what the current locale is for a 
- * particular context or session.  If no <code>LocaleProvider</code> 
- * service is available then the locale must be determined by other 
+ * A service that is used to determine what the current locale is for a
+ * particular context or session.  If no <code>LocaleProvider</code>
+ * service is available then the locale must be determined by other
  * means, for example, by calling {@link Locale#getDefault()}.
  * <p>
- * More advanced environments can support multiple locales within a 
- * single system.  For example, a server may support multiple users, 
- * each needing a different locale.  In such an environment a 
- * <code>LocaleProvider</code> service must be registered that can 
- * determine the current locale for the context of the call to the 
+ * More advanced environments can support multiple locales within a
+ * single system.  For example, a server may support multiple users,
+ * each needing a different locale.  In such an environment a
+ * <code>LocaleProvider</code> service must be registered that can
+ * determine the current locale for the context of the call to the
  * {@link #getLocale()} method.
  * </p>
  * @since 1.1
@@ -33,12 +33,12 @@
 public interface LocaleProvider {
 
 	/**
-	 * Determines the current locale for the context of the call to 
-	 * this method.  For environments that support a single system wide 
+	 * Determines the current locale for the context of the call to
+	 * this method.  For environments that support a single system wide
 	 * locale, this is equivalent to calling {@link Locale#getDefault()}.
 	 * <p>
-	 * The result of this method should not be retained or passed to other 
-	 * threads.  The current locale can change any time and may be 
+	 * The result of this method should not be retained or passed to other
+	 * threads.  The current locale can change any time and may be
 	 * different for each thread.
 	 * </p>
 	 * @return The current locale.
diff --git a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/service/runnable/ApplicationLauncher.java b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/service/runnable/ApplicationLauncher.java
index fc9a602..e036131 100644
--- a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/service/runnable/ApplicationLauncher.java
+++ b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/service/runnable/ApplicationLauncher.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -15,7 +15,7 @@
 package org.eclipse.osgi.service.runnable;
 
 /**
- * An ApplicationLauncher is used to launch ParameterizedRunnable objects using 
+ * An ApplicationLauncher is used to launch ParameterizedRunnable objects using
  * the main thread.
  * <p>
  * This interface is not intended to be implemented by clients.
@@ -24,7 +24,7 @@
  * This class is for internal use by the platform-related plug-ins.
  * Clients outside of the base platform should not reference or subclass this class.
  * </p>
- * 
+ *
  * @since 3.2
  * @noimplement This interface is not intended to be implemented by clients.
  */
@@ -37,11 +37,11 @@
 	void launch(ParameterizedRunnable runnable, Object context);
 
 	/**
-	 * Forces the current runnable which is running to be stopped.  
+	 * Forces the current runnable which is running to be stopped.
 	 * This method will return after the currently running ParameterizedRunnable
 	 * has completely stopped.
 	 * <p>
-	 * After this method returns this ApplicationLauncher will no longer allow 
+	 * After this method returns this ApplicationLauncher will no longer allow
 	 * applications to be launched.
 	 */
 	void shutdown();
diff --git a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/service/runnable/ParameterizedRunnable.java b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/service/runnable/ParameterizedRunnable.java
index 7d99a8b..8b0ec51 100644
--- a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/service/runnable/ParameterizedRunnable.java
+++ b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/service/runnable/ParameterizedRunnable.java
@@ -7,16 +7,16 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
 package org.eclipse.osgi.service.runnable;
 
 /**
- * Like a {@link java.lang.Runnable}, an object which captures a block of code which can 
- * be passed around and executed.  Unlike standard runnables, paramaterized 
- * runnables allow an arbitrary {@link java.lang.Object} to be passed in when the 
+ * Like a {@link java.lang.Runnable}, an object which captures a block of code which can
+ * be passed around and executed.  Unlike standard runnables, paramaterized
+ * runnables allow an arbitrary {@link java.lang.Object} to be passed in when the
  * block is evaluated.
  * <p>
  * Clients may implement this interface.
@@ -32,7 +32,7 @@
 	/**
 	 * Executes the block of code encapsulated by this runnable in the context of
 	 * the given object and returns the result.  The result may be <code>null</code>.
-	 * 
+	 *
 	 * @param context the context for evaluating the runnable
 	 * @return the result of evaluating the runnable in the given context
 	 * @throws Exception if there is a problem running this runnable
diff --git a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/service/runnable/StartupMonitor.java b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/service/runnable/StartupMonitor.java
index 73af2f4..d6ef394 100644
--- a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/service/runnable/StartupMonitor.java
+++ b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/service/runnable/StartupMonitor.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     Andrew Niefer - IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -15,40 +15,40 @@
 
 /**
  * Service interface used to monitor the startup process.
- *  
- * Bundles can register a monitor in order to be given processing time on the 
+ *
+ * Bundles can register a monitor in order to be given processing time on the
  * primary thread during the startup process.  Clients with threading restrictions can
  * use this interface to process events that may have been collected from another thread.
- *  <p> 
- * Monitors share time on the primary thread.  The primary thread used to run the application 
- * will not proceed until monitors return from any operation.  Because of this, monitors should 
+ *  <p>
+ * Monitors share time on the primary thread.  The primary thread used to run the application
+ * will not proceed until monitors return from any operation.  Because of this, monitors should
  * not perform long running operations.
  * </p>
  * <p>
- * Clients may implement this interface but should not invoke it.  The platform 
+ * Clients may implement this interface but should not invoke it.  The platform
  * is responsible for invoking the monitor at the appropriate times.
- * </p> 
+ * </p>
  * @since 3.3
  */
 public interface StartupMonitor {
-	/** 
-	 * Update the monitor. This method is periodically called by the platform from the primary thread during 
+	/**
+	 * Update the monitor. This method is periodically called by the platform from the primary thread during
 	 * periods where the primary thread is waiting on another thread (ie start level increasing, refreshing packages)
 	 * <p>
-	 * If multiple monitors are registered then the platform will only call the monitor with the highest service 
-	 * ranking.  In case of a service ranking tie the service with the lowest service id is selected (i.e. the 
+	 * If multiple monitors are registered then the platform will only call the monitor with the highest service
+	 * ranking.  In case of a service ranking tie the service with the lowest service id is selected (i.e. the
 	 * first monitor registered).
 	 * </p>
 	 */
 	public void update();
 
 	/**
-	 * This method is called by the platform from the primary thread once the application is completely 
-	 * initialized and running.  This method should perform certain operations that are needed once an 
+	 * This method is called by the platform from the primary thread once the application is completely
+	 * initialized and running.  This method should perform certain operations that are needed once an
 	 * application is running.  One example is bringing down a splash screen if it exists.
 	 * <p>
 	 * If multiple monitors are registered then the platform will call all monitors.  The monitors are called
-	 * according to service ranking; monitors with higher service rankings are called first.  In case of a 
+	 * according to service ranking; monitors with higher service rankings are called first.  In case of a
 	 * service ranking tie the service with the lowest service id is called first (i.e. the first monitor registered).
 	 * </p>
 	 */
diff --git a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/service/urlconversion/URLConverter.java b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/service/urlconversion/URLConverter.java
index 326b375..0bc04d9 100644
--- a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/service/urlconversion/URLConverter.java
+++ b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/service/urlconversion/URLConverter.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -22,7 +22,7 @@
  * <p>
  * Clients may implement this interface.
  * </p>
- * 
+ *
  * @since 3.1
  */
 public interface URLConverter {
@@ -30,13 +30,13 @@
 	/**
 	 * Converts a URL that uses a user-defined protocol into a URL that uses the file
 	 * protocol. The contents of the URL may be extracted into a cache on the file-system
-	 * in order to get a file URL. 
+	 * in order to get a file URL.
 	 * <p>
 	 * If the protocol for the given URL is not recognized by this converter, the original
 	 * URL is returned as-is.
 	 * </p>
 	 * @param url the original URL
-	 * @return the converted file URL or the original URL passed in if it is 
+	 * @return the converted file URL or the original URL passed in if it is
 	 * 	not recognized by this converter
 	 * @throws IOException if an error occurs during the conversion
 	 * @since 3.2
diff --git a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/storagemanager/ManagedOutputStream.java b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/storagemanager/ManagedOutputStream.java
index c4454e6..53b3b98 100644
--- a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/storagemanager/ManagedOutputStream.java
+++ b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/storagemanager/ManagedOutputStream.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -43,11 +43,11 @@
 		this.state = ST_OPEN;
 	}
 
-	/** 
-	 * Instructs this output stream to be closed and storage manager to 
-	 * be updated as appropriate.  If this managed output stream is part of 
+	/**
+	 * Instructs this output stream to be closed and storage manager to
+	 * be updated as appropriate.  If this managed output stream is part of
 	 * a set returned by {@link StorageManager#getOutputStreamSet(String[])} then
-	 * the storage manager will only be updated with the new content after all 
+	 * the storage manager will only be updated with the new content after all
 	 * of the managed output streams in the set are closed successfully.
 	 * @see FilterOutputStream#close()
 	 */
@@ -58,8 +58,8 @@
 
 	/**
 	 * Instructs this output stream to be closed and the contents discarded.
-	 * If this managed output stream is part of a set returned by 
-	 * {@link StorageManager#getOutputStreamSet(String[])} then the new 
+	 * If this managed output stream is part of a set returned by
+	 * {@link StorageManager#getOutputStreamSet(String[])} then the new
 	 * content of all managed output streams in the set will be discarded.
 	 */
 	public void abort() {
diff --git a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/storagemanager/StorageManager.java b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/storagemanager/StorageManager.java
index 2cadd88..9721822 100644
--- a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/storagemanager/StorageManager.java
+++ b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/storagemanager/StorageManager.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -33,8 +33,8 @@
 import org.eclipse.osgi.internal.messages.Msg;
 
 /**
- * Storage managers provide a facility for tracking the state of a group of files having 
- * relationship with each others and being updated by several entities at the same time. 
+ * Storage managers provide a facility for tracking the state of a group of files having
+ * relationship with each others and being updated by several entities at the same time.
  * The typical usecase is in shared configuration data areas.
  * <p>
  * The facilities provided here are cooperative. That is, all participants must
@@ -55,13 +55,13 @@
  * // Ignore the exception. The registry will be rebuilt from source.
  * }
  *
- * //To read from a file 
+ * //To read from a file
  * java.io.File fileA = cacheStorageManager.lookup("fileA", false));
  * java.io.File fileB = cacheStorageManager.lookup("fileB", false));
- * //Do the reading code 
+ * //Do the reading code
  * new java.io.FileOutputStream(fileA);
  *
- * //To write in files 
+ * //To write in files
  * cacheStorageManager.add("fileC"); //add the file to the filemanager (in this case we assume it is not already here)
  * cacheStorageManager.add("fileD");
  *
@@ -71,7 +71,7 @@
  *
  * //Do the actual writing here...
  *
- * //Finally update the storagemanager with the actual file to manage. 
+ * //Finally update the storagemanager with the actual file to manage.
  * cacheStorageManager.update(new String[] {"fileC", "fileD"}, new String[] {fileC.getName(), fileD.getName()};
  *
  * //Close the file manager at the end
@@ -79,22 +79,22 @@
  * </pre>
  * <p>
  * Implementation details <br>
- * The following implementation details are provided to help with understanding the 
+ * The following implementation details are provided to help with understanding the
  * behavior of this class.
  * The general principle is to maintain a table which maps user-level file names
- * onto an actual disk files.  If a file needs to be modified, 
+ * onto an actual disk files.  If a file needs to be modified,
  * it is stored into a new file.  The old content is not removed from disk until all entities
  * have closed there instance of the storage manager.
  * Once the instance has been created, open() must be called before performing any other operation.
  * On open the storage manager obtains a snapshot of the current managed files contents. If an
- * entity updates a managed file, the storage manager will save the content for that instance of the 
- * storage manager, all other storage manager instances will still have access to that managed file's 
+ * entity updates a managed file, the storage manager will save the content for that instance of the
+ * storage manager, all other storage manager instances will still have access to that managed file's
  * content as it was when the instance was first opened.
  * </p>
  * @since 3.2
  */
 
-// Note the implementation of this class originated from the following deprecated classes: 
+// Note the implementation of this class originated from the following deprecated classes:
 // /org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/adaptor/FileManager.java
 // /org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/adaptor/StreamManager.java
 public final class StorageManager {
@@ -103,7 +103,7 @@
 	private static final String MANAGER_FOLDER = ".manager"; //$NON-NLS-1$
 	private static final String TABLE_FILE = ".fileTable"; //$NON-NLS-1$
 	private static final String LOCK_FILE = ".fileTableLock"; //$NON-NLS-1$
-	private static final int MAX_LOCK_WAIT = 5000; // 5 seconds 
+	private static final int MAX_LOCK_WAIT = 5000; // 5 seconds
 	// these should be static but the tests expect to be able to create new managers after changing this setting dynamically
 	private final boolean useReliableFiles = Boolean.valueOf(System.getProperty("osgi.useReliableFiles")).booleanValue(); //$NON-NLS-1$
 	private final boolean tempCleanup = Boolean.valueOf(System.getProperty("osgi.embedded.cleanTempFiles")).booleanValue(); //$NON-NLS-1$
@@ -167,10 +167,10 @@
 	/**
 	 * Returns a new storage manager for the area identified by the given base
 	 * directory.
-	 * 
+	 *
 	 * @param base the directory holding the files to be managed
-	 * @param lockMode the lockMode to use for the storage manager. It can have one the 3 values: none, java.io, java.nio 
-	 * and also supports null in which case the lock strategy will be the global one.  
+	 * @param lockMode the lockMode to use for the storage manager. It can have one the 3 values: none, java.io, java.nio
+	 * and also supports null in which case the lock strategy will be the global one.
 	 */
 	public StorageManager(File base, String lockMode) {
 		this(base, lockMode, false);
@@ -179,10 +179,10 @@
 	/**
 	 * Returns a new storage manager for the area identified by the given base
 	 * directory.
-	 * 
+	 *
 	 * @param base the directory holding the files to be managed
-	 * @param lockMode the lockMode to use for the storage manager. It can have one the 3 values: none, java.io, java.nio 
-	 * and also supports null in which case the lock strategy will be the global one.  
+	 * @param lockMode the lockMode to use for the storage manager. It can have one the 3 values: none, java.io, java.nio
+	 * and also supports null in which case the lock strategy will be the global one.
 	 * @param readOnly true if the managed files are read-only
 	 */
 	public StorageManager(File base, String lockMode, boolean readOnly) {
@@ -210,7 +210,7 @@
 
 	/**
 	 * Add the given managed file name to the list of files managed by this manager.
-	 * 
+	 *
 	 * @param managedFile name of the file to manage
 	 * @throws IOException if there are any problems adding the given file name to the manager
 	 */
@@ -220,9 +220,9 @@
 
 	/* (non-Javadoc
 	 * Add the given file name to the list of files managed by this manager.
-	 * 
+	 *
 	 * @param managedFile name of the file to manage.
-	 * @param fileType the file type. 
+	 * @param fileType the file type.
 	 * @throws IOException if there are any problems adding the given file to the manager
 	 */
 	private void add(String managedFile, int fileType) throws IOException {
@@ -258,10 +258,10 @@
 	}
 
 	/* (non-Javadoc)
-	 * Find the oldest generation of a file still available on disk 
+	 * Find the oldest generation of a file still available on disk
 	 * @param file the file from which to obtain the oldest generation.
 	 * @return the oldest generation of the file or 0 if the file does
-	 * not exist. 
+	 * not exist.
 	 */
 	private int findOldestGeneration(String managedFile) {
 		String[] files = base.list();
@@ -287,12 +287,12 @@
 
 	/**
 	 * Update the given managed files with the content in the given source files.
-	 * The managedFiles is a list of managed file names which are currently managed. 
-	 * If a managed file name is not currently managed it will be added as a 
+	 * The managedFiles is a list of managed file names which are currently managed.
+	 * If a managed file name is not currently managed it will be added as a
 	 * managed file for this storage manager.
-	 * The sources are absolute (or relative to the current working directory) 
+	 * The sources are absolute (or relative to the current working directory)
 	 * file paths containing the new content for the corresponding managed files.
-	 * 
+	 *
 	 * @param managedFiles the managed files to update
 	 * @param sources the new content for the managed files
 	 * @throws IOException if there are any problems updating the given managed files
@@ -329,7 +329,7 @@
 
 	/**
 	 * Returns a list of all the managed files currently being managed.
-	 * 
+	 *
 	 * @return the names of the managed files
 	 */
 	public String[] getManagedFiles() {
@@ -347,7 +347,7 @@
 	/**
 	 * Returns the directory containing the files being managed by this storage
 	 * manager.
-	 * 
+	 *
 	 * @return the directory containing the managed files
 	 */
 	public File getBase() {
@@ -356,9 +356,9 @@
 
 	/**
 	 * Returns the current numeric id (appendage) of the given managed file.
-	 * <code>managedFile + "." + getId(target)</code>. A value of -1 is returned 
+	 * <code>managedFile + "." + getId(target)</code>. A value of -1 is returned
 	 * if the given name is not managed.
-	 * 
+	 *
 	 * @param managedFile the name of the managed file
 	 * @return the id of the managed file
 	 */
@@ -373,7 +373,7 @@
 
 	/**
 	 * Returns if readOnly state this storage manager is using.
-	 * 
+	 *
 	 * @return if this storage manager update state is read-only.
 	 */
 	public boolean isReadOnly() {
@@ -387,7 +387,7 @@
 	 * Locking a manager is advisory only. That is, it does not prevent other
 	 * applications from modifying the files managed by this manager.
 	 * </p>
-	 * 
+	 *
 	 * @exception IOException
 	 *                         if there was an unexpected problem while acquiring the
 	 *                         lock.
@@ -421,15 +421,15 @@
 	}
 
 	/**
-	 * Returns the actual file location to use when reading the given managed file. 
-	 * A value of <code>null</code> can be returned if the given managed file name is not 
-	 * managed and add is set to false.  
+	 * Returns the actual file location to use when reading the given managed file.
+	 * A value of <code>null</code> can be returned if the given managed file name is not
+	 * managed and add is set to false.
 	 * <p>
 	 * The returned file should be considered read-only.  Any updates to the content of this
 	 * file should be done using {@link #update(String[], String[])}.
-	 * 
+	 *
 	 * @param managedFile the managed file to lookup
-	 * @param add indicate whether the managed file name should be added to the manager if 
+	 * @param add indicate whether the managed file name should be added to the manager if
 	 * it is not already managed.
 	 * @throws IOException if the add flag is set to true and the addition of the managed file failed
 	 * @return the absolute file location to use for the given managed file or
@@ -471,7 +471,7 @@
 
 	/**
 	 * Removes the given managed file from management by this storage manager.
-	 * 
+	 *
 	 * @param managedFile the managed file to remove
 	 * @throws IOException if an error occured removing the managed file
 	 */
@@ -480,7 +480,7 @@
 			throw new IOException(Msg.fileManager_notOpen);
 		if (readOnly)
 			throw new IOException(Msg.fileManager_illegalInReadOnlyMode);
-		// The removal needs to be done eagerly, so the value is effectively removed from the disktable. 
+		// The removal needs to be done eagerly, so the value is effectively removed from the disktable.
 		// Otherwise, an updateTable() caused by an update(,)  could cause the file to readded to the local table.
 		if (!lock(true))
 			throw new IOException(Msg.fileManager_cannotLock);
@@ -701,7 +701,7 @@
 	}
 
 	/**
-	 * This methods opens the storage manager. 
+	 * This methods opens the storage manager.
 	 * This method must be called before any operation on the storage manager.
 	 * @param wait indicates if the open operation must wait in case of contention on the lock file.
 	 * @throws IOException if an error occurred opening the storage manager
@@ -748,11 +748,11 @@
 	}
 
 	/**
-	 * Returns a managed <code>InputStream</code> for a managed file. 
-	 * <code>null</code> can be returned if the given name is not managed. 
-	 * 
+	 * Returns a managed <code>InputStream</code> for a managed file.
+	 * <code>null</code> can be returned if the given name is not managed.
+	 *
 	 * @param managedFile the name of the managed file to open.
-	 * @return an input stream to the managed file or 
+	 * @return an input stream to the managed file or
 	 * <code>null</code> if the given name is not managed.
 	 * @throws IOException if the content is missing, corrupt or an error occurs.
 	 */
@@ -761,11 +761,11 @@
 	}
 
 	/**
-	 * Returns a managed input stream set for the managed file names. 
+	 * Returns a managed input stream set for the managed file names.
 	 * Elements of the returned set may be <code>null</code> if a given name is not managed.
-	 * This method should be used for managed file sets which use the output streams returned 
+	 * This method should be used for managed file sets which use the output streams returned
 	 * by the {@link #getOutputStreamSet(String[])} to save data.
-	 * 
+	 *
 	 * @param managedFiles the names of the managed files to open.
 	 * @return a set input streams to the given managed files.
 	 * @throws IOException if the content of one of the managed files is missing, corrupt or an error occurs.
@@ -791,10 +791,10 @@
 	}
 
 	/**
-	 * Returns a <code>ManagedOutputStream</code> for a managed file.  
-	 * Closing the ouput stream will update the storage manager with the 
+	 * Returns a <code>ManagedOutputStream</code> for a managed file.
+	 * Closing the ouput stream will update the storage manager with the
 	 * new content of the managed file.
-	 * 
+	 *
 	 * @param managedFile the name of the managed file to write.
 	 * @return a managed output stream for the managed file.
 	 * @throws IOException if an error occurs opening the managed file.
@@ -811,10 +811,10 @@
 	/**
 	 * Returns an array of <code>ManagedOutputStream</code> for a set of managed files.
 	 * When all managed output streams in the set have been closed, the storage manager
-	 * will be updated with the new content of the managed files. 
-	 * Aborting any one of the streams will cause the entire content of the set to abort 
+	 * will be updated with the new content of the managed files.
+	 * Aborting any one of the streams will cause the entire content of the set to abort
 	 * and be discarded.
-	 * 
+	 *
 	 * @param managedFiles list of names of the managed file to write.
 	 * @return an array of managed output streams respectively of managed files.
 	 * @throws IOException if an error occurs opening the managed files.
@@ -876,10 +876,10 @@
 	}
 
 	/* (non-Javadoc)
-	 * Close the managed output stream and update the new content to  
+	 * Close the managed output stream and update the new content to
 	 * this manager. If this managed output stream is part of a set, only after closing
 	 * all managed output streams in the set will storage manager be updated.
-	 * 
+	 *
 	 * @param smos the output stream.
 	 * @throws IOException if an errors occur.
 	 * @see #getOutputStream(String)
@@ -934,7 +934,7 @@
 					targets[idx] = smos.getTarget();
 					File outputFile = smos.getOutputFile();
 					if (outputFile == null) {
-						// this is a ReliableFile 
+						// this is a ReliableFile
 						add(smos.getTarget(), StorageManager.FILETYPE_RELIABLEFILE);
 						ReliableFileOutputStream rfos = (ReliableFileOutputStream) smos.getOutputStream();
 						File file = rfos.closeIntermediateFile(); //multiple calls to close() ok
diff --git a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/util/ManifestElement.java b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/util/ManifestElement.java
index 33a2cbf..439efc4 100644
--- a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/util/ManifestElement.java
+++ b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/util/ManifestElement.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM Corporation - initial API and implementation
  *******************************************************************************/
@@ -33,18 +33,18 @@
 /**
  * This class represents a single manifest element.  A manifest element must consist of a single
  * {@link String} value.  The {@link String} value may be split up into component values each
- * separated by a semi-colon (';').  A manifest element may optionally have a set of 
+ * separated by a semi-colon (';').  A manifest element may optionally have a set of
  * attribute and directive values associated with it. The general syntax of a manifest element is as follows:
  * <pre>
  * ManifestElement ::= component (';' component)* (';' parameter)*
  * component ::= ([^;,:="\#x0D#x0A#x00])+ | quoted-string
  * quoted-string::= '"' ( [^"\#x0D#x0A#x00] | '\"'| '\\')* '"'
- * parameter ::= directive | attribute 
+ * parameter ::= directive | attribute
  * directive ::= token ':=' argument
  * attribute ::= token '=' argument
  * argument ::= extended  | quoted-string
- * token ::= ( alphanum | '_' | '-' )+ 
- * extended ::= ( alphanum | '_' | '-' | '.' )+ 
+ * token ::= ( alphanum | '_' | '-' )+
+ * extended ::= ( alphanum | '_' | '-' | '.' )+
  * </pre>
  * <p>
  * For example, the following is an example of a manifest element to the <code>Export-Package</code> header:
@@ -53,37 +53,37 @@
  * org.osgi.framework; specification-version="1.2"; another-attr="examplevalue"
  * </pre>
  * <p>
- * This manifest element has a value of <code>org.osgi.framework</code> and it has two attributes, 
- * <code>specification-version</code> and <code>another-attr</code>. 
+ * This manifest element has a value of <code>org.osgi.framework</code> and it has two attributes,
+ * <code>specification-version</code> and <code>another-attr</code>.
  * </p>
  * <p>
  * The following manifest element is an example of a manifest element that has multiple
- * components to its value: 
+ * components to its value:
  * </p>
  * <pre>
  * code1.jar;code2.jar;code3.jar;attr1=value1;attr2=value2;attr3=value3
  * </pre>
  * <p>
- * This manifest element has a value of <code>code1.jar;code2.jar;code3.jar</code>.  
+ * This manifest element has a value of <code>code1.jar;code2.jar;code3.jar</code>.
  * This is an example of a multiple component value.  This value has three
  * components: <code>code1.jar</code>, <code>code2.jar</code>, and <code>code3.jar</code>.
  * </p>
  * <p>
  * If components contain delimiter characters (e.g ';', ',' ':' "=") then it must be
- * a quoted string.  For example, the following is an example of a manifest element 
+ * a quoted string.  For example, the following is an example of a manifest element
  * that has multiple components containing delimiter characters:
  * </p>
  * <pre>
  * "component ; 1"; "component , 2"; "component : 3"; attr1=value1; attr2=value2; attr3=value3
  * </pre>
  * <p>
- * This manifest element has a value of <code>"component ; 1"; "component , 2"; "component : 3"</code>.  
+ * This manifest element has a value of <code>"component ; 1"; "component , 2"; "component : 3"</code>.
  * This value has three components: <code>"component ; 1"</code>, <code>"component , 2"</code>, <code>"component : 3"</code>.
  * </p>
  * <p>
  * This class is not intended to be subclassed by clients.
  * </p>
- * 
+ *
  * @since 3.0
  * @noextend This class is not intended to be subclassed by clients.
  */
@@ -119,15 +119,15 @@
 
 	/**
 	 * Returns the value of the manifest element.  The value returned is the
-	 * complete value up to the first attribute or directive.  For example, the 
-	 * following manifest element: 
+	 * complete value up to the first attribute or directive.  For example, the
+	 * following manifest element:
 	 * <pre>
 	 * test1.jar;test2.jar;test3.jar;selection-filter="(os.name=Windows XP)"
 	 * </pre>
 	 * <p>
 	 * This manifest element has a value of <code>test1.jar;test2.jar;test3.jar</code>
 	 * </p>
-	 * 
+	 *
 	 * @return the value of the manifest element.
 	 */
 	public String getValue() {
@@ -136,18 +136,18 @@
 
 	/**
 	 * Returns the value components of the manifest element. The value
-	 * components returned are the complete list of value components up to 
-	 * the first attribute or directive.  
-	 * For example, the following manifest element: 
+	 * components returned are the complete list of value components up to
+	 * the first attribute or directive.
+	 * For example, the following manifest element:
 	 * <pre>
 	 * test1.jar;test2.jar;test3.jar;selection-filter="(os.name=Windows XP)"
 	 * </pre>
 	 * <p>
-	 * This manifest element has the value components array 
+	 * This manifest element has the value components array
 	 * <code>{ "test1.jar", "test2.jar", "test3.jar" }</code>
 	 * Each value component is delemited by a semi-colon (<code>';'</code>).
 	 * </p>
-	 * 
+	 *
 	 * @return the String[] of value components
 	 */
 	public String[] getValueComponents() {
@@ -155,9 +155,9 @@
 	}
 
 	/**
-	 * Returns the value for the specified attribute or <code>null</code> if it does 
-	 * not exist.  If the attribute has multiple values specified then the last value 
-	 * specified is returned. For example the following manifest element: 
+	 * Returns the value for the specified attribute or <code>null</code> if it does
+	 * not exist.  If the attribute has multiple values specified then the last value
+	 * specified is returned. For example the following manifest element:
 	 * <pre>
 	 * elementvalue; myattr="value1"; myattr="value2"
 	 * </pre>
@@ -166,7 +166,7 @@
 	 * will be returned because it is the last value specified for the attribute
 	 * <code>myattr</code>.
 	 * </p>
-	 * 
+	 *
 	 * @param key the attribute key to return the value for
 	 * @return the attribute value or <code>null</code>
 	 */
@@ -175,11 +175,11 @@
 	}
 
 	/**
-	 * Returns an array of values for the specified attribute or 
+	 * Returns an array of values for the specified attribute or
 	 * <code>null</code> if the attribute does not exist.
-	 * 
+	 *
 	 * @param key the attribute key to return the values for
-	 * @return the array of attribute values or <code>null</code> 
+	 * @return the array of attribute values or <code>null</code>
 	 * @see #getAttribute(String)
 	 */
 	public String[] getAttributes(String key) {
@@ -189,7 +189,7 @@
 	/**
 	 * Returns an enumeration of attribute keys for this manifest element or
 	 * <code>null</code> if none exist.
-	 * 
+	 *
 	 * @return the enumeration of attribute keys or null if none exist.
 	 */
 	public Enumeration<String> getKeys() {
@@ -198,7 +198,7 @@
 
 	/**
 	 * Add an attribute to this manifest element.
-	 * 
+	 *
 	 * @param key the key of the attribute
 	 * @param value the value of the attribute
 	 */
@@ -207,9 +207,9 @@
 	}
 
 	/**
-	 * Returns the value for the specified directive or <code>null</code> if it 
-	 * does not exist.  If the directive has multiple values specified then the 
-	 * last value specified is returned. For example the following manifest element: 
+	 * Returns the value for the specified directive or <code>null</code> if it
+	 * does not exist.  If the directive has multiple values specified then the
+	 * last value specified is returned. For example the following manifest element:
 	 * <pre>
 	 * elementvalue; mydir:="value1"; mydir:="value2"
 	 * </pre>
@@ -217,7 +217,7 @@
 	 * specifies two values for the directive key <code>mydir</code>.  In this case <code>value2</code>
 	 * will be returned because it is the last value specified for the directive <code>mydir</code>.
 	 * </p>
-	 * 
+	 *
 	 * @param key the directive key to return the value for
 	 * @return the directive value or <code>null</code>
 	 */
@@ -226,9 +226,9 @@
 	}
 
 	/**
-	 * Returns an array of string values for the specified directives or 
+	 * Returns an array of string values for the specified directives or
 	 * <code>null</code> if it does not exist.
-	 * 
+	 *
 	 * @param key the directive key to return the values for
 	 * @return the array of directive values or <code>null</code>
 	 * @see #getDirective(String)
@@ -240,7 +240,7 @@
 	/**
 	 * Return an enumeration of directive keys for this manifest element or
 	 * <code>null</code> if there are none.
-	 * 
+	 *
 	 * @return the enumeration of directive keys or <code>null</code>
 	 */
 	public Enumeration<String> getDirectiveKeys() {
@@ -249,7 +249,7 @@
 
 	/**
 	 * Add a directive to this manifest element.
-	 * 
+	 *
 	 * @param key the key of the attribute
 	 * @param value the value of the attribute
 	 */
@@ -296,7 +296,7 @@
 	}
 
 	/*
-	 * Return an enumeration of table keys for the specified table. 
+	 * Return an enumeration of table keys for the specified table.
 	 */
 	private Enumeration<String> getTableKeys(HashMap<String, Object> table) {
 		if (table == null)
@@ -335,7 +335,7 @@
 	/**
 	 * Parses a manifest header value into an array of ManifestElements.  Each
 	 * ManifestElement returned will have a non-null value returned by getValue().
-	 * 
+	 *
 	 * @param header the header name to parse.  This is only specified to provide error messages
 	 * 	when the header value is invalid.
 	 * @param value the header value to parse.
@@ -453,7 +453,7 @@
 
 	/**
 	 * Returns the result of converting a list of comma-separated tokens into an array.
-	 * 
+	 *
 	 * @return the array of string tokens or <code>null</code> if there are none
 	 * @param stringList the initial comma-separated string
 	 */
@@ -465,7 +465,7 @@
 	/**
 	 * Returns the result of converting a list of tokens into an array.  The tokens
 	 * are split using the specified separator.
-	 * 
+	 *
 	 * @return the array of string tokens.  If there are none then an empty array
 	 * is returned.
 	 * @param stringList the initial string list
@@ -488,7 +488,7 @@
 	/**
 	 * Parses a bundle manifest and puts the header/value pairs into the supplied Map.
 	 * Only the main section of the manifest is parsed (up to the first blank line).  All
-	 * other sections are ignored.  If a header is duplicated then only the last  
+	 * other sections are ignored.  If a header is duplicated then only the last
 	 * value is stored in the map.
 	 * <p>
 	 * The supplied input stream is consumed by this method and will be closed.
@@ -547,7 +547,7 @@
 		// This method reads all the line continuations into a single string.
 		// Care must be taken for cases where double byte UTF characters are split
 		// across line continuations.
-		// This is why BufferedReader.readLine is not used here.  We must process the 
+		// This is why BufferedReader.readLine is not used here.  We must process the
 		// CR LF chars ourselves
 		lineLoop: while (true) {
 			int c = input.read();
diff --git a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/util/NLS.java b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/util/NLS.java
index 7d64991..a0c62b1 100644
--- a/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/util/NLS.java
+++ b/bundles/org.eclipse.osgi/supplement/src/org/eclipse/osgi/util/NLS.java
@@ -7,7 +7,7 @@
  * https://www.eclipse.org/legal/epl-2.0/
  *
  * SPDX-License-Identifier: EPL-2.0
- * 
+ *
  * Contributors:
  *     IBM - Initial API and implementation
  *******************************************************************************/
@@ -35,7 +35,7 @@
  * <p>
  * The <code>#bind</code> methods perform string substitution and should be considered a
  * convenience and <em>not</em> a full substitute replacement for <code>MessageFormat#format</code>
- * method calls. 
+ * method calls.
  * </p>
  * <p>
  * Text appearing within curly braces in the given message, will be interpreted
@@ -54,7 +54,7 @@
  * <p>
  * Clients may subclass this type.
  * </p>
- * 
+ *
  * @since 3.1
  */
 public abstract class NLS {
@@ -93,11 +93,11 @@
 
 	/**
 	 * Bind the given message's substitution locations with the given string value.
-	 * 
+	 *
 	 * @param message the message to be manipulated
 	 * @param binding the object to be inserted into the message
 	 * @return the manipulated String
-	 * @throws IllegalArgumentException if the text appearing within curly braces in the given message does not map to an integer 
+	 * @throws IllegalArgumentException if the text appearing within curly braces in the given message does not map to an integer
 	 */
 	public static String bind(String message, Object binding) {
 		return internalBind(message, null, String.valueOf(binding), null);
@@ -105,7 +105,7 @@
 
 	/**
 	 * Bind the given message's substitution locations with the given string values.
-	 * 
+	 *
 	 * @param message the message to be manipulated
 	 * @param binding1 An object to be inserted into the message
 	 * @param binding2 A second object to be inserted into the message
@@ -118,7 +118,7 @@
 
 	/**
 	 * Bind the given message's substitution locations with the given string values.
-	 * 
+	 *
 	 * @param message the message to be manipulated
 	 * @param bindings An array of objects to be inserted into the message
 	 * @return the manipulated String
@@ -131,7 +131,7 @@
 	/**
 	 * Initialize the given class with the values from the message properties specified by the
 	 * base name.  The base name specifies a fully qualified base name to a message properties file,
-	 * including the package where the message properties file is located.  The class loader of the 
+	 * including the package where the message properties file is located.  The class loader of the
 	 * specified class will be used to load the message properties resources.
 	 * <p>
 	 * For example, if the locale is set to en_US and <code>org.eclipse.example.nls.messages</code>
@@ -143,7 +143,7 @@
 	 *   org/eclipse/example/nls/messages_en.properties
 	 *   org/eclipse/example/nls/messages.properties
 	 * </pre>
-	 * 
+	 *
 	 * @param baseName the base name of a fully qualified message properties file.
 	 * @param clazz the class where the constants will exist
 	 */
@@ -352,13 +352,13 @@
 	}
 
 	/*
-	 * The method adds a log entry based on the error message and exception. 
+	 * The method adds a log entry based on the error message and exception.
 	 * The output is written to the System.err.
-	 * 
+	 *
 	 * This method is only expected to be called if there is a problem in
-	 * the NLS mechanism. As a result, translation facility is not available 
+	 * the NLS mechanism. As a result, translation facility is not available
 	 * here and messages coming out of this log are generally not translated.
-	 * 
+	 *
 	 * @param severity - severity of the message (SEVERITY_ERROR or SEVERITY_WARNING)
 	 * @param message - message to log
 	 * @param e - exception to log
@@ -434,7 +434,7 @@
 			if ((field.getModifiers() & MOD_MASK) != MOD_EXPECTED)
 				return null;
 			try {
-				// Check to see if we are allowed to modify the field. If we aren't (for instance 
+				// Check to see if we are allowed to modify the field. If we aren't (for instance
 				// if the class is not public) then change the accessible attribute of the field
 				// before trying to set the value.
 				if (!isAccessible)
