mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
Fix for PR 59098
This commit is contained in:
parent
7ef1a6ed7e
commit
97a3c316c8
4 changed files with 55 additions and 7 deletions
|
@ -1,3 +1,11 @@
|
||||||
|
2004-04-19 Alain Magloire
|
||||||
|
|
||||||
|
Fix for PR 59098
|
||||||
|
|
||||||
|
* model/org/eclipse/cdt/internal/core/model/CModel.java
|
||||||
|
* model/org/eclipse/cdt/internal/core/model/CProjectInfo.java
|
||||||
|
* model/org/eclipse/cdt/internal/core/model/DeltaProcessor.java
|
||||||
|
|
||||||
2004-04-19 Alain Magloire
|
2004-04-19 Alain Magloire
|
||||||
|
|
||||||
It has become necessary to add exception in the interface
|
It has become necessary to add exception in the interface
|
||||||
|
|
|
@ -74,6 +74,25 @@ public class CModel extends Openable implements ICModel {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Finds the given project in the list of the java model's children.
|
||||||
|
* Returns null if not found.
|
||||||
|
*/
|
||||||
|
public ICProject findCProject(IProject project) {
|
||||||
|
try {
|
||||||
|
ICProject[] projects = getOldCProjectsList();
|
||||||
|
for (int i = 0, length = projects.length; i < length; i++) {
|
||||||
|
ICProject javaProject = projects[i];
|
||||||
|
if (project.equals(javaProject.getProject())) {
|
||||||
|
return javaProject;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (CModelException e) {
|
||||||
|
// c model doesn't exist: cannot find any project
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
public IWorkspace getWorkspace() {
|
public IWorkspace getWorkspace() {
|
||||||
return getUnderlyingResource().getWorkspace();
|
return getUnderlyingResource().getWorkspace();
|
||||||
}
|
}
|
||||||
|
@ -141,6 +160,18 @@ public class CModel extends Openable implements ICModel {
|
||||||
return resource.hashCode();
|
return resource.hashCode();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Workaround for bug 15168 circular errors not reported
|
||||||
|
* Returns the list of java projects before resource delta processing
|
||||||
|
* has started.
|
||||||
|
*/
|
||||||
|
public ICProject[] getOldCProjectsList() throws CModelException {
|
||||||
|
CModelManager manager = CModelManager.getDefault();
|
||||||
|
return manager.cProjectsCache == null ?
|
||||||
|
getCProjects() :
|
||||||
|
manager.cProjectsCache;
|
||||||
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see org.eclipse.cdt.internal.core.model.Openable#generateInfos(org.eclipse.cdt.internal.core.model.OpenableInfo, org.eclipse.core.runtime.IProgressMonitor, java.util.Map, org.eclipse.core.resources.IResource)
|
* @see org.eclipse.cdt.internal.core.model.Openable#generateInfos(org.eclipse.cdt.internal.core.model.OpenableInfo, org.eclipse.core.runtime.IProgressMonitor, java.util.Map, org.eclipse.core.resources.IResource)
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -18,7 +18,6 @@ import org.eclipse.cdt.core.model.ISourceRoot;
|
||||||
import org.eclipse.core.resources.IContainer;
|
import org.eclipse.core.resources.IContainer;
|
||||||
import org.eclipse.core.resources.IResource;
|
import org.eclipse.core.resources.IResource;
|
||||||
import org.eclipse.core.runtime.CoreException;
|
import org.eclipse.core.runtime.CoreException;
|
||||||
import org.eclipse.core.runtime.IPath;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Info for ICProject.
|
* Info for ICProject.
|
||||||
|
@ -64,9 +63,7 @@ class CProjectInfo extends OpenableInfo {
|
||||||
if (nonCResources != null)
|
if (nonCResources != null)
|
||||||
return nonCResources;
|
return nonCResources;
|
||||||
|
|
||||||
CProject cproject = (CProject)getElement();
|
|
||||||
// determine if src == project
|
// determine if src == project
|
||||||
IPath projectPath = res.getProject().getFullPath();
|
|
||||||
ISourceRoot root = null;
|
ISourceRoot root = null;
|
||||||
ICElement[] elements = getChildren();
|
ICElement[] elements = getChildren();
|
||||||
for (int i = 0; i < elements.length; i++) {
|
for (int i = 0; i < elements.length; i++) {
|
||||||
|
@ -80,7 +77,6 @@ class CProjectInfo extends OpenableInfo {
|
||||||
}
|
}
|
||||||
|
|
||||||
ArrayList notChildren = new ArrayList();
|
ArrayList notChildren = new ArrayList();
|
||||||
ICElement parent = getElement();
|
|
||||||
try {
|
try {
|
||||||
IResource[] resources = null;
|
IResource[] resources = null;
|
||||||
if (res instanceof IContainer) {
|
if (res instanceof IContainer) {
|
||||||
|
@ -89,7 +85,6 @@ class CProjectInfo extends OpenableInfo {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (resources != null) {
|
if (resources != null) {
|
||||||
CModelManager factory = CModelManager.getDefault();
|
|
||||||
ICElement[] children;
|
ICElement[] children;
|
||||||
if (root == null) {
|
if (root == null) {
|
||||||
children = getChildren();
|
children = getChildren();
|
||||||
|
|
|
@ -525,8 +525,22 @@ public class DeltaProcessor {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ((flags & IResourceDelta.DESCRIPTION) != 0) {
|
if ((flags & IResourceDelta.DESCRIPTION) != 0) {
|
||||||
if (element != null) {
|
IProject res = (IProject)delta.getResource();
|
||||||
elementAdded(element, delta);
|
CModel cModel = CModelManager.getDefault().getCModel();
|
||||||
|
boolean wasCProject = cModel.findCProject(res) != null;
|
||||||
|
boolean isCProject = CProject.hasCNature(res);
|
||||||
|
if (wasCProject != isCProject) {
|
||||||
|
// project's nature has been added or removed
|
||||||
|
if (element != null) {
|
||||||
|
// note its resources are still visible as roots to other projects
|
||||||
|
if (isCProject) {
|
||||||
|
elementAdded(element, delta);
|
||||||
|
updateIndexAddResource(element, delta);
|
||||||
|
} else {
|
||||||
|
elementRemoved(element, delta);
|
||||||
|
updateIndexRemoveResource(element, delta);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue