diff options
author | Alain Magloire | 2004-03-22 21:23:55 +0000 |
---|---|---|
committer | Alain Magloire | 2004-03-22 21:23:55 +0000 |
commit | 3d544739e7231f111874ea7e4e75f1f50eb99d0c (patch) | |
tree | 2f72ea1e637775b233971640ee367146f05caaf1 | |
parent | 2332b3b0f32609a82a74ad29e935464e6feb72e6 (diff) | |
download | org.eclipse.cdt-3d544739e7231f111874ea7e4e75f1f50eb99d0c.tar.gz org.eclipse.cdt-3d544739e7231f111874ea7e4e75f1f50eb99d0c.tar.xz org.eclipse.cdt-3d544739e7231f111874ea7e4e75f1f50eb99d0c.zip |
Fix to match the CDescriptor new features.
4 files changed, 29 insertions, 24 deletions
diff --git a/core/org.eclipse.cdt.core/ChangeLog b/core/org.eclipse.cdt.core/ChangeLog index 490e4ed27aa..7e4e615c332 100644 --- a/core/org.eclipse.cdt.core/ChangeLog +++ b/core/org.eclipse.cdt.core/ChangeLog @@ -1,3 +1,9 @@ +2004-03-22 Alain Magloire + + * model/org/eclipse/cdt/core/model/CoreModel.java + * model/org/eclipse/cdt/internla/core/model/PathEntryManager.java + * model/org/eclipse/cdt/internla/core/model/CModelManager.java + 2004-03-21 Alain Magloire The methods CoreModel.create() are now handle operation. diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/CoreModel.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/CoreModel.java index dd530cdfbf2..bb1d6ea9b6d 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/CoreModel.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/CoreModel.java @@ -4,8 +4,6 @@ package org.eclipse.cdt.core.model; * (c) Copyright QNX Software Systems Ltd. 2002. All Rights Reserved. */ import org.eclipse.cdt.core.CCorePlugin; -import org.eclipse.cdt.core.CDescriptorEvent; -import org.eclipse.cdt.core.ICDescriptorListener; import org.eclipse.cdt.internal.core.model.BatchOperation; import org.eclipse.cdt.internal.core.model.CModel; import org.eclipse.cdt.internal.core.model.CModelManager; @@ -30,7 +28,7 @@ import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; -public class CoreModel implements ICDescriptorListener { +public class CoreModel { private static CoreModel cmodel = null; private static CModelManager manager = null; private static PathEntryManager pathEntryManager = null; @@ -668,14 +666,6 @@ public class CoreModel implements ICDescriptorListener { manager.addElementChangedListener(listener); } - /* (non-Javadoc) - * @see org.eclipse.cdt.core.ICDescriptorListener#descriptorChanged(org.eclipse.cdt.core.CDescriptorEvent) - */ - public void descriptorChanged(CDescriptorEvent event) { - pathEntryManager.descriptorChanged(event); - manager.descriptorChanged(event); - } - /** * Removes the given element changed listener. Has no affect if an * identical listener is not registered. diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelManager.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelManager.java index 1e74dfd53dd..19ba0165edb 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelManager.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelManager.java @@ -476,21 +476,21 @@ public class CModelManager implements IResourceChangeListener, ICDescriptorListe */ public void resetBinaryParser(IProject project) { if (project != null) { - ICElement celement = create(project); - if (celement != null) { + ICProject cproject = create(project); + if (cproject != null) { // Let the function remove the children // but it has the side of effect of removing the CProject also // so we have to recall create again. - releaseCElement(celement); + try { + cproject.close(); + } catch (CModelException e) { + e.printStackTrace(); + } binaryParsersMap.remove(project); - celement = create(project); - Parent parent = (Parent)celement.getParent(); - CElementInfo info = parent.getElementInfo(); - info.addChild(celement); // Fired and ICElementDelta.PARSER_CHANGED CElementDelta delta = new CElementDelta(getCModel()); - delta.binaryParserChanged(celement); + delta.binaryParserChanged(cproject); registerCModelDelta(delta); fire(ElementChangedEvent.POST_CHANGE); } 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 e2234a37196..7d430bbd09b 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 @@ -37,6 +37,7 @@ import org.eclipse.cdt.core.model.IProjectEntry; import org.eclipse.cdt.core.model.ISourceEntry; import org.eclipse.cdt.core.model.PathEntryContainerInitializer; import org.eclipse.cdt.internal.core.CharOperation; +import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IWorkspaceRunnable; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IConfigurationElement; @@ -95,6 +96,10 @@ public class PathEntryManager implements ICDescriptorListener { public static PathEntryManager getDefault() { if (pathEntryManager == null) { pathEntryManager = new PathEntryManager(); + // Register the Core Model on the Descriptor + // Manager, it needs to know about changes. + CCorePlugin.getDefault().getCDescriptorManager().addDescriptorListener(pathEntryManager); + } return pathEntryManager; } @@ -241,7 +246,7 @@ public class PathEntryManager implements ICDescriptorListener { if (progressMonitor != null && progressMonitor.isCanceled()) { return; } - ICProject affectedProject = (ICProject) modifiedProjects[i]; + ICProject affectedProject = modifiedProjects[i]; if (affectedProject == null) { continue; // was filtered out } @@ -725,20 +730,24 @@ public class PathEntryManager implements ICDescriptorListener { */ public void descriptorChanged(CDescriptorEvent event) { int flags = event.getFlags(); - if ((flags & CDescriptorEvent.EXTENSION_CHANGED) != 0) { + if (event.getType() == CDescriptorEvent.CDTPROJECT_CHANGED) { ICDescriptor cdesc = event.getDescriptor(); if (cdesc != null) { CModelManager manager = CModelManager.getDefault(); ICProject cproject = manager.create(cdesc.getProject()); + IProject project = cproject.getProject(); try { IPathEntry[] oldResolvedEntries = getResolvedPathEntries(cproject); resolvedMap.remove(cproject); IPathEntry[] newResolvedEntries = getResolvedPathEntries(cproject); ICElementDelta[] deltas = generatePathEntryDeltas(cproject, oldResolvedEntries, newResolvedEntries); - for (int i = 0; i < deltas.length; i++) { - manager.registerCModelDelta(deltas[i]); + if (deltas.length > 0) { + cproject.close(); + for (int i = 0; i < deltas.length; i++) { + manager.registerCModelDelta(deltas[i]); + } + manager.fire(ElementChangedEvent.POST_CHANGE); } - manager.fire(ElementChangedEvent.POST_CHANGE); } catch (CModelException e) { } } |