Author: scabanovich
Date: 2010-02-03 10:11:51 -0500 (Wed, 03 Feb 2010)
New Revision: 20102
Modified:
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/KbProjectFactory.java
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/scanner/ClassPathMonitor.java
Log:
https://jira.jboss.org/jira/browse/JBIDE-5765
Modified:
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/KbProjectFactory.java
===================================================================
---
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/KbProjectFactory.java 2010-02-03
15:06:56 UTC (rev 20101)
+++
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/KbProjectFactory.java 2010-02-03
15:11:51 UTC (rev 20102)
@@ -80,7 +80,9 @@
}
underConstruction.add(project);
final KbProject mock = new KbProject();
+ mock.setMock();
mock.setProject(project);
+ mockProjectStore.put(project, mock);
class KbBuilderEx extends KbBuilder {
protected KbProject getKbProject() {
return mock;
@@ -100,7 +102,6 @@
KbBuilderEx builder = new KbBuilderEx();
setProjectToBuilder(builder, project);
builder.build();
- mockProjectStore.put(project, mock);
underConstruction.remove(project);
// long dt = System.currentTimeMillis() - t0;
// System.out.println("build end " + dt);
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-02-03
15:06:56 UTC (rev 20101)
+++
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/KbProject.java 2010-02-03
15:11:51 UTC (rev 20102)
@@ -62,6 +62,8 @@
*/
public class KbProject extends KbObject implements IKbProject {
IProject project;
+
+ boolean isMock = false;
ClassPathMonitor classPath = new ClassPathMonitor(this);
@@ -80,6 +82,10 @@
ProjectValidationContext validationContext;
public KbProject() {}
+
+ public void setMock() {
+ isMock = true;
+ }
/*
* (non-Javadoc)
* @see org.jboss.tools.jst.web.kb.IKbProject#getTagLibraries()
@@ -192,7 +198,10 @@
if(!dependsOn.contains(p)) return;
p.usedBy.remove(this);
dependsOn.remove(p);
- IPath[] ps = sourcePaths2.keySet().toArray(new IPath[0]);
+ IPath[] ps = null;
+ synchronized(sourcePaths2) {
+ ps = sourcePaths2.keySet().toArray(new IPath[0]);
+ }
for (int i = 0; i < ps.length; i++) {
IPath pth = ps[i];
if(p.getSourcePath().isPrefixOf(pth) || (p.isPathLoaded(pth) &&
!EclipseResourceUtil.isJar(pth.toString()))) {
@@ -278,7 +287,10 @@
}
classPath.clean();
postponeFiring();
- IPath[] ps = sourcePaths2.keySet().toArray(new IPath[0]);
+ IPath[] ps = null;
+ synchronized(sourcePaths2) {
+ ps = sourcePaths2.keySet().toArray(new IPath[0]);
+ }
for (int i = 0; i < ps.length; i++) {
pathRemoved(ps[i]);
}
@@ -303,7 +315,9 @@
statistics = new ArrayList<Long>();
classPath = new ClassPathMonitor(this);
// sourcePaths.clear();
- sourcePaths2.clear();
+ synchronized(sourcePaths2) {
+ sourcePaths2.clear();
+ }
isStorageResolved = false;
dependsOn.clear();
usedBy.clear();
@@ -379,10 +393,15 @@
if(p == null || p.trim().length() == 0) continue;
IProject project = ResourcesPlugin.getWorkspace().getRoot().getProject(p);
if(project == null || !project.isAccessible()) continue;
+ checkKBBuilderInstalled(project);
KbProject sp = (KbProject)KbProjectFactory.getKbProject(project, false);
if(sp != null) {
- dependsOn.add(sp);
- sp.addDependentKbProject(this);
+ if(sp.isMock) {
+ addKbProject(sp);
+ } else {
+ dependsOn.add(sp);
+ sp.addDependentKbProject(this);
+ }
}
}
}
@@ -474,6 +493,7 @@
private void storeSourcePaths2(Element root) {
Properties context = new Properties();
Element sourcePathsElement = XMLUtilities.createElement(root, "paths");
//$NON-NLS-1$
+ synchronized(sourcePaths2) {
for (IPath path : sourcePaths2.keySet()) {
IFile f = ResourcesPlugin.getWorkspace().getRoot().getFile(path);
if(f != null && f.exists() && f.getProject() != project) {
@@ -495,6 +515,7 @@
}
}
}
+ }
}
/*
@@ -599,11 +620,15 @@
pathRemoved(source);
if(EclipseResourceUtil.isJar(source.toString())) {
// if(!sourcePaths.contains(source)) sourcePaths.add(source);
- sourcePaths2.put(source, ds);
+ synchronized(sourcePaths2) {
+ sourcePaths2.put(source, ds);
+ }
}
return;
}
- sourcePaths2.put(source, ds);
+ synchronized(sourcePaths2) {
+ sourcePaths2.put(source, ds);
+ }
Map<Object,ITagLibrary> currentLibraries = findLibraryDeclarations(source);
List<Change> addedLibraries = null;
@@ -671,7 +696,9 @@
*/
public void pathRemoved(IPath source) {
if(!sourcePaths2.containsKey(source)) return;
- sourcePaths2.remove(source);
+ synchronized (sourcePaths2) {
+ sourcePaths2.remove(source);
+ }
List<Change> changes = null;
Modified:
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/scanner/ClassPathMonitor.java
===================================================================
---
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/scanner/ClassPathMonitor.java 2010-02-03
15:06:56 UTC (rev 20101)
+++
trunk/jst/plugins/org.jboss.tools.jst.web.kb/src/org/jboss/tools/jst/web/kb/internal/scanner/ClassPathMonitor.java 2010-02-03
15:11:51 UTC (rev 20102)
@@ -163,6 +163,7 @@
if(es[i].getEntryKind() == IClasspathEntry.CPE_PROJECT) {
IProject p =
ResourcesPlugin.getWorkspace().getRoot().getProject(es[i].getPath().lastSegment());
if(p == null || !p.isAccessible()) continue;
+ KbProject.checkKBBuilderInstalled(p);
IKbProject sp = KbProjectFactory.getKbProject(p, false);
if(sp != null) list.add((KbProject)sp);
}