mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-06-07 17:56:01 +02:00
Fix to match the CDescriptor new features.
This commit is contained in:
parent
2332b3b0f3
commit
3d544739e7
4 changed files with 29 additions and 24 deletions
|
@ -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.
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
if (deltas.length > 0) {
|
||||
cproject.close();
|
||||
for (int i = 0; i < deltas.length; i++) {
|
||||
manager.registerCModelDelta(deltas[i]);
|
||||
}
|
||||
manager.fire(ElementChangedEvent.POST_CHANGE);
|
||||
}
|
||||
} catch (CModelException e) {
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue