Bug 207847 Warnings in the log file when nl fragments for osgi bundles are present.
diff --git a/bundles/org.eclipse.osgi.tests/.classpath b/bundles/org.eclipse.osgi.tests/.classpath
index fb0c6a2..5a592fe 100644
--- a/bundles/org.eclipse.osgi.tests/.classpath
+++ b/bundles/org.eclipse.osgi.tests/.classpath
@@ -27,6 +27,12 @@
 	<classpathentry kind="src" output="bundle_tests/buddy.dependent.a" path="bundles_src/buddy.dependent.a"/>
 	<classpathentry kind="src" output="bundle_tests/buddy.dependent.a.test1" path="bundles_src/buddy.dependent.a.test1"/>
 	<classpathentry kind="src" output="bundle_tests/buddy.dependent.a.test2" path="bundles_src/buddy.dependent.a.test2"/>
+	<classpathentry kind="src" output="bundle_tests/test.fragment1" path="bundles_src/test.fragment1"/>
+	<classpathentry kind="src" output="bundle_tests/test.fragment2" path="bundles_src/test.fragment2"/>
+	<classpathentry kind="src" output="bundle_tests/test.fragment3" path="bundles_src/test.fragment3"/>
+	<classpathentry kind="src" output="bundle_tests/test.fragment4" path="bundles_src/test.fragment4"/>
+	<classpathentry kind="src" output="bundle_tests/test.fragment5" path="bundles_src/test.fragment5"/>
+
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
 	<classpathentry kind="output" path="bin"/>
diff --git a/bundles/org.eclipse.osgi.tests/build.properties b/bundles/org.eclipse.osgi.tests/build.properties
index eb1c251..917e81e 100644
--- a/bundles/org.eclipse.osgi.tests/build.properties
+++ b/bundles/org.eclipse.osgi.tests/build.properties
@@ -68,6 +68,16 @@
 manifest.bundle_tests/buddy.dependent.a.test1.jar = META-INF/MANIFEST.MF
 source.bundle_tests/buddy.dependent.a.test2.jar = bundles_src/buddy.dependent.a.test2/
 manifest.bundle_tests/buddy.dependent.a.test2.jar = META-INF/MANIFEST.MF
+source.bundle_tests/test.fragment1.jar = bundles_src/test.fragment1/
+manifest.bundle_tests/test.fragment1.jar = META-INF/MANIFEST.MF
+source.bundle_tests/test.fragment2.jar = bundles_src/test.fragment2/
+manifest.bundle_tests/test.fragment2.jar = META-INF/MANIFEST.MF
+source.bundle_tests/test.fragment3.jar = bundles_src/test.fragment3/
+manifest.bundle_tests/test.fragment3.jar = META-INF/MANIFEST.MF
+source.bundle_tests/test.fragment4.jar = bundles_src/test.fragment4/
+manifest.bundle_tests/test.fragment4.jar = META-INF/MANIFEST.MF
+source.bundle_tests/test.fragment5.jar = bundles_src/test.fragment5/
+manifest.bundle_tests/test.fragment5.jar = META-INF/MANIFEST.MF
 
 jars.compile.order = osgitests.jar,\
                      bundle_tests/test.jar,\
@@ -95,4 +105,10 @@
                      bundle_tests/buddy.registered.a.test2.jar,\
                      bundle_tests/buddy.dependent.a,\
                      bundle_tests/buddy.dependent.a.test1.jar,\
-                     bundle_tests/buddy.dependent.a.test2.jar
+                     bundle_tests/buddy.dependent.a.test2.jar,\
+                     bundle_tests/test.fragment1.jar,\
+                     bundle_tests/test.fragment2.jar,\
+                     bundle_tests/test.fragment3.jar,\
+                     bundle_tests/test.fragment4.jar,\
+                     bundle_tests/test.fragment5.jar
+                     
diff --git a/bundles/org.eclipse.osgi.tests/bundles_src/test.fragment1/META-INF/MANIFEST.MF b/bundles/org.eclipse.osgi.tests/bundles_src/test.fragment1/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..1b5383b
--- /dev/null
+++ b/bundles/org.eclipse.osgi.tests/bundles_src/test.fragment1/META-INF/MANIFEST.MF
@@ -0,0 +1,6 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: test.fragment1
+Bundle-SymbolicName: test.fragment1
+Bundle-Version: 1.0.0
+Fragment-Host: test1
diff --git a/bundles/org.eclipse.osgi.tests/bundles_src/test.fragment2/META-INF/MANIFEST.MF b/bundles/org.eclipse.osgi.tests/bundles_src/test.fragment2/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..06029a2
--- /dev/null
+++ b/bundles/org.eclipse.osgi.tests/bundles_src/test.fragment2/META-INF/MANIFEST.MF
@@ -0,0 +1,6 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: test.fragment2
+Bundle-SymbolicName: test.fragment2
+Bundle-Version: 1.0.0
+Fragment-Host: test1
diff --git a/bundles/org.eclipse.osgi.tests/bundles_src/test.fragment3/META-INF/MANIFEST.MF b/bundles/org.eclipse.osgi.tests/bundles_src/test.fragment3/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..5eb286e
--- /dev/null
+++ b/bundles/org.eclipse.osgi.tests/bundles_src/test.fragment3/META-INF/MANIFEST.MF
@@ -0,0 +1,6 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: test.fragment3
+Bundle-SymbolicName: test.fragment3
+Bundle-Version: 1.0.0
+Fragment-Host: test1
diff --git a/bundles/org.eclipse.osgi.tests/bundles_src/test.fragment4/META-INF/MANIFEST.MF b/bundles/org.eclipse.osgi.tests/bundles_src/test.fragment4/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..c0768c4
--- /dev/null
+++ b/bundles/org.eclipse.osgi.tests/bundles_src/test.fragment4/META-INF/MANIFEST.MF
@@ -0,0 +1,6 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: test.fragment4
+Bundle-SymbolicName: test.fragment4
+Bundle-Version: 1.0.0
+Fragment-Host: test1
diff --git a/bundles/org.eclipse.osgi.tests/bundles_src/test.fragment5/META-INF/MANIFEST.MF b/bundles/org.eclipse.osgi.tests/bundles_src/test.fragment5/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..8afa4a4
--- /dev/null
+++ b/bundles/org.eclipse.osgi.tests/bundles_src/test.fragment5/META-INF/MANIFEST.MF
@@ -0,0 +1,6 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: test.fragment5
+Bundle-SymbolicName: test.fragment5
+Bundle-Version: 1.0.0
+Fragment-Host: test1
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/bundles/ClassLoadingBundleTests.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/bundles/ClassLoadingBundleTests.java
index 6240826..67311bd 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/bundles/ClassLoadingBundleTests.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/bundles/ClassLoadingBundleTests.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2006 IBM Corporation and others.
+ * Copyright (c) 2006, 2009 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -536,6 +536,28 @@
 		assertEquals("stuff resource", "stuff classpath test2", readURL((URL) resourceURLs.get(3)));
 	}
 
+	public void testBug207847() throws BundleException {
+		Bundle test = installer.installBundle("test"); //$NON-NLS-1$
+		installer.resolveBundles(new Bundle[] {test});
+		test.start();
+
+		Bundle frag1 = installer.installBundle("test.fragment1"); //$NON-NLS-1$
+		Bundle frag2 = installer.installBundle("test.fragment2"); //$NON-NLS-1$
+		Bundle frag3 = installer.installBundle("test.fragment3"); //$NON-NLS-1$
+		Bundle frag4 = installer.installBundle("test.fragment4"); //$NON-NLS-1$
+		Bundle frag5 = installer.installBundle("test.fragment5"); //$NON-NLS-1$
+		installer.resolveBundles(new Bundle[] {frag1, frag2, frag3, frag4, frag5});
+
+		assertTrue("host is not resolved", (test.getState() & Bundle.ACTIVE) != 0); //$NON-NLS-1$
+		assertTrue("frag1 is not resolved", (frag1.getState() & Bundle.RESOLVED) != 0); //$NON-NLS-1$
+		assertTrue("frag2 is not resolved", (frag2.getState() & Bundle.RESOLVED) != 0); //$NON-NLS-1$
+		assertTrue("frag3 is not resolved", (frag3.getState() & Bundle.RESOLVED) != 0); //$NON-NLS-1$
+		assertTrue("frag4 is not resolved", (frag4.getState() & Bundle.RESOLVED) != 0); //$NON-NLS-1$
+		assertTrue("frag5 is not resolved", (frag5.getState() & Bundle.RESOLVED) != 0); //$NON-NLS-1$
+	}
+
+
+
 // TODO temporarily disable til we can debug the build test machine on Win XP
 //	public void testBuddyClassLoadingRegistered1() throws Exception{
 //		Bundle registeredA = installer.installBundle("buddy.registered.a");
diff --git a/bundles/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/PackageAdminImpl.java b/bundles/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/PackageAdminImpl.java
index b0365b0..964ee65 100644
--- a/bundles/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/PackageAdminImpl.java
+++ b/bundles/org.eclipse.osgi/core/framework/org/eclipse/osgi/framework/internal/core/PackageAdminImpl.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2003, 2007 IBM Corporation and others.
+ * Copyright (c) 2003, 2009 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -14,7 +14,7 @@
 import java.io.IOException;
 import java.security.AccessController;
 import java.security.PrivilegedAction;
-import java.util.ArrayList;
+import java.util.*;
 import org.eclipse.osgi.framework.adaptor.BundleClassLoader;
 import org.eclipse.osgi.framework.adaptor.BundleData;
 import org.eclipse.osgi.framework.debug.Debug;
@@ -338,6 +338,11 @@
 	}
 
 	private AbstractBundle[] applyDeltas(BundleDelta[] bundleDeltas) throws BundleException {
+		Arrays.sort(bundleDeltas, new Comparator() {
+			public int compare(Object delta0, Object delta1) {
+				return (int) (((BundleDelta) delta0).getBundle().getBundleId() - ((BundleDelta) delta1).getBundle().getBundleId());
+			}
+		});
 		ArrayList results = new ArrayList(bundleDeltas.length);
 		for (int i = 0; i < bundleDeltas.length; i++) {
 			int type = bundleDeltas[i].getType();