From 43e699e18cd075f5f2cf8fd0f75be584affd639f Mon Sep 17 00:00:00 2001 From: Andrew Ferguson Date: Wed, 21 Mar 2007 11:10:54 +0000 Subject: [PATCH] 174986: make IConfigurationDescription reference utility methods available --- .../core/ManagedBuildManager.java | 55 ++--- .../cdt/core/model/tests/AllCoreTests.java | 2 + ...onfigurationDescriptionReferenceTests.java | 196 ++++++++++++++++++ .../eclipse/cdt/core/model/CoreModelUtil.java | 97 +++++++++ 4 files changed, 313 insertions(+), 37 deletions(-) create mode 100644 core/org.eclipse.cdt.core.tests/model/org/eclipse/cdt/core/settings/model/CConfigurationDescriptionReferenceTests.java diff --git a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ManagedBuildManager.java b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ManagedBuildManager.java index 808ac558df1..bb0422d0e92 100644 --- a/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ManagedBuildManager.java +++ b/build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/core/ManagedBuildManager.java @@ -35,6 +35,7 @@ import javax.xml.parsers.DocumentBuilderFactory; import org.eclipse.cdt.core.AbstractCExtension; import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.model.CoreModel; +import org.eclipse.cdt.core.model.CoreModelUtil; import org.eclipse.cdt.core.model.ICProject; import org.eclipse.cdt.core.model.IPathEntry; import org.eclipse.cdt.core.parser.IScannerInfo; @@ -137,8 +138,8 @@ public class ManagedBuildManager extends AbstractCExtension implements IScannerI private static final String MANIFEST_ERROR_OPTION_CATEGORY = "ManagedBuildManager.error.manifest.option.category"; //$NON-NLS-1$ private static final String MANIFEST_ERROR_OPTION_FILTER = "ManagedBuildManager.error.manifest.option.filter"; //$NON-NLS-1$ private static final String MANIFEST_ERROR_OPTION_VALUEHANDLER = "ManagedBuildManager.error.manifest.option.valuehandler"; //$NON-NLS-1$ - private static final String MANIFEST_ERROR_READ_ONLY = "ManagedBuildManager.error.read_only"; //$NON-NLS-1$ - private static final String MANIFEST_ERROR_WRITE_FAILED = "ManagedBuildManager.error.write_failed"; //$NON-NLS-1$ + private static final String MANIFEST_ERROR_READ_ONLY = "ManagedBuildManager.error.read_only"; //$NON-NLS-1$ + private static final String MANIFEST_ERROR_WRITE_FAILED = "ManagedBuildManager.error.write_failed"; //$NON-NLS-1$ // Error ID's for OptionValidError() public static final int ERROR_CATEGORY = 0; @@ -4120,48 +4121,28 @@ public class ManagedBuildManager extends AbstractCExtension implements IScannerI return BuildPropertyManager.getInstance(); } + /** + * Returns the configurations referenced by this configuration. + * Returns an empty array if there are no referenced configurations. + * + * @see CoreModelUtil.getReferencedConfigurations() + * @return an array of IConfiguration objects referenced by this IConfiguration + */ public static IConfiguration[] getReferencedConfigurations(IConfiguration config){ - IConfiguration[] refConfigs = null; ICConfigurationDescription cfgDes = getDescriptionForConfiguration(config); if(cfgDes != null){ - Map map = cfgDes.getReferenceInfo(); - if(map.size() != 0){ - List list = new ArrayList(map.size()); - IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); - CoreModel model = CoreModel.getDefault(); - for(Iterator iter = map.entrySet().iterator(); iter.hasNext();){ - Map.Entry entry = (Map.Entry)iter.next(); - String projName = (String)entry.getKey(); - String cfgId = (String)entry.getValue(); - IProject project = root.getProject(projName); - if(!project.exists()) - continue; - - ICProjectDescription des = model.getProjectDescription(project, false); - if(des == null) - continue; - - ICConfigurationDescription refCfgDes = cfgId.length() == 0 ? des.getActiveConfiguration() : des.getConfigurationById(cfgId); - if(refCfgDes == null) - continue; - - IConfiguration refdCfg = ManagedBuildManager.getConfigurationForDescription(refCfgDes); - if(refdCfg == null) - continue; - - list.add(refdCfg); - } - - if(list.size() != 0){ - refConfigs = (IConfiguration[])list.toArray(new Configuration[list.size()]); + ICConfigurationDescription[] descs= CoreModelUtil.getReferencedConfigurationDescriptions(cfgDes, false); + List result = new ArrayList(); + for(int i=0; i0) { + refCfgDes= des.getConfigurationById(cfgId); + } else { + refCfgDes= des.getActiveConfiguration(); + } + if(refCfgDes != null) + result.add(refCfgDes); + } + } + } + + return (ICConfigurationDescription[]) 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[] cprojects= ResourcesPlugin.getWorkspace().getRoot().getProjects(); + + for (int i=0; i