public BuildRequestConfiguration GetMatchingConfiguration(ConfigurationMetadata configMetadata) { ErrorUtilities.VerifyThrowArgumentNull(configMetadata, nameof(configMetadata)); lock (_lockObject) { if (!_configurationIdsByMetadata.TryGetValue(configMetadata, out int configId)) { return(null); } return(_configurations[configId]); } }
public BuildRequestConfiguration GetMatchingConfiguration(ConfigurationMetadata configMetadata, ConfigCreateCallback callback, bool loadProject) { lock (_lockObject) { BuildRequestConfiguration configuration = GetMatchingConfiguration(configMetadata); // If there is no matching configuration, let the caller create one. if (configuration == null) { configuration = callback(null, loadProject); AddConfiguration(configuration); } else if (loadProject) { // We already had a configuration, load the project // If it exists but it cached, retrieve it if (configuration.IsCached) { configuration.RetrieveFromCache(); } // If it is still not loaded (because no instance was ever created here), let the caller populate the instance. if (!configuration.IsLoaded) { callback(configuration, loadProject: true); } } // In either case, make sure the project is loaded if it was requested. if (loadProject) { ErrorUtilities.VerifyThrow(configuration.IsLoaded, "Request to create configuration did not honor request to also load project."); } return(configuration); } }