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:
parent
bf5f9acb67
commit
4c924a5283
2 changed files with 51 additions and 42 deletions
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue