diff options
author | nitind | 2005-02-17 23:57:12 +0000 |
---|---|---|
committer | nitind | 2005-02-17 23:57:12 +0000 |
commit | 6a66b71b5e046992db8a91fad056fcc7de515839 (patch) | |
tree | 256a0e31b1280ee3946fa66e709a1b860b756371 | |
parent | 6ec70159d00a1317f07691b56633f88319051eb8 (diff) | |
download | webtools.sourceediting-6a66b71b5e046992db8a91fad056fcc7de515839.tar.gz webtools.sourceediting-6a66b71b5e046992db8a91fad056fcc7de515839.tar.xz webtools.sourceediting-6a66b71b5e046992db8a91fad056fcc7de515839.zip |
handle deletions during PREnotification
-rw-r--r-- | bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/contentmodel/TaglibIndex.java | 147 |
1 files changed, 106 insertions, 41 deletions
diff --git a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/contentmodel/TaglibIndex.java b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/contentmodel/TaglibIndex.java index b4462fedcf..ec491a8462 100644 --- a/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/contentmodel/TaglibIndex.java +++ b/bundles/org.eclipse.jst.jsp.core/src/org/eclipse/jst/jsp/core/internal/contentmodel/TaglibIndex.java @@ -113,66 +113,131 @@ public class TaglibIndex { class ResourceChangeListener implements IResourceChangeListener { public void resourceChanged(IResourceChangeEvent event) { - try { - // pair deltas with projects - IResourceDelta[] deltas = new IResourceDelta[]{event.getDelta()}; - IProject[] projects = null; - - if (deltas != null && deltas.length > 0) { - IResource resource = null; - if (deltas[0] != null) { - resource = deltas[0].getResource(); - } - else { - resource = event.getResource(); - } + switch (event.getType()) { + case IResourceChangeEvent.PRE_CLOSE : + case IResourceChangeEvent.PRE_DELETE : { + try { + // pair deltas with projects + IResourceDelta[] deltas = new IResourceDelta[]{event.getDelta()}; + IProject[] projects = null; - if (resource != null) { - if (resource.getType() == IResource.ROOT) { - deltas = deltas[0].getAffectedChildren(); - projects = new IProject[deltas.length]; - for (int i = 0; i < deltas.length; i++) { - if (deltas[i].getResource().getType() == IResource.PROJECT) { - projects[i] = (IProject) deltas[i].getResource(); - } - } - } - else { - projects = new IProject[1]; - if (resource.getType() != IResource.PROJECT) { - projects[0] = resource.getProject(); + if (deltas != null && deltas.length > 0) { + IResource resource = null; + if (deltas[0] != null) { + resource = deltas[0].getResource(); } else { - projects[0] = (IProject) resource; + resource = event.getResource(); } - } - } - for (int i = 0; i < projects.length; i++) { - try { - if (deltas[i] != null) { - ProjectDescription description = createDescription(projects[i]); - deltas[i].accept(description.getVisitor()); + + if (resource != null) { + if (resource.getType() == IResource.ROOT) { + deltas = deltas[0].getAffectedChildren(); + projects = new IProject[deltas.length]; + for (int i = 0; i < deltas.length; i++) { + if (deltas[i].getResource().getType() == IResource.PROJECT) { + projects[i] = (IProject) deltas[i].getResource(); + } + } + } + else { + projects = new IProject[1]; + if (resource.getType() != IResource.PROJECT) { + projects[0] = resource.getProject(); + } + else { + projects[0] = (IProject) resource; + } + } } - if (!projects[i].isAccessible()) { + for (int i = 0; i < projects.length; i++) { + if (_debugIndexCreation) { + System.out.println("TaglibIndex noticed " + projects[i].getName() + " is about to be deleted/closed"); + } ProjectDescription description = (ProjectDescription) fProjectDescriptions.remove(projects[i]); if (description != null) { + if (_debugIndexCreation) { + System.out.println("removing index of " + description.fProject.getName()); + } description.clear(); } } } - catch (CoreException e) { - Logger.logException(e); + } + catch (Exception e) { + Logger.logException("Exception while processing resource deletion", e); //$NON-NLS-1$ + } + } + case IResourceChangeEvent.POST_CHANGE : { + try { + // pair deltas with projects + IResourceDelta[] deltas = new IResourceDelta[]{event.getDelta()}; + IProject[] projects = null; + + if (deltas != null && deltas.length > 0) { + IResource resource = null; + if (deltas[0] != null) { + resource = deltas[0].getResource(); + } + else { + resource = event.getResource(); + } + + if (resource != null) { + if (resource.getType() == IResource.ROOT) { + deltas = deltas[0].getAffectedChildren(); + projects = new IProject[deltas.length]; + for (int i = 0; i < deltas.length; i++) { + if (deltas[i].getResource().getType() == IResource.PROJECT) { + projects[i] = (IProject) deltas[i].getResource(); + } + } + } + else { + projects = new IProject[1]; + if (resource.getType() != IResource.PROJECT) { + projects[0] = resource.getProject(); + } + else { + projects[0] = (IProject) resource; + } + } + } + for (int i = 0; i < projects.length; i++) { + try { + if (deltas[i] != null && deltas[i].getKind() != IResourceDelta.REMOVED && projects[i].isAccessible()) { + ProjectDescription description = createDescription(projects[i]); + deltas[i].accept(description.getVisitor()); + } + if (!projects[i].isAccessible() || (deltas[i] != null && deltas[i].getKind() == IResourceDelta.REMOVED)) { + if (_debugIndexCreation) { + System.out.println("TaglibIndex noticed " + projects[i].getName() + " is no longer accessible"); + } + ProjectDescription description = (ProjectDescription) fProjectDescriptions.remove(projects[i]); + if (description != null) { + if (_debugIndexCreation) { + System.out.println("removing index of " + description.fProject.getName()); + } + description.clear(); + } + } + } + catch (CoreException e) { + Logger.logException(e); + } + } } } + catch (Exception e) { + Logger.logException("Exception while processing resource change", e); //$NON-NLS-1$ + } } } - catch (Exception e) { - Logger.logException("Exception while processing resource change", e); //$NON-NLS-1$ - } } } static final boolean _debugChangeListener = false; + static boolean _debugIndexCreation = "true".equalsIgnoreCase(Platform.getDebugOption("org.eclipse.jst.jsp.core/taglib/indexcreation")); static final boolean _debugResolution = "true".equals(Platform.getDebugOption("org.eclipse.jst.jsp.core/taglib/resolve")); static TaglibIndex _instance; |