1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-08-11 10:15:39 +02:00

bug 416628: to fix intermittently failing test case

This commit is contained in:
Andrew Gvozdev 2013-09-12 08:47:10 -04:00
parent 6188a361c0
commit 75d1510005

View file

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