1010using System . Text . RegularExpressions ;
1111#if DEBUG
1212using System . Threading ;
13+
1314#endif
1415using Microsoft . Build . BackEnd . Logging ;
1516using Microsoft . Build . Construction ;
@@ -51,17 +52,12 @@ internal class SdkResolverService : ISdkResolverService
5152 /// <summary>
5253 /// Stores the list of manifests of specific SDK resolvers which could be loaded.
5354 /// </summary>
54- private IReadOnlyList < SdkResolverManifest > _specificResolversManifestsRegistry ;
55+ protected IReadOnlyList < SdkResolverManifest > _specificResolversManifestsRegistry ;
5556
5657 /// <summary>
5758 /// Stores the list of manifests of general SDK resolvers which could be loaded.
5859 /// </summary>
59- private IReadOnlyList < SdkResolverManifest > _generalResolversManifestsRegistry ;
60-
61- #if DEBUG
62- internal bool _fake_initialization = false ;
63- internal IReadOnlyList < SdkResolverManifest > _fakeManifestRegistry ;
64- #endif
60+ protected IReadOnlyList < SdkResolverManifest > _generalResolversManifestsRegistry ;
6561
6662 /// <summary>
6763 /// Stores an <see cref="SdkResolverLoader"/> which can load registered SDK resolvers.
@@ -70,7 +66,7 @@ internal class SdkResolverService : ISdkResolverService
7066 /// Unless the 17.10 changewave is disabled, we use a singleton instance because the set of SDK resolvers
7167 /// is not expected to change during the lifetime of the process.
7268 /// </remarks>
73- private SdkResolverLoader _sdkResolverLoader = ChangeWaves . AreFeaturesEnabled ( ChangeWaves . Wave17_10 )
69+ protected SdkResolverLoader _sdkResolverLoader = ChangeWaves . AreFeaturesEnabled ( ChangeWaves . Wave17_10 )
7470 ? CachingSdkResolverLoader . Instance
7571 : new SdkResolverLoader ( ) ;
7672
@@ -186,13 +182,7 @@ private SdkResult ResolveSdkUsingResolversWithPatternsFirst(int submissionId, Sd
186182 List < SdkResolverManifest > matchingResolversManifests = new ( ) ;
187183 foreach ( SdkResolverManifest manifest in _specificResolversManifestsRegistry )
188184 {
189- #if DEBUG
190- // If we're checking about the race condition, we should better make sure we would hit it.
191- if ( _fake_initialization )
192- {
193- Thread . Sleep ( 10 ) ;
194- }
195- #endif
185+ WaitIfTestRequires ( ) ;
196186 try
197187 {
198188 if ( manifest . ResolvableSdkRegex . IsMatch ( sdk . Name ) )
@@ -402,33 +392,20 @@ private bool TryResolveSdkUsingSpecifiedResolvers(
402392 return false ;
403393 }
404394
395+ internal virtual void WaitIfTestRequires ( ) { }
396+
397+ internal virtual IReadOnlyList < SdkResolverManifest > GetResolverManifests ( ElementLocation location ) => _sdkResolverLoader . GetResolversManifests ( location ) ;
398+
405399 /// <summary>
406400 /// Used for unit tests only. This is currently only called through reflection in Microsoft.Build.Engine.UnitTests.TransientSdkResolution.CallResetForTests
407401 /// </summary>
408402 /// <param name="resolverLoader">An <see cref="SdkResolverLoader"/> to use for loading SDK resolvers.</param>
409403 /// <param name="resolvers">Explicit set of SdkResolvers to use for all SDK resolution.</param>
410- /// <param name="contentionConditionTest"> Debug parameter for initializing only the stuff required for the Contention Condition check test.</param>
411- internal void InitializeForTests ( SdkResolverLoader resolverLoader = null , IReadOnlyList < SdkResolver > resolvers = null , bool contentionConditionTest = false )
404+ internal virtual void InitializeForTests ( SdkResolverLoader resolverLoader = null , IReadOnlyList < SdkResolver > resolvers = null )
412405 {
413406 if ( resolverLoader != null )
414407 {
415408 _sdkResolverLoader = resolverLoader ;
416- #if DEBUG
417- if ( contentionConditionTest )
418- {
419- _fake_initialization = true ;
420- List < SdkResolverManifest > manifests = new List < SdkResolverManifest > ( ) ;
421- for ( int i = 1 ; i != 20 ; i ++ )
422- {
423- var man = new SdkResolverManifest ( DisplayName : "TestResolversManifest" , Path : null , ResolvableSdkRegex : new Regex ( "abc" ) ) ;
424- manifests . Add ( man ) ;
425- man = new SdkResolverManifest ( DisplayName : "TestResolversManifest" , Path : null , null ) ;
426- manifests . Add ( man ) ;
427- }
428- _fakeManifestRegistry = manifests . AsReadOnly ( ) ;
429- return ;
430- }
431- #endif
432409 }
433410 else
434411 {
@@ -499,19 +476,9 @@ private void RegisterResolversManifests(ElementLocation location)
499476 {
500477 return ;
501478 }
502- IReadOnlyList < SdkResolverManifest > allResolversManifests ;
503- #if DEBUG
504- if ( _fake_initialization )
505- {
506- allResolversManifests = _fakeManifestRegistry ;
507- }
508- else
509- #endif
510- {
511- allResolversManifests = _sdkResolverLoader . GetResolversManifests ( location ) ;
512- }
513479
514- _manifestToResolvers = new Dictionary < SdkResolverManifest , IReadOnlyList < SdkResolver > > ( ) ;
480+ IReadOnlyList < SdkResolverManifest > allResolversManifests = GetResolverManifests ( location ) ;
481+ _manifestToResolvers = new Dictionary < SdkResolverManifest , IReadOnlyList < SdkResolver > > ( ) ;
515482
516483 SdkResolverManifest sdkDefaultResolversManifest = null ;
517484#if NETCOREAPP
@@ -535,12 +502,8 @@ private void RegisterResolversManifests(ElementLocation location)
535502 // Otherwise race can happen, see https://github.com/dotnet/msbuild/issues/7927
536503 foreach ( SdkResolverManifest manifest in allResolversManifests )
537504 {
538- #if DEBUG
539- if ( _fake_initialization )
540- {
541- Thread . Sleep ( 10 ) ;
542- }
543- #endif
505+ WaitIfTestRequires ( ) ;
506+
544507 if ( manifest . ResolvableSdkRegex == null )
545508 {
546509 generalResolversManifestsRegistryPlaceholder . Add ( manifest ) ;
0 commit comments