mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-06-08 18:26:01 +02:00
Fix bug, no event was sent for the non-c resources.
This commit is contained in:
parent
c593b78e02
commit
2a0331a18a
1 changed files with 70 additions and 63 deletions
|
@ -5,17 +5,17 @@ package org.eclipse.cdt.internal.core.model;
|
||||||
* All Rights Reserved.
|
* All Rights Reserved.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import org.eclipse.core.resources.IProject;
|
import org.eclipse.cdt.core.model.CModelException;
|
||||||
import org.eclipse.core.resources.IResource;
|
import org.eclipse.cdt.core.model.CoreModel;
|
||||||
import org.eclipse.core.resources.IResourceDelta;
|
|
||||||
import org.eclipse.core.runtime.IPath;
|
|
||||||
|
|
||||||
import org.eclipse.cdt.core.model.ICElement;
|
import org.eclipse.cdt.core.model.ICElement;
|
||||||
import org.eclipse.cdt.core.model.ICElementDelta;
|
import org.eclipse.cdt.core.model.ICElementDelta;
|
||||||
import org.eclipse.cdt.core.model.ICModel;
|
import org.eclipse.cdt.core.model.ICModel;
|
||||||
import org.eclipse.cdt.core.model.ICModelStatusConstants;
|
import org.eclipse.cdt.core.model.ICModelStatusConstants;
|
||||||
import org.eclipse.cdt.core.model.CModelException;
|
import org.eclipse.cdt.core.model.IParent;
|
||||||
import org.eclipse.cdt.core.model.CoreModel;
|
import org.eclipse.core.resources.IProject;
|
||||||
|
import org.eclipse.core.resources.IResource;
|
||||||
|
import org.eclipse.core.resources.IResourceDelta;
|
||||||
|
import org.eclipse.core.runtime.IPath;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class is used by <code>CModelManager</code> to convert
|
* This class is used by <code>CModelManager</code> to convert
|
||||||
|
@ -58,9 +58,25 @@ public class DeltaProcessor {
|
||||||
* Returns null if none was found.
|
* Returns null if none was found.
|
||||||
*/
|
*/
|
||||||
protected ICElement createElement(IResource resource) {
|
protected ICElement createElement(IResource resource) {
|
||||||
|
CModelManager manager = CModelManager.getDefault();
|
||||||
if (resource == null)
|
if (resource == null)
|
||||||
return null;
|
return null;
|
||||||
return CModelManager.getDefault().create(resource);
|
ICElement celement = manager.create(resource);
|
||||||
|
if (celement == null) {
|
||||||
|
ICElement parent = manager.create(resource.getParent());
|
||||||
|
// Probably it was deleted, find it
|
||||||
|
if (parent instanceof IParent) {
|
||||||
|
ICElement[] children = ((CElement)parent).getElementInfo().getChildren();
|
||||||
|
for (int i = 0; i < children.length; i++) {
|
||||||
|
IResource res = children[i].getResource();
|
||||||
|
if (res != null && res.equals(resource)) {
|
||||||
|
celement = children[i];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return celement;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -79,40 +95,14 @@ public class DeltaProcessor {
|
||||||
CModelManager.getDefault().releaseCElement(celement);
|
CModelManager.getDefault().releaseCElement(celement);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Release the Resource.
|
|
||||||
* Returns null if none was found.
|
|
||||||
*/
|
|
||||||
protected void releaseCElement(IResource resource) {
|
|
||||||
CModelManager.getDefault().releaseCElement(resource);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* get the CElement from the hashtable, if it exist without
|
|
||||||
* creating it.
|
|
||||||
* Returns null if none was found.
|
|
||||||
*/
|
|
||||||
protected ICElement getElement(IResource res) {
|
|
||||||
return CModelManager.getDefault().getCElement(res);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected ICElement getElement(IPath path) {
|
|
||||||
return CModelManager.getDefault().getCElement(path);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Adds the given child handle to its parent's cache of children.
|
* Adds the given child handle to its parent's cache of children.
|
||||||
*/
|
*/
|
||||||
protected void addToParentInfo(Openable child) {
|
protected void addToParentInfo(Openable child) {
|
||||||
|
|
||||||
Openable parent = (Openable) child.getParent();
|
Openable parent = (Openable) child.getParent();
|
||||||
if (parent != null && parent.isOpen()) {
|
if (parent != null && parent.isOpen()) {
|
||||||
//try {
|
|
||||||
CElementInfo info = (CElementInfo)parent.getElementInfo();
|
CElementInfo info = (CElementInfo)parent.getElementInfo();
|
||||||
info.addChild(child);
|
info.addChild(child);
|
||||||
//} //catch (CModelException e) {
|
|
||||||
// do nothing - we already checked if open
|
|
||||||
//}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -133,7 +123,7 @@ public class DeltaProcessor {
|
||||||
if ((delta.getFlags() & IResourceDelta.MOVED_FROM) != 0) {
|
if ((delta.getFlags() & IResourceDelta.MOVED_FROM) != 0) {
|
||||||
//ICElement movedFromElement = createElement(delta.getMovedFromPath());
|
//ICElement movedFromElement = createElement(delta.getMovedFromPath());
|
||||||
if (movedFromElement == null)
|
if (movedFromElement == null)
|
||||||
movedFromElement = getElement(delta.getMovedFromPath());
|
movedFromElement = createElement(delta.getMovedFromPath());
|
||||||
fCurrentDelta.movedTo(element, movedFromElement);
|
fCurrentDelta.movedTo(element, movedFromElement);
|
||||||
movedFromElement = null;
|
movedFromElement = null;
|
||||||
} else {
|
} else {
|
||||||
|
@ -322,7 +312,7 @@ public class DeltaProcessor {
|
||||||
protected void traverseDelta(IResourceDelta delta) {
|
protected void traverseDelta(IResourceDelta delta) {
|
||||||
try {
|
try {
|
||||||
if (!updateCurrentDeltaAndIndex(delta)) {
|
if (!updateCurrentDeltaAndIndex(delta)) {
|
||||||
fCurrentDelta.addResourceDelta(delta);
|
nonCResourcesChanged(delta);
|
||||||
}
|
}
|
||||||
} catch (CModelException e) {
|
} catch (CModelException e) {
|
||||||
}
|
}
|
||||||
|
@ -332,6 +322,20 @@ public class DeltaProcessor {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void nonCResourcesChanged(IResourceDelta delta) {
|
||||||
|
fCurrentDelta.addResourceDelta(delta);
|
||||||
|
IResource res = delta.getResource();
|
||||||
|
if (res != null) {
|
||||||
|
ICElement celem = createElement(res.getParent());
|
||||||
|
if (celem instanceof CContainer) {
|
||||||
|
CElementInfo info = ((CContainer)celem).getElementInfo();
|
||||||
|
if (info instanceof CContainerInfo) {
|
||||||
|
((CContainerInfo)info).setNonCResources(null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Update the current delta (ie. add/remove/change the given element) and update the
|
* Update the current delta (ie. add/remove/change the given element) and update the
|
||||||
* correponding index.
|
* correponding index.
|
||||||
|
@ -348,36 +352,37 @@ public class DeltaProcessor {
|
||||||
switch (delta.getKind()) {
|
switch (delta.getKind()) {
|
||||||
case IResourceDelta.ADDED :
|
case IResourceDelta.ADDED :
|
||||||
element = createElement(resource);
|
element = createElement(resource);
|
||||||
if (element == null)
|
if (element != null) {
|
||||||
throw newInvalidElementType();
|
|
||||||
updateIndexAddResource(element, delta);
|
updateIndexAddResource(element, delta);
|
||||||
elementAdded(element, delta);
|
elementAdded(element, delta);
|
||||||
isProcess = true;
|
isProcess = true;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case IResourceDelta.REMOVED :
|
case IResourceDelta.REMOVED :
|
||||||
element = getElement(resource);
|
element = createElement(resource);
|
||||||
if (element != null) {
|
if (element != null) {
|
||||||
updateIndexRemoveResource(element, delta);
|
updateIndexRemoveResource(element, delta);
|
||||||
elementRemoved(element, delta);
|
elementRemoved(element, delta);
|
||||||
isProcess = true;
|
isProcess = true;
|
||||||
} else {
|
|
||||||
releaseCElement(resource);
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case IResourceDelta.CHANGED :
|
case IResourceDelta.CHANGED :
|
||||||
element = createElement(resource);
|
|
||||||
if (element == null)
|
|
||||||
throw newInvalidElementType();
|
|
||||||
int flags = delta.getFlags();
|
int flags = delta.getFlags();
|
||||||
if ((flags & IResourceDelta.CONTENT) != 0) {
|
if ((flags & IResourceDelta.CONTENT) != 0) {
|
||||||
// content has changed
|
// content has changed
|
||||||
|
element = createElement(resource);
|
||||||
|
if (element != null) {
|
||||||
contentChanged(element, delta);
|
contentChanged(element, delta);
|
||||||
updateIndexAddResource(element, delta);
|
updateIndexAddResource(element, delta);
|
||||||
|
isProcess = true;
|
||||||
|
}
|
||||||
} else if ((flags & IResourceDelta.OPEN) != 0) {
|
} else if ((flags & IResourceDelta.OPEN) != 0) {
|
||||||
// project has been opened or closed
|
// project has been opened or closed
|
||||||
IProject res = (IProject)resource;
|
IProject res = (IProject)resource;
|
||||||
|
element = createElement(resource);
|
||||||
|
if (element != null) {
|
||||||
if (res.isOpen()) {
|
if (res.isOpen()) {
|
||||||
elementOpened(element, delta);
|
elementOpened(element, delta);
|
||||||
updateIndexAddResource(element, delta);
|
updateIndexAddResource(element, delta);
|
||||||
|
@ -385,13 +390,15 @@ public class DeltaProcessor {
|
||||||
elementClosed(element, delta);
|
elementClosed(element, delta);
|
||||||
updateIndexRemoveResource(element, delta);
|
updateIndexRemoveResource(element, delta);
|
||||||
}
|
}
|
||||||
// when a project is open/closed don't process children
|
|
||||||
} else if ((flags & IResourceDelta.DESCRIPTION) != 0) {
|
|
||||||
elementAdded(element, delta);
|
|
||||||
} // else if ((flags * IResourceDelta.MARKERS) != 0) {}
|
|
||||||
// else if ((flags * IResourceDelta.TYPE) != 0) {}
|
|
||||||
// else if ((flags * IResourceDelta.SYNC) != 0) {}
|
|
||||||
isProcess = true;
|
isProcess = true;
|
||||||
|
}
|
||||||
|
} else if ((flags & IResourceDelta.DESCRIPTION) != 0) {
|
||||||
|
element = createElement(resource);
|
||||||
|
if (element != null) {
|
||||||
|
elementAdded(element, delta);
|
||||||
|
isProcess = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return isProcess;
|
return isProcess;
|
||||||
|
|
Loading…
Add table
Reference in a new issue