[jbosstools-commits] JBoss Tools SVN: r22944 - trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core.

jbosstools-commits at lists.jboss.org jbosstools-commits at lists.jboss.org
Wed Jun 23 08:32:17 EDT 2010


Author: scabanovich
Date: 2010-06-23 08:32:17 -0400 (Wed, 23 Jun 2010)
New Revision: 22944

Modified:
   trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamProject.java
Log:
https://jira.jboss.org/browse/JBIDE-6519

Modified: trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamProject.java
===================================================================
--- trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamProject.java	2010-06-23 12:08:39 UTC (rev 22943)
+++ trunk/seam/plugins/org.jboss.tools.seam.core/src/org/jboss/tools/seam/internal/core/SeamProject.java	2010-06-23 12:32:17 UTC (rev 22944)
@@ -1023,7 +1023,8 @@
 		}
 		return null;
 	}
-	
+
+	private Set<IPath> sourcesInRegistering = new HashSet<IPath>();
 	/**
 	 * 
 	 * @param ds
@@ -1033,21 +1034,35 @@
 	public void registerComponentsInDependentProjects(LoadedDeclarations ds, IPath source) throws CloneNotSupportedException {
 		if(usedBy.isEmpty()) return;
 		if(EclipseResourceUtil.isJar(source.toString())) return;
+
+		if(sourcesInRegistering.contains(source)) {
+			return;
+		}
+		synchronized (sourcesInRegistering) {
+			sourcesInRegistering.add(source);
+		}
 		
-		for (SeamProject p : usedBy) {
-			p.resolve();
-			LoadedDeclarations ds1 = new LoadedDeclarations();
-			for (ISeamNamespace n: ds.getNamespaces()) {
-				ds1.getNamespaces().add(n); //no need to clone, it is read-only.
+		try {
+			for (SeamProject p : usedBy) {
+				if(p.sourcesInRegistering.contains(source)) continue;
+				p.resolve();
+				LoadedDeclarations ds1 = new LoadedDeclarations();
+				for (ISeamNamespace n: ds.getNamespaces()) {
+					ds1.getNamespaces().add(n); //no need to clone, it is read-only.
+				}
+				for (ISeamComponentDeclaration d:  ds.getComponents()) {
+					ds1.getComponents().add(d.clone());
+				}
+				for (ISeamFactory f : ds.getFactories()) {
+					ds1.getFactories().add(f.clone());
+				}
+				ds1.getImports().addAll(ds.getImports());
+				p.registerComponents(ds1, source);
 			}
-			for (ISeamComponentDeclaration d:  ds.getComponents()) {
-				ds1.getComponents().add(d.clone());
+		} finally {
+			synchronized (sourcesInRegistering) {
+				sourcesInRegistering.remove(source);
 			}
-			for (ISeamFactory f : ds.getFactories()) {
-				ds1.getFactories().add(f.clone());
-			}
-			ds1.getImports().addAll(ds.getImports());
-			p.registerComponents(ds1, source);
 		}
 	}
 	



More information about the jbosstools-commits mailing list