[jbosstools-commits] JBoss Tools SVN: r22819 - trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal.

jbosstools-commits at lists.jboss.org jbosstools-commits at lists.jboss.org
Tue Jun 15 10:20:23 EDT 2010


Author: scabanovich
Date: 2010-06-15 10:20:23 -0400 (Tue, 15 Jun 2010)
New Revision: 22819

Modified:
   trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/KbProject.java
Log:
https://jira.jboss.org/browse/JBIDE-6372

Modified: trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/KbProject.java
===================================================================
--- trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/KbProject.java	2010-06-15 13:57:44 UTC (rev 22818)
+++ trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/KbProject.java	2010-06-15 14:20:23 UTC (rev 22819)
@@ -156,7 +156,7 @@
 	 */
 	public void addKbProject(KbProject p) {
 		if(dependsOn.contains(p)) return;
-		dependsOn.add(p);
+		addUsedKbProject(p);
 		p.addDependentKbProject(this);
 		if(!p.isStorageResolved) {
 			p.resolve();
@@ -187,17 +187,49 @@
 	 * @param p
 	 */
 	public void addDependentKbProject(KbProject p) {
-		usedBy.add(p);
+		synchronized (usedBy) {
+			usedBy.add(p);
+		}
 	}
 
+	void removeDependentKbProject(KbProject p) {
+		synchronized (usedBy) {
+			usedBy.remove(p);
+		}
+	}
+	
+	KbProject[] getDependentKbProjects() {
+		synchronized (usedBy) {
+			return usedBy.toArray(new KbProject[0]);
+		}
+	}
+
+	void addUsedKbProject(KbProject p) {
+		synchronized (dependsOn) {
+			dependsOn.add(p);
+		}
+	}
+
+	void removeUsedKbProject(KbProject p) {
+		synchronized (dependsOn) {
+			dependsOn.remove(p);
+		}
+	}
+	
+	KbProject[] getUsedKbProjects() {
+		synchronized (dependsOn) {
+			return dependsOn.toArray(new KbProject[0]);
+		}
+	}
+
 	/**
 	 * 
 	 * @param p
 	 */
 	public void removeKbProject(KbProject p) {
 		if(!dependsOn.contains(p)) return;
-		p.usedBy.remove(this);
-		dependsOn.remove(p);
+		p.removeDependentKbProject(this);
+		removeUsedKbProject(p);
 		IPath[] ps = null;
 		synchronized(sourcePaths2) {
 			ps = sourcePaths2.keySet().toArray(new IPath[0]);
@@ -319,8 +351,12 @@
 			sourcePaths2.clear();
 		}
 		isStorageResolved = false;
-		dependsOn.clear();
-		usedBy.clear();
+		synchronized (dependsOn) {
+			dependsOn.clear();
+		}
+		synchronized (usedBy) {
+			usedBy.clear();
+		}
 		libraries.clear();
 		
 		long begin = System.currentTimeMillis();
@@ -399,7 +435,7 @@
 					if(sp.isMock) {
 						addKbProject(sp);
 					} else {
-						dependsOn.add(sp);
+						addUsedKbProject(sp);
 						sp.addDependentKbProject(this);
 					}
 				}
@@ -415,7 +451,9 @@
 				IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(p);
 				if(project == null || !project.isAccessible()) continue;
 				KbProject sp = (KbProject)KbProjectFactory.getKbProject(project, false);
-				if(sp != null) usedBy.add(sp);
+				if(sp != null) {
+					addDependentKbProject(sp);
+				}
 			}
 		}
 	
@@ -523,13 +561,15 @@
 	 */
 	private void storeProjectDependencies(Element root) {
 		Element dependsOnElement = XMLUtilities.createElement(root, "depends-on-projects"); //$NON-NLS-1$
-		for (IKbProject p : dependsOn) {
+		KbProject[] ds = getUsedKbProjects();
+		for (IKbProject p : ds) {
 			if(!p.getProject().isAccessible()) continue;
 			Element pathElement = XMLUtilities.createElement(dependsOnElement, "project"); //$NON-NLS-1$
 			pathElement.setAttribute("name", p.getProject().getName()); //$NON-NLS-1$
 		}
 		Element usedElement = XMLUtilities.createElement(root, "used-by-projects"); //$NON-NLS-1$
-		for (IKbProject p : usedBy) {
+		KbProject[] ps = getDependentKbProjects();
+		for (IKbProject p : ps) {
 			if(!p.getProject().isAccessible()) continue;
 			Element pathElement = XMLUtilities.createElement(usedElement, "project"); //$NON-NLS-1$
 			pathElement.setAttribute("name", p.getProject().getName()); //$NON-NLS-1$
@@ -682,7 +722,8 @@
 		if(usedBy.isEmpty()) return;
 		if(EclipseResourceUtil.isJar(source.toString())) return;
 		
-		for (KbProject p : usedBy) {
+		KbProject[] ps = getDependentKbProjects();
+		for (KbProject p : ps) {
 			p.resolve();
 			LoadedDeclarations ds1 = new LoadedDeclarations();
 			for (ITagLibrary f : ds.getLibraries()) {
@@ -722,7 +763,8 @@
 		if(usedBy.isEmpty()) return;
 		if(EclipseResourceUtil.isJar(source.toString())) return;
 		
-		for (KbProject p : usedBy) {
+		KbProject[] ps = getDependentKbProjects();
+		for (KbProject p : ps) {
 			p.resolve();
 			p.pathRemoved(source);
 		}
@@ -818,13 +860,11 @@
 			// Find existing KBNATURE problem marker and kill it if exists
 			IMarker[] markers = getOwnedMarkers(project);
 			if (markers != null && markers.length > 0) {
-				for (IMarker m : markers) {
-					try {
-						project.deleteMarkers(KB_PROBLEM_MARKER_TYPE, true, IResource.DEPTH_ONE);
-						project.setPersistentProperty(KbProjectFactory.NATURE_MOCK, null);
-					} catch (CoreException ex) {
-						WebKbPlugin.getDefault().logError(ex);
-					}
+				try {
+					project.deleteMarkers(KB_PROBLEM_MARKER_TYPE, true, IResource.DEPTH_ONE);
+					project.setPersistentProperty(KbProjectFactory.NATURE_MOCK, null);
+				} catch (CoreException ex) {
+					WebKbPlugin.getDefault().logError(ex);
 				}
 			}
 			return true;



More information about the jbosstools-commits mailing list