diff --git a/core/org.eclipse.cdt.core/ChangeLog b/core/org.eclipse.cdt.core/ChangeLog index d8e9254b4c1..490e4ed27aa 100644 --- a/core/org.eclipse.cdt.core/ChangeLog +++ b/core/org.eclipse.cdt.core/ChangeLog @@ -1,3 +1,22 @@ +2004-03-21 Alain Magloire + + The methods CoreModel.create() are now handle operation. + Meaning it will generate a ICElement even if the file does + not exists. ICModel and ICProject no longer implements + ICContainer. + + * model/org/eclipse/cdt/core/model/ICModel.java + * model/org/eclipse/cdt/core/model/ICProject.java + + * model/eclipse/cdt/internal/core/model/CContainer.java + * model/eclipse/cdt/internal/core/model/CContainerInfo.java + * model/eclipse/cdt/internal/core/model/CModel.java + * model/eclipse/cdt/internal/core/model/CModelInfo.java + * model/eclipse/cdt/internal/core/model/CModelManager.java + * model/eclipse/cdt/internal/core/model/CProject.java + * model/eclipse/cdt/internal/core/model/CCProjectInfo.java + * model/eclipse/cdt/internal/core/model/DeltaProcessor.java + 2004-03-19 David Inglis * model/org/eclipse/cdt/core/model/CoreModel.java diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/ICModel.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/ICModel.java index 599b1477176..a70c3fa8b7e 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/ICModel.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/ICModel.java @@ -161,11 +161,14 @@ public interface ICModel extends ICElement, IParent, IOpenable { /** * Returns the C project with the given name. This is a handle-only method. * The project may or may not exist. + * + * @param name of the Project */ ICProject getCProject(String name); /** * Returns the C projects. + * */ ICProject[] getCProjects(); diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/ICProject.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/ICProject.java index 91c890ce320..06372b98f44 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/ICProject.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/ICProject.java @@ -45,11 +45,25 @@ public interface ICProject extends IParent, IOpenable, ICElement { /** * Returns the source root folders of the project. + * + *
NOTE: This is equivalent to getChildren()
.
+ *
* @return ISourceRoot - root folders
* @exception CModelException
*/
ISourceRoot[] getSourceRoots() throws CModelException;
+ /**
+ * Returns all of the existing source roots that exist
+ * on the pathentry, in the order they are defined by the ".cdtproject".
+ *
+ * @return all of the existing package fragment roots that exist
+ * on the classpath
+ * @exception JavaModelException if this element does not exist or if an
+ * exception occurs while accessing its corresponding resource
+ */
+ ISourceRoot[] getAllSourceRoots() throws CModelException;
+
/**
*
* @param entry
diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CContainer.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CContainer.java
index af099c19d85..9e2d46cf657 100644
--- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CContainer.java
+++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CContainer.java
@@ -117,6 +117,18 @@ public class CContainer extends Openable implements ICContainer {
return new TranslationUnit(this, file);
}
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.cdt.core.model.ICContainer#getCContainers()
+ */
+ public ICContainer[] getCContainers() throws CModelException {
+ List list = getChildrenOfType(C_CCONTAINER);
+ ICContainer[] array = new ICContainer[list.size()];
+ list.toArray(array);
+ return array;
+ }
+
/*
* (non-Javadoc)
*
@@ -239,13 +251,4 @@ public class CContainer extends Openable implements ICContainer {
return true;
}
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.cdt.core.model.ICContainer#getCContainers()
- */
- public ICContainer[] getCContainers() throws CModelException {
- // TODO Auto-generated method stub
- return null;
- }
}
diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CContainerInfo.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CContainerInfo.java
index 30e5de09a3c..88888e33c0f 100644
--- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CContainerInfo.java
+++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CContainerInfo.java
@@ -21,11 +21,6 @@ import org.eclipse.core.runtime.CoreException;
*/
public class CContainerInfo extends OpenableInfo {
- /**
- * Shared empty collection used for efficiency.
- */
- static Object[] NO_NON_C_RESOURCES = new Object[] {};
-
Object[] nonCResources = null;
/**
diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CElementInfo.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CElementInfo.java
index 3c97f097417..24350c87e1c 100644
--- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CElementInfo.java
+++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CElementInfo.java
@@ -16,6 +16,11 @@ import org.eclipse.core.resources.IResource;
*/
class CElementInfo {
+ /**
+ * Shared empty collection used for efficiency.
+ */
+ static Object[] NO_NON_C_RESOURCES = new Object[] {};
+
protected CElement element;
/**
diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModel.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModel.java
index 123c6fefae5..408b092963a 100644
--- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModel.java
+++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModel.java
@@ -31,9 +31,11 @@ public class CModel extends Openable implements ICModel {
super (null, root, ICElement.C_MODEL);
}
- public ICProject getCProject(String name) {
- IProject project = getWorkspace().getRoot().getProject(name);
- return CModelManager.getDefault().create(project);
+ public boolean equals(Object o) {
+ if (!(o instanceof CModel)) {
+ return false;
+ }
+ return super.equals(o);
}
public ICProject[] getCProjects() {
@@ -43,6 +45,14 @@ public class CModel extends Openable implements ICModel {
return array;
}
+ /**
+ * ICModel#getCProject(String)
+ */
+ public ICProject getCProject(String name) {
+ IProject project = ((IWorkspaceRoot)getResource()).getProject(name);
+ return CModelManager.getDefault().create(project);
+ }
+
/**
* Returns the active C project associated with the specified
* resource, or null
if no C project yet exists
diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelInfo.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelInfo.java
index f942687a79f..5fa93c3c9a9 100644
--- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelInfo.java
+++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelInfo.java
@@ -11,7 +11,9 @@ import org.eclipse.core.resources.ResourcesPlugin;
/**
* @see ICModel
*/
-public class CModelInfo extends CContainerInfo {
+public class CModelInfo extends OpenableInfo {
+
+ Object[] nonCResources = null;
/**
* Constructs a new C Model Info
@@ -57,4 +59,11 @@ public class CModelInfo extends CContainerInfo {
return nonCResources;
}
+ /**
+ * @return
+ */
+ public void setNonCResources(Object[] resources) {
+ nonCResources = resources;
+ }
+
}
diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelManager.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelManager.java
index 28afe683601..b375720434d 100644
--- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelManager.java
+++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CModelManager.java
@@ -38,7 +38,6 @@ import org.eclipse.cdt.core.model.IParent;
import org.eclipse.cdt.core.model.ISourceRoot;
import org.eclipse.cdt.core.model.IWorkingCopy;
import org.eclipse.cdt.internal.core.search.indexing.IndexManager;
-import org.eclipse.core.resources.IContainer;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
@@ -53,7 +52,6 @@ import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.Path;
public class CModelManager implements IResourceChangeListener, ICDescriptorListener {
@@ -188,9 +186,6 @@ public class CModelManager implements IResourceChangeListener, ICDescriptorListe
return null;
}
- if (cproject == null) {
- cproject = create(resource.getProject());
- }
int type = resource.getType();
switch (type) {
case IResource.PROJECT :
@@ -200,7 +195,7 @@ public class CModelManager implements IResourceChangeListener, ICDescriptorListe
case IResource.FOLDER :
return create((IFolder)resource, cproject);
case IResource.ROOT :
- return create((IWorkspaceRoot)resource);
+ return getCModel((IWorkspaceRoot)resource);
default :
return null;
}
@@ -213,10 +208,6 @@ public class CModelManager implements IResourceChangeListener, ICDescriptorListe
return cModel.getCProject(project);
}
- public ICModel create(IWorkspaceRoot root) {
- return getCModel();
- }
-
public ICContainer create(IFolder folder, ICProject cproject) {
if (folder == null) {
return null;
@@ -227,7 +218,7 @@ public class CModelManager implements IResourceChangeListener, ICDescriptorListe
ICContainer celement = null;
IPath resourcePath = folder.getFullPath();
try {
- ISourceRoot[] roots = cproject.getSourceRoots();
+ ISourceRoot[] roots = cproject.getAllSourceRoots();
for (int i = 0; i < roots.length; ++i) {
ISourceRoot root = roots[i];
IPath rootPath = root.getPath();
@@ -239,21 +230,9 @@ public class CModelManager implements IResourceChangeListener, ICDescriptorListe
String[] segments = path.segments();
ICContainer cfolder = root;
for (int j = 0; j < segments.length; j++) {
- IResource res = cfolder.getResource();
- if (res instanceof IContainer) {
- IContainer container = (IContainer)res;
- res = container.findMember(new Path(segments[j]));
- if (res instanceof IFolder) {
- cfolder = cfolder.getCContainer(segments[j]);
- } else {
- cfolder = null;
- break;
- }
- }
- }
- if (cfolder != null) {
- celement = cfolder;
+ cfolder = cfolder.getCContainer(segments[j]);
}
+ celement = cfolder;
}
}
} catch (CModelException e) {
@@ -271,43 +250,36 @@ public class CModelManager implements IResourceChangeListener, ICDescriptorListe
}
ICElement celement = null;
try {
- ISourceRoot[] roots = cproject.getSourceRoots();
+ ISourceRoot[] roots = cproject.getAllSourceRoots();
for (int i = 0; i < roots.length; ++i) {
ISourceRoot root = roots[i];
IPath rootPath = root.getPath();
if (root.isOnSourceEntry(file)) {
IPath resourcePath = file.getFullPath();
IPath path = resourcePath.removeFirstSegments(rootPath.segmentCount());
+ String fileName = path.lastSegment();
+ path = path.removeLastSegments(1);
String[] segments = path.segments();
ICContainer cfolder = root;
for (int j = 0; j < segments.length; j++) {
- IResource res = cfolder.getResource();
- if (res instanceof IContainer) {
- IContainer container = (IContainer)res;
- res = container.findMember(new Path(segments[j]));
- if (res instanceof IFolder) {
- cfolder = cfolder.getCContainer(segments[j]);
- } else if (res instanceof IFile) {
- IFile f = (IFile)res;
- if (isTranslationUnit(f)) {
- celement = new TranslationUnit(cfolder, f);
- } else if (cproject.isOnOutputEntry(f)) {
- IBinaryFile bin = createBinaryFile(f);
- if (bin != null) {
- if (bin.getType() == IBinaryFile.ARCHIVE) {
- celement = new Archive(cfolder, f, (IBinaryArchive)bin);
- ArchiveContainer vlib = (ArchiveContainer)cproject.getArchiveContainer();
- vlib.addChild(celement);
- } else {
- celement = new Binary(cfolder, f, (IBinaryObject)bin);
- if (bin.getType() == IBinaryFile.EXECUTABLE || bin.getType() == IBinaryFile.SHARED) {
- BinaryContainer vbin = (BinaryContainer)cproject.getBinaryContainer();
- vbin.addChild(celement);
- }
- }
- }
+ cfolder = cfolder.getCContainer(segments[j]);
+ }
+
+ if (isValidTranslationUnitName(fileName)) {
+ celement = cfolder.getTranslationUnit(fileName);
+ } else if (cproject.isOnOutputEntry(file)) {
+ IBinaryFile bin = createBinaryFile(file);
+ if (bin != null) {
+ if (bin.getType() == IBinaryFile.ARCHIVE) {
+ celement = new Archive(cfolder, file, (IBinaryArchive)bin);
+ ArchiveContainer vlib = (ArchiveContainer)cproject.getArchiveContainer();
+ vlib.addChild(celement);
+ } else {
+ celement = new Binary(cfolder, file, (IBinaryObject)bin);
+ if (bin.getType() == IBinaryFile.EXECUTABLE || bin.getType() == IBinaryFile.SHARED) {
+ BinaryContainer vbin = (BinaryContainer)cproject.getBinaryContainer();
+ vbin.addChild(celement);
}
- break;
}
}
}
@@ -336,45 +308,7 @@ public class CModelManager implements IResourceChangeListener, ICDescriptorListe
}
return celement;
}
- /*
- public synchronized ICElement create(ICElement parent, IFile file, IBinaryFile bin) {
- ICElement cfile = null;
-
- if (isTranslationUnit(file)) {
- cfile = new TranslationUnit(parent, file);
- } else if (file.exists()) {
- // Try to create the binaryFile first.
- if (bin == null) {
- bin = createBinaryFile(file);
- }
- if (bin != null) {
- if (bin.getType() == IBinaryFile.ARCHIVE) {
- cfile = new Archive(parent, file, (IBinaryArchive)bin);
- } else {
- cfile = new Binary(parent, file, bin);
- }
- }
- }
- // Added also to the Containers
- if (cfile != null && (cfile instanceof IBinary || cfile instanceof IArchive)) {
- if (bin == null) {
- bin = createBinaryFile(file);
- }
- if (bin != null) {
- if (bin.getType() == IBinaryFile.ARCHIVE) {
- CProject cproj = (CProject)cfile.getCProject();
- ArchiveContainer container = (ArchiveContainer)cproj.getArchiveContainer();
- container.addChild(cfile);
- } else if (bin.getType() == IBinaryFile.EXECUTABLE || bin.getType() == IBinaryFile.SHARED) {
- CProject cproj = (CProject)cfile.getCProject();
- BinaryContainer container = (BinaryContainer)cproj.getBinaryContainer();
- container.addChild(cfile);
- }
- }
- }
- return cfile;
- }
-*/
+
public void releaseCElement(ICElement celement) {
// Guard.
diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CProject.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CProject.java
index 15078ec737f..d281be7fa20 100644
--- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CProject.java
+++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CProject.java
@@ -12,6 +12,7 @@ import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
+import org.eclipse.cdt.core.CCProjectNature;
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.CProjectNature;
import org.eclipse.cdt.core.IBinaryParser;
@@ -40,7 +41,7 @@ import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.Preferences;
import org.eclipse.core.runtime.QualifiedName;
-public class CProject extends CContainer implements ICProject {
+public class CProject extends Openable implements ICProject {
private static final String CUSTOM_DEFAULT_OPTION_VALUE = "#\r\n\r#custom-non-empty-default-value#\r\n\r#"; //$NON-NLS-1$
@@ -87,6 +88,39 @@ public class CProject extends CContainer implements ICProject {
return false;
}
+ public static boolean hasCCNature(IProject p) {
+ try {
+ return p.hasNature(CCProjectNature.CC_NATURE_ID);
+ } catch (CoreException e) {
+ //throws exception if the project is not open.
+ }
+ return false;
+ }
+
+ private boolean isCProject() {
+ return hasCNature(getProject()) || hasCCNature(getProject());
+ }
+
+ /**
+ * Returns true if this handle represents the same C project
+ * as the given handle. Two handles represent the same
+ * project if they are identical or if they represent a project with
+ * the same underlying resource and occurrence counts.
+ *
+ * @see CElement#equals(Object)
+ */
+ public boolean equals(Object o) {
+
+ if (this == o)
+ return true;
+
+ if (!(o instanceof CProject))
+ return false;
+
+ CProject other = (CProject) o;
+ return getProject().equals(other.getProject());
+ }
+
protected CElementInfo createElementInfo() {
return new CProjectInfo(this);
}
@@ -255,6 +289,9 @@ public class CProject extends CContainer implements ICProject {
* Project preferences may include custom encoding.
*/
private Preferences getPreferences() {
+ if (!(isCProject())) {
+ return null;
+ }
Preferences preferences = new Preferences();
Iterator iter = CModelManager.OptionNames.iterator();
@@ -281,6 +318,9 @@ public class CProject extends CContainer implements ICProject {
private void savePreferences(Preferences preferences) {
if (preferences == null)
return;
+ if (!isCProject()) {
+ return; // ignore
+ }
Iterator iter = CModelManager.OptionNames.iterator();
while (iter.hasNext()) {
@@ -305,6 +345,9 @@ public class CProject extends CContainer implements ICProject {
* Set cached preferences, no preferences are saved, only info is updated
*/
private void setPreferences(Preferences preferences) {
+ if (!isCProject()) {
+ return; // ignore
+ }
// Do nothing
}
@@ -355,9 +398,31 @@ public class CProject extends CContainer implements ICProject {
* @see org.eclipse.cdt.core.model.ICProject#getSourceRoots()
*/
public ISourceRoot[] getSourceRoots() throws CModelException {
+ Object[] children;
+ int length;
+
+ children = getChildren();
+ length = children.length;
+ ISourceRoot[] roots = new ISourceRoot[length];
+ System.arraycopy(children, 0, roots, 0, length);
+
+ return roots;
+
+ //return computeSourceRoots();
+ }
+
+ /**
+ *
+ * @return
+ * @throws CModelException
+ */
+ public ISourceRoot[] getAllSourceRoots() throws CModelException {
return computeSourceRoots();
}
+ /**
+ *
+ */
public IOutputEntry[] getOutputEntries() throws CModelException {
IPathEntry[] entries = getResolvedPathEntries();
ArrayList list = new ArrayList(entries.length);
@@ -371,6 +436,9 @@ public class CProject extends CContainer implements ICProject {
return outputs;
}
+ /**
+ *
+ */
public boolean isOnOutputEntry(IResource resource) {
IPath path = resource.getFullPath();
@@ -394,8 +462,7 @@ public class CProject extends CContainer implements ICProject {
}
private boolean isOnOutputEntry(IOutputEntry entry, IPath path) {
- if (entry.getPath().isPrefixOf(path)
- && !Util.isExcluded(path, entry.fullExclusionPatternChars())) {
+ if (entry.getPath().isPrefixOf(path) && !Util.isExcluded(path, entry.fullExclusionPatternChars())) {
return true;
}
return false;
@@ -484,4 +551,20 @@ public class CProject extends CContainer implements ICProject {
return false;
}
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.model.ICElement#exists()
+ */
+ public boolean exists() {
+ if (!isCProject()) {
+ return false;
+ }
+ return super.exists();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.cdt.core.model.ICProject#getNonCResources()
+ */
+ public Object[] getNonCResources() throws CModelException {
+ return ((CProjectInfo) getElementInfo()).getNonCResources(getResource());
+ }
}
diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CProjectInfo.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CProjectInfo.java
index cab80230a4f..bc42794f8e5 100644
--- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CProjectInfo.java
+++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/CProjectInfo.java
@@ -20,10 +20,11 @@ import org.eclipse.core.runtime.IPath;
* Info for ICProject.
*/
-class CProjectInfo extends CContainerInfo {
+class CProjectInfo extends OpenableInfo {
BinaryContainer vBin;
ArchiveContainer vLib;
+ Object[] nonCResources = null;
/**
*/
@@ -54,7 +55,8 @@ class CProjectInfo extends CContainerInfo {
if (nonCResources != null)
return nonCResources;
- // determine if src == project and/or if bin == project
+ CProject cproject = (CProject)getElement();
+ // determine if src == project
IPath projectPath = res.getProject().getFullPath();
ISourceRoot root = null;
ICElement[] elements = getChildren();
@@ -108,4 +110,11 @@ class CProjectInfo extends CContainerInfo {
return nonCResources;
}
+ /**
+ * @param container
+ * @return
+ */
+ public void setNonCResources(Object[] resources) {
+ nonCResources = resources;
+ }
}
diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/DeltaProcessor.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/DeltaProcessor.java
index 00bd1c5b9ca..b088072e58b 100644
--- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/DeltaProcessor.java
+++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/DeltaProcessor.java
@@ -9,7 +9,6 @@ import org.eclipse.cdt.core.model.CModelException;
import org.eclipse.cdt.core.model.CoreModel;
import org.eclipse.cdt.core.model.IArchiveContainer;
import org.eclipse.cdt.core.model.IBinaryContainer;
-import org.eclipse.cdt.core.model.ICContainer;
import org.eclipse.cdt.core.model.ICElement;
import org.eclipse.cdt.core.model.ICElementDelta;
import org.eclipse.cdt.core.model.ICModel;
@@ -18,7 +17,6 @@ import org.eclipse.cdt.core.model.IParent;
import org.eclipse.cdt.core.model.ISourceRoot;
import org.eclipse.cdt.internal.core.search.indexing.IndexManager;
import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IResourceDelta;
@@ -70,7 +68,7 @@ public class DeltaProcessor {
ICProject cpj = manager.create((IProject)resParent);
if (cpj != null) {
try {
- ISourceRoot[] roots = cpj.getSourceRoots();
+ ISourceRoot[] roots = cpj.getAllSourceRoots();
for (int i = 0; i < roots.length; i++) {
if (roots[i].isOnSourceEntry(resource)) {
parent = roots[i];
@@ -139,22 +137,6 @@ public class DeltaProcessor {
}
}
- // return an handler
- if (celement == null) {
- IResource resParent = resource.getParent();
- ICElement parent = manager.create(resParent, null);
- if (parent instanceof ICContainer) {
- String name = resource.getName();
- if (resource instanceof IFile) {
- if (manager.isValidTranslationUnitName(name)) {
- celement = ((ICContainer)parent).getTranslationUnit(name);
- }
- } else if (resource instanceof IFolder) {
- celement = ((ICContainer)parent).getCContainer(name);
- }
- }
- }
-
return celement;
}
@@ -440,13 +422,18 @@ public class DeltaProcessor {
} else {
elementDelta.addResourceDelta(delta);
}
- if (parent instanceof CContainer) {
- // if info not created yet no need to null NonCResources...
- if (CModelManager.getDefault().peekAtInfo(parent) != null) {
- CElementInfo info = ((CContainer)parent).getElementInfo();
- if (info instanceof CContainerInfo) {
- ((CContainerInfo)info).setNonCResources(null);
- }
+ if (parent instanceof Openable && ((Openable)parent).isOpen()) {
+ CElementInfo info = ((Openable)parent).getElementInfo();
+ switch (parent.getElementType()) {
+ case ICElement.C_MODEL:
+ ((CModelInfo)info).setNonCResources(null);
+ break;
+ case ICElement.C_PROJECT:
+ ((CProjectInfo)info).setNonCResources(null);
+ break;
+ case ICElement.C_CCONTAINER:
+ ((CContainerInfo)info).setNonCResources(null);
+ break;
}
}
}