[162103] Ensuring required stereotypes are automatically applied during migration.
diff --git a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/resource/UML22UMLResourceHandler.java b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/resource/UML22UMLResourceHandler.java
index 30cb65d..fba5cd0 100644
--- a/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/resource/UML22UMLResourceHandler.java
+++ b/plugins/org.eclipse.uml2.uml/src/org/eclipse/uml2/uml/resource/UML22UMLResourceHandler.java
@@ -8,7 +8,7 @@
  * Contributors:
  *   IBM - initial API and implementation
  * 
- * $Id: UML22UMLResourceHandler.java,v 1.26.2.4 2006/10/18 18:48:21 khussey Exp $
+ * $Id: UML22UMLResourceHandler.java,v 1.26.2.5 2006/11/17 19:33:23 khussey Exp $
  */
 package org.eclipse.uml2.uml.resource;
 
@@ -116,6 +116,7 @@
 import org.eclipse.uml2.uml.ValuePin;
 import org.eclipse.uml2.uml.ValueSpecification;
 import org.eclipse.uml2.uml.VisibilityKind;
+import org.eclipse.uml2.uml.internal.operations.ElementOperations;
 import org.eclipse.uml2.uml.util.UMLSwitch;
 import org.eclipse.uml2.uml.util.UMLUtil;
 
@@ -341,6 +342,8 @@
 		final Map sendEvents = new HashMap();
 		final Map receiveEvents = new HashMap();
 
+		final List packagesRequiringStereotypes = new ArrayList();
+
 		UMLSwitch umlSwitch = new UMLSwitch() {
 
 			public Object caseAction(Action action) {
@@ -1245,11 +1248,12 @@
 						Profile appliedProfile = profileApplication
 							.getAppliedProfile();
 
-						if (profileName == null) {
-							profileName = appliedProfile.getName();
-						}
-
 						if (appliedProfile != null) {
+
+							if (profileName == null) {
+								profileName = appliedProfile.getName();
+							}
+
 							EAnnotation eAnnotation = appliedProfile
 								.getEAnnotation(UMLPackage.eNS_URI);
 
@@ -1273,6 +1277,17 @@
 									}
 								}
 							}
+
+							org.eclipse.uml2.uml.Package applyingPackage = profileApplication
+								.getApplyingPackage();
+
+							if (applyingPackage != null
+								&& !appliedProfile.getOwnedExtensions(true)
+									.isEmpty()) {
+
+								packagesRequiringStereotypes
+									.add(applyingPackage);
+							}
 						}
 					}
 
@@ -1763,5 +1778,11 @@
 		for (Iterator atr = annotationsToRemove.iterator(); atr.hasNext();) {
 			((EAnnotation) atr.next()).setEModelElement(null);
 		}
+
+		for (Iterator prs = packagesRequiringStereotypes.iterator(); prs
+			.hasNext();) {
+
+			ElementOperations.applyAllRequiredStereotypes((Element) prs.next());
+		}
 	}
 }