diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/CoreModelUtil.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/CoreModelUtil.java
index a3e56d8012d..a8474842e54 100644
--- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/CoreModelUtil.java
+++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/CoreModelUtil.java
@@ -650,7 +650,7 @@ public class CoreModelUtil {
/**
* Returns the translation unit for the file given or null
.
*/
- public static ITranslationUnit findTranslationUnit(IFile file) {
+ public static ITranslationUnit findTranslationUnit(IFile file) {
if (CoreModel.isTranslationUnit(file) && file.exists()) {
ICProject cp= CoreModel.getDefault().getCModel().getCProject(file.getProject().getName());
if (cp != null) {
@@ -668,10 +668,10 @@ public class CoreModelUtil {
}
}
}
- return null;
- }
+ return null;
+ }
- /**
+ /**
* Returns the configuration descriptions referenced directly by the specified
* configuration description. The result will not contain duplicates. Returns
* an empty array if there are no referenced configuration descriptions.
@@ -682,85 +682,93 @@ public class CoreModelUtil {
* @return a list of configuration descriptions
* @see CoreModelUtil#getReferencingConfigurationDescriptions(ICConfigurationDescription, boolean)
*/
-
- public static ICConfigurationDescription[] getReferencedConfigurationDescriptions(ICConfigurationDescription cfgDes, boolean writable) {
- List result = new ArrayList();
- if (cfgDes != null) {
- Map map = cfgDes.getReferenceInfo();
- if (map.size() != 0) {
- IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
- CoreModel model = CoreModel.getDefault();
- for (Map.Entry entry : map.entrySet()) {
- String projName = entry.getKey();
- String cfgId = entry.getValue();
- IProject project = root.getProject(projName);
- if (!project.exists())
- continue;
+ public static ICConfigurationDescription[] getReferencedConfigurationDescriptions(ICConfigurationDescription cfgDes, boolean writable) {
+ List result = new ArrayList();
- ICProjectDescription des = model.getProjectDescription(project, writable);
- if (des == null)
- continue;
+ if (cfgDes != null) {
+ Map map = cfgDes.getReferenceInfo();
+ if (map.size() != 0) {
+ IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
+ CoreModel model = CoreModel.getDefault();
+ for (Map.Entry entry : map.entrySet()) {
+ String projName = entry.getKey();
+ String cfgId = entry.getValue();
+ IProject project = root.getProject(projName);
+ if (!project.isAccessible())
+ continue;
- ICConfigurationDescription refCfgDes;
- if (cfgId != null && cfgId.length() > 0) {
- refCfgDes= des.getConfigurationById(cfgId);
- } else {
- refCfgDes= des.getActiveConfiguration();
- }
- if (refCfgDes != null)
- result.add(refCfgDes);
- }
- }
- }
-
- return result.toArray(new ICConfigurationDescription[result.size()]);
- }
-
- /**
+ ICProjectDescription des = null;
+ try {
+ des = model.getProjectDescription(project, writable);
+ } catch (Exception e) {
+ // log the error except if the project got closed in another thread which is OK
+ if (project.isAccessible()) {
+ CCorePlugin.log(e);
+ }
+ }
+ if (des == null)
+ continue;
+
+ ICConfigurationDescription refCfgDes;
+ if (cfgId != null && cfgId.length() > 0) {
+ refCfgDes= des.getConfigurationById(cfgId);
+ } else {
+ refCfgDes= des.getActiveConfiguration();
+ }
+ if (refCfgDes != null)
+ result.add(refCfgDes);
+ }
+ }
+ }
+
+ return result.toArray(new ICConfigurationDescription[result.size()]);
+ }
+
+ /**
* Returns the list of all configuration descriptions which directly reference
* the specified configuration description. Returns an empty array if there are
* no referencing configuration descriptions.
*
* @since 4.0
- * @param cfgDes
- * @param writable - specifies whether the returned descriptions should be writable or read-only
- * @return a list of configuration descriptions referencing this configuration description
- * @see CoreModelUtil#getReferencedConfigurationDescriptions(ICConfigurationDescription, boolean)
- */
- public static ICConfigurationDescription[] getReferencingConfigurationDescriptions(ICConfigurationDescription cfgDes, boolean writable) {
- List result = new ArrayList();
-
- if (cfgDes != null) {
- CoreModel core= CoreModel.getDefault();
- IProject[] projects= ResourcesPlugin.getWorkspace().getRoot().getProjects();
+ * @param cfgDes
+ * @param writable - specifies whether the returned descriptions should be writable or read-only
+ * @return a list of configuration descriptions referencing this configuration description
+ * @see CoreModelUtil#getReferencedConfigurationDescriptions(ICConfigurationDescription, boolean)
+ */
+ public static ICConfigurationDescription[] getReferencingConfigurationDescriptions(ICConfigurationDescription cfgDes, boolean writable) {
+ List result = new ArrayList();
+
+ if (cfgDes != null) {
+ CoreModel core= CoreModel.getDefault();
+ IProject[] projects= ResourcesPlugin.getWorkspace().getRoot().getProjects();
+
+ for (IProject cproject : projects) {
+ ICProjectDescription prjDes= core.getProjectDescription(cproject, writable);
+ // In case this is not a CDT project the description will be null, so check for null
+ if (prjDes != null) {
+ ICConfigurationDescription[] cfgDscs= prjDes.getConfigurations();
+ for (ICConfigurationDescription cfgDsc : cfgDscs) {
+ ICConfigurationDescription[] references = getReferencedConfigurationDescriptions(cfgDsc, false);
+ for (ICConfigurationDescription reference : references) {
+ if (reference != null && reference.getId().equals(cfgDes.getId())) {
+ result.add(cfgDsc);
+ break;
+ }
+ }
+ }
+ }
+ }
+ }
- for (IProject cproject : projects) {
- ICProjectDescription prjDes= core.getProjectDescription(cproject, writable);
- // In case this is not a CDT project the description will be null, so check for null
- if (prjDes != null) {
- ICConfigurationDescription[] cfgDscs= prjDes.getConfigurations();
- for (ICConfigurationDescription cfgDsc : cfgDscs) {
- ICConfigurationDescription[] references = getReferencedConfigurationDescriptions(cfgDsc, false);
- for (ICConfigurationDescription reference : references) {
- if (reference != null && reference.getId().equals(cfgDes.getId())) {
- result.add(cfgDsc);
- break;
- }
- }
- }
- }
- }
- }
-
return result.toArray(new ICConfigurationDescription[result.size()]);
}
-
- /**
- * Returns binary parser IDs for configurations
- * @param cfgs - array of configurations where we need search
- * @return - array of binary parser ids (Strings)
- */
+
+ /**
+ * Returns binary parser IDs for configurations
+ * @param cfgs - array of configurations where we need search
+ * @return - array of binary parser ids (Strings)
+ */
public static String[] getBinaryParserIds(ICConfigurationDescription[] cfgs) {
if (cfgs == null || cfgs.length == 0)
return null;