1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-06-07 09:46:02 +02:00

Fix to match the CDescriptor new features.

This commit is contained in:
Alain Magloire 2004-03-22 21:23:55 +00:00
parent 2332b3b0f3
commit 3d544739e7
4 changed files with 29 additions and 24 deletions

View file

@ -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.

View file

@ -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.

View file

@ -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);
}

View file

@ -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) {
}
}