204287
optimization for J2EEComponentClasspathUpdater.queueUpdate
diff --git a/plugins/org.eclipse.jst.j2ee/common/org/eclipse/jst/j2ee/internal/common/classpath/J2EEComponentClasspathUpdater.java b/plugins/org.eclipse.jst.j2ee/common/org/eclipse/jst/j2ee/internal/common/classpath/J2EEComponentClasspathUpdater.java
index 29166ad..af82e42 100644
--- a/plugins/org.eclipse.jst.j2ee/common/org/eclipse/jst/j2ee/internal/common/classpath/J2EEComponentClasspathUpdater.java
+++ b/plugins/org.eclipse.jst.j2ee/common/org/eclipse/jst/j2ee/internal/common/classpath/J2EEComponentClasspathUpdater.java
@@ -168,12 +168,6 @@
 
 	public void queueUpdateModule(IProject project) {
 		moduleUpdateJob.queueModule(project);
-		if (!isKnown(project)) {
-			IProject[] earProjects = J2EEProjectUtilities.getReferencingEARProjects(project);
-			for (int i = 0; i < earProjects.length; i++) {
-				moduleUpdateJob.queueEAR(earProjects[i]);
-			}
-		}
 		synchronized (this) {
 			if (pauseCount > 0) {
 				return;
@@ -242,6 +236,21 @@
 			return !earQueue.isEmpty() || !moduleQueue.isEmpty();
 		}
 
+		/**
+		 * Add referenced EARs from the queued modules into the EARs queue
+		 */
+		private void queueReferencingEars(Object[] projects) {
+			for (int p = 0; p < projects.length; p++) {
+				IProject project = (IProject) projects[p];
+				if (!isKnown(project)) {
+					IProject[] earProjects = J2EEProjectUtilities.getReferencingEARProjects(project);
+					for (int i = 0; i < earProjects.length; i++) {
+						queueEAR(earProjects[i]);
+					}
+				} 
+			}
+		}
+		
 		private void processEars() {
 			Object[] earProjects = earQueue.getListeners();
 			for (int i = 0; i < earProjects.length; i++) {
@@ -271,8 +280,7 @@
 			}
 		}
 
-		private void processModules() {
-			Object[] projects = moduleQueue.getListeners();
+		private void processModules(Object[] projects) {
 			for (int i = 0; i < projects.length; i++) {
 				IProject project = (IProject) projects[i];
 				// this block is for Web app Libraries
@@ -304,8 +312,10 @@
 
 				public void run() throws Exception {
 					try {
+						Object[] projects = moduleQueue.getListeners();
+						queueReferencingEars(projects);
 						processEars();
-						processModules();
+						processModules(projects);
 					} finally {
 						forceUpdateOnNextRun = false;
 					}