1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-09-08 19:13:27 +02:00

fixed unessesary writes to .cdtproject

This commit is contained in:
David Inglis 2004-04-30 14:19:10 +00:00
parent bf5f9acb67
commit 4c924a5283
2 changed files with 51 additions and 42 deletions

View file

@ -86,6 +86,7 @@ public class CDescriptor implements ICDescriptor {
boolean fUpdating;
boolean isInitializing = true;
boolean bDirty = false;
protected CDescriptor(CDescriptorManager manager, IProject project, String id) throws CoreException {
fProject = project;
@ -209,9 +210,7 @@ public class CDescriptor implements ICDescriptor {
isInitializing = true;
fOwner.update(fProject, this, extensionID);
isInitializing = oldIsInitializing;
if (!isInitializing) {
updateOnDisk();
}
updateIfDirty();
refs = get(extensionID);
} catch (CoreException e) {
}
@ -239,8 +238,8 @@ public class CDescriptor implements ICDescriptor {
CExtensionReference extRef;
synchronized (this) {
extRef = createRef(extensionPoint, extension);
if (!isInitializing) {
updateOnDisk();
if (!isInitializing) {
fireEvent = true;
}
}
@ -264,16 +263,15 @@ public class CDescriptor implements ICDescriptor {
} else {
extMap.remove(ext.getExtension());
}
if (!isInitializing) {
updateOnDisk();
if (!isInitializing) {
fireEvent = true;
}
}
}
}
if (fireEvent) {
fManager.fireEvent(new CDescriptorEvent(this, CDescriptorEvent.CDTPROJECT_CHANGED,
CDescriptorEvent.EXTENSION_CHANGED));
fManager.fireEvent(new CDescriptorEvent(this, CDescriptorEvent.CDTPROJECT_CHANGED, CDescriptorEvent.EXTENSION_CHANGED));
}
}
@ -283,8 +281,8 @@ public class CDescriptor implements ICDescriptor {
CExtensionReference extensions[] = (CExtensionReference[])extMap.get(extensionPoint);
if (extensions != null) {
extMap.remove(extensionPoint);
if (!isInitializing) {
updateOnDisk();
if (!isInitializing) {
fireEvent = true;
}
}
@ -312,6 +310,7 @@ public class CDescriptor implements ICDescriptor {
public void run(IProgressMonitor mon) throws CoreException {
String xml;
bDirty = false;
if (!fProject.isAccessible()) {
return;
}
@ -356,10 +355,20 @@ public class CDescriptor implements ICDescriptor {
return fUpdating;
}
void updateIfDirty() {
if ( bDirty ) {
updateOnDisk();
}
}
synchronized void updateOnDisk() {
if (isUpdating()) {
return;
}
if (isInitializing) {
bDirty = true;
return;
}
fUpdating = true;
fManager.updateDescriptor(this);
}

View file

@ -57,8 +57,8 @@ public class CExtensionReference implements ICExtensionReference {
public void setExtensionData(String key, String value) throws CoreException {
getInfo().setAttribute(key, value);
if (!fDescriptor.isInitializing) {
fDescriptor.updateOnDisk();
if (!fDescriptor.isInitializing) {
fDescriptor.fManager.fireEvent(new CDescriptorEvent(fDescriptor, CDescriptorEvent.CDTPROJECT_CHANGED, 0));
}
}