[jbosstools-commits] JBoss Tools SVN: r22820 - branches/jbosstools-3.1.x/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:23:09 EDT 2010
Author: scabanovich
Date: 2010-06-15 10:23:08 -0400 (Tue, 15 Jun 2010)
New Revision: 22820
Modified:
branches/jbosstools-3.1.x/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: branches/jbosstools-3.1.x/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/KbProject.java
===================================================================
--- branches/jbosstools-3.1.x/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)
+++ branches/jbosstools-3.1.x/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/KbProject.java 2010-06-15 14:23:08 UTC (rev 22820)
@@ -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