From 8b8959e09953b7ebe2983e1388a82e87b49e9ff4 Mon Sep 17 00:00:00 2001 From: David Inglis Date: Fri, 26 Mar 2004 21:53:23 +0000 Subject: [PATCH] fixed NPE on reorder --- core/org.eclipse.cdt.core/ChangeLog | 6 ++ .../internal/core/model/PathEntryManager.java | 97 ++++++++++--------- 2 files changed, 56 insertions(+), 47 deletions(-) diff --git a/core/org.eclipse.cdt.core/ChangeLog b/core/org.eclipse.cdt.core/ChangeLog index fe9e0247abc..b39522d232c 100644 --- a/core/org.eclipse.cdt.core/ChangeLog +++ b/core/org.eclipse.cdt.core/ChangeLog @@ -1,3 +1,9 @@ +2004-03-26 David Inglis + + Fixed NPE on path reorder + + * model/org/eclipse/cdt/internal/core/model/PathEntryManager.java + 2004-03-26 David Inglis Refactor to move exclusion matching methods out into public class. diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/PathEntryManager.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/PathEntryManager.java index 180f314c0fe..f0ecc6d228d 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/PathEntryManager.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/PathEntryManager.java @@ -59,6 +59,7 @@ import org.w3c.dom.NodeList; * */ public class PathEntryManager implements ICDescriptorListener { + static String CONTAINER_INITIALIZER_EXTPOINT_ID = "pathEntryContainerInitializer"; //$NON-NLS-1$ static String PATH_ENTRY = "pathentry"; //$NON-NLS-1$ static String PATH_ENTRY_ID = "org.eclipse.cdt.core.pathentry"; //$NON-NLS-1$ @@ -76,8 +77,7 @@ public class PathEntryManager implements ICDescriptorListener { static String VALUE_TRUE = "true"; //$NON-NLS-1$ final static IPathEntry[] EMPTY = {}; /** - * An empty array of strings indicating that a project doesn't have any - * prerequesite projects. + * An empty array of strings indicating that a project doesn't have any prerequesite projects. */ static final String[] NO_PREREQUISITES = new String[0]; /** @@ -168,7 +168,7 @@ public class PathEntryManager implements ICDescriptorListener { boolean foundSource = false; boolean foundOutput = false; for (int i = 0; i < pathEntries.size(); i++) { - IPathEntry rawEntry = (IPathEntry)pathEntries.get(i); + IPathEntry rawEntry = (IPathEntry) pathEntries.get(i); if (rawEntry.getEntryKind() == IPathEntry.CDT_SOURCE) { foundSource = true; } @@ -239,6 +239,7 @@ public class PathEntryManager implements ICDescriptorListener { // trigger model refresh try { CoreModel.run(new IWorkspaceRunnable() { + public void run(IProgressMonitor progressMonitor) throws CoreException { boolean shouldFire = false; CModelManager mgr = CModelManager.getDefault(); @@ -292,6 +293,7 @@ public class PathEntryManager implements ICDescriptorListener { // initializer would be // causing some grief Platform.run(new ISafeRunnable() { + public void handleException(Throwable exception) { //Util.log(exception, "Exception occurred in // container initializer: "+initializer); @@ -317,19 +319,16 @@ public class PathEntryManager implements ICDescriptorListener { } /** - * Helper method finding the container initializer registered for a given - * container ID or null if none was found while iterating - * over the contributions to extension point to the extension point + * Helper method finding the container initializer registered for a given container ID or null if none was found + * while iterating over the contributions to extension point to the extension point * "org.eclipse.cdt.core.PathEntryContainerInitializer". *

- * A containerID is the first segment of any container path, used to - * identify the registered container initializer. + * A containerID is the first segment of any container path, used to identify the registered container initializer. *

* * @param containerID - * a containerID identifying a registered initializer - * @return PathEntryContainerInitializer - the registered container - * initializer or null if none was found. + * @return PathEntryContainerInitializer - the registered container initializer or null if none was found. */ public PathEntryContainerInitializer getPathEntryContainerInitializer(String containerID) { Plugin core = CCorePlugin.getDefault(); @@ -491,39 +490,41 @@ public class PathEntryManager implements ICDescriptorListener { * return a delta, with the specified change flag. */ protected ICElementDelta makePathEntryDelta(ICProject cproject, IPathEntry entry, boolean removed) { - int kind = entry.getEntryKind(); ICElement celement = null; int flag = ICElementDelta.F_PATHENTRY_REORDER; if (entry == null) { celement = cproject; flag = ICElementDelta.F_PATHENTRY_REORDER; - } else if (kind == IPathEntry.CDT_SOURCE) { - ISourceEntry source = (ISourceEntry) entry; - IPath path = source.getPath(); - celement = CoreModel.getDefault().create(path); - flag = (removed) ? ICElementDelta.F_REMOVED_PATHENTRY_SOURCE : ICElementDelta.F_ADDED_PATHENTRY_SOURCE; - } else if (kind == IPathEntry.CDT_LIBRARY) { - ILibraryEntry lib = (ILibraryEntry) entry; - celement = CProject.getLibraryReference(cproject, null, lib); - flag = (removed) ? ICElementDelta.F_ADDED_PATHENTRY_LIBRARY : ICElementDelta.F_REMOVED_PATHENTRY_LIBRARY; - } else if (kind == IPathEntry.CDT_PROJECT) { - //IProjectEntry pentry = (IProjectEntry) entry; - celement = cproject; - flag = ICElementDelta.F_CHANGED_PATHENTRY_PROJECT; - } else if (kind == IPathEntry.CDT_INCLUDE) { - IIncludeEntry include = (IIncludeEntry) entry; - IPath path = include.getPath(); - celement = CoreModel.getDefault().create(path); - flag = ICElementDelta.F_CHANGED_PATHENTRY_INCLUDE; - } else if (kind == IPathEntry.CDT_MACRO) { - IMacroEntry macro = (IMacroEntry) entry; - IPath path = macro.getPath(); - celement = CoreModel.getDefault().create(path); - flag = ICElementDelta.F_CHANGED_PATHENTRY_MACRO; - } else if (kind == IPathEntry.CDT_CONTAINER) { - //IContainerEntry container = (IContainerEntry) entry; - //celement = cproject; - // SHOULD NOT BE HERE Container are resolved. + } else { + int kind = entry.getEntryKind(); + if (kind == IPathEntry.CDT_SOURCE) { + ISourceEntry source = (ISourceEntry) entry; + IPath path = source.getPath(); + celement = CoreModel.getDefault().create(path); + flag = (removed) ? ICElementDelta.F_REMOVED_PATHENTRY_SOURCE : ICElementDelta.F_ADDED_PATHENTRY_SOURCE; + } else if (kind == IPathEntry.CDT_LIBRARY) { + ILibraryEntry lib = (ILibraryEntry) entry; + celement = CProject.getLibraryReference(cproject, null, lib); + flag = (removed) ? ICElementDelta.F_ADDED_PATHENTRY_LIBRARY : ICElementDelta.F_REMOVED_PATHENTRY_LIBRARY; + } else if (kind == IPathEntry.CDT_PROJECT) { + //IProjectEntry pentry = (IProjectEntry) entry; + celement = cproject; + flag = ICElementDelta.F_CHANGED_PATHENTRY_PROJECT; + } else if (kind == IPathEntry.CDT_INCLUDE) { + IIncludeEntry include = (IIncludeEntry) entry; + IPath path = include.getPath(); + celement = CoreModel.getDefault().create(path); + flag = ICElementDelta.F_CHANGED_PATHENTRY_INCLUDE; + } else if (kind == IPathEntry.CDT_MACRO) { + IMacroEntry macro = (IMacroEntry) entry; + IPath path = macro.getPath(); + celement = CoreModel.getDefault().create(path); + flag = ICElementDelta.F_CHANGED_PATHENTRY_MACRO; + } else if (kind == IPathEntry.CDT_CONTAINER) { + //IContainerEntry container = (IContainerEntry) entry; + //celement = cproject; + // SHOULD NOT BE HERE Container are resolved. + } } if (celement == null) { celement = cproject; @@ -574,12 +575,12 @@ public class PathEntryManager implements ICDescriptorListener { path = projectPath.append(path); } // source attachment info (optional) - IPath sourceAttachmentPath = element.hasAttribute(ATTRIBUTE_SOURCEPATH) ? new Path(element - .getAttribute(ATTRIBUTE_SOURCEPATH)) : null; - IPath sourceAttachmentRootPath = element.hasAttribute(ATTRIBUTE_ROOTPATH) ? new Path(element - .getAttribute(ATTRIBUTE_ROOTPATH)) : null; - IPath sourceAttachmentPrefixMapping = element.hasAttribute(ATTRIBUTE_PREFIXMAPPING) ? new Path(element - .getAttribute(ATTRIBUTE_PREFIXMAPPING)) : null; + IPath sourceAttachmentPath = element.hasAttribute(ATTRIBUTE_SOURCEPATH) ? new Path( + element.getAttribute(ATTRIBUTE_SOURCEPATH)) : null; + IPath sourceAttachmentRootPath = element.hasAttribute(ATTRIBUTE_ROOTPATH) ? new Path( + element.getAttribute(ATTRIBUTE_ROOTPATH)) : null; + IPath sourceAttachmentPrefixMapping = element.hasAttribute(ATTRIBUTE_PREFIXMAPPING) ? new Path( + element.getAttribute(ATTRIBUTE_PREFIXMAPPING)) : null; // exclusion patterns (optional) String exclusion = element.getAttribute(ATTRIBUTE_EXCLUDING); IPath[] exclusionPatterns = APathEntry.NO_EXCLUSION_PATTERNS; @@ -725,7 +726,9 @@ public class PathEntryManager implements ICDescriptorListener { } } - /* (non-Javadoc) + /* + * (non-Javadoc) + * * @see org.eclipse.cdt.core.ICDescriptorListener#descriptorChanged(org.eclipse.cdt.core.CDescriptorEvent) */ public void descriptorChanged(CDescriptorEvent event) { @@ -751,6 +754,6 @@ public class PathEntryManager implements ICDescriptorListener { } catch (CModelException e) { } } - } + } } -} +} \ No newline at end of file