@@ -17,34 +17,6 @@ public class WalkContext
17
17
{
18
18
private readonly IDictionary < string , Item > _usedItems = new Dictionary < string , Item > ( ) ;
19
19
20
- void ForEach < TState > ( Node root , TState state , Func < Node , TState , TState > visitor )
21
- {
22
- // breadth-first walk of Node tree
23
-
24
- var queue = new Queue < Tuple < Node , TState > > ( ) ;
25
- var patience = 10000 ;
26
- queue . Enqueue ( Tuple . Create ( root , state ) ) ;
27
- while ( ! queue . IsEmpty ( ) && -- patience != 0 )
28
- {
29
- var work = queue . Dequeue ( ) ;
30
- var innerState = visitor ( work . Item1 , work . Item2 ) ;
31
- foreach ( var innerNode in work . Item1 . InnerNodes )
32
- {
33
- queue . Enqueue ( Tuple . Create ( innerNode , innerState ) ) ;
34
- }
35
- }
36
- }
37
-
38
- private void ForEach ( Node root , Action < Node > visitor )
39
- {
40
- // breadth-first walk of Node tree, without TState parameter
41
- ForEach ( root , 0 , ( node , _ ) =>
42
- {
43
- visitor ( node ) ;
44
- return 0 ;
45
- } ) ;
46
- }
47
-
48
20
public void Walk (
49
21
IEnumerable < IDependencyProvider > dependencyResolvers ,
50
22
string name ,
@@ -133,6 +105,7 @@ public void Walk(
133
105
{
134
106
// Create a picture of what has not been rejected yet
135
107
var tracker = new Tracker ( ) ;
108
+
136
109
ForEach ( root , true , ( node , state ) =>
137
110
{
138
111
if ( ! state || node . Disposition == Disposition . Rejected )
@@ -141,6 +114,7 @@ public void Walk(
141
114
node . Disposition = Disposition . Rejected ;
142
115
return false ;
143
116
}
117
+
144
118
tracker . Track ( node . Item ) ;
145
119
return true ;
146
120
} ) ;
@@ -164,14 +138,17 @@ public void Walk(
164
138
{
165
139
return "Rejected" ;
166
140
}
141
+
167
142
if ( state == "Walking" && tracker . IsDisputed ( node . Item ) )
168
143
{
169
144
return "Ambiguous" ;
170
145
}
146
+
171
147
if ( state == "Ambiguous" )
172
148
{
173
149
tracker . MarkAmbiguous ( node . Item ) ;
174
150
}
151
+
175
152
return state ;
176
153
} ) ;
177
154
@@ -182,18 +159,22 @@ public void Walk(
182
159
{
183
160
return false ;
184
161
}
162
+
185
163
if ( tracker . IsAmbiguous ( node . Item ) )
186
164
{
187
165
return false ;
188
166
}
167
+
189
168
if ( node . Disposition == Disposition . Acceptable )
190
169
{
191
170
node . Disposition = tracker . IsBestVersion ( node . Item ) ? Disposition . Accepted : Disposition . Rejected ;
192
171
}
172
+
193
173
return node . Disposition == Disposition . Accepted ;
194
174
} ) ;
195
175
196
176
incomplete = false ;
177
+
197
178
ForEach ( root , node => incomplete |= node . Disposition == Disposition . Acceptable ) ;
198
179
199
180
// uncomment in case of emergencies: TraceState(root);
@@ -212,6 +193,7 @@ public void Walk(
212
193
{
213
194
_usedItems [ node . Item . Key . Name ] = node . Item ;
214
195
}
196
+
215
197
return true ;
216
198
} ) ;
217
199
@@ -235,10 +217,39 @@ private void TraceState(Node root)
235
217
{
236
218
elt . WriteTo ( writer ) ;
237
219
}
220
+
238
221
Trace . TraceInformation ( "[{0}] Current State\r \n {1}" , GetType ( ) . Name , sb ) ;
239
222
}
240
223
241
- public enum Disposition
224
+ private static void ForEach < TState > ( Node root , TState state , Func < Node , TState , TState > visitor )
225
+ {
226
+ // breadth-first walk of Node tree
227
+
228
+ var queue = new Queue < Tuple < Node , TState > > ( ) ;
229
+ var patience = 10000 ;
230
+ queue . Enqueue ( Tuple . Create ( root , state ) ) ;
231
+ while ( ! queue . IsEmpty ( ) && -- patience != 0 )
232
+ {
233
+ var work = queue . Dequeue ( ) ;
234
+ var innerState = visitor ( work . Item1 , work . Item2 ) ;
235
+ foreach ( var innerNode in work . Item1 . InnerNodes )
236
+ {
237
+ queue . Enqueue ( Tuple . Create ( innerNode , innerState ) ) ;
238
+ }
239
+ }
240
+ }
241
+
242
+ private static void ForEach ( Node root , Action < Node > visitor )
243
+ {
244
+ // breadth-first walk of Node tree, without TState parameter
245
+ ForEach ( root , 0 , ( node , _ ) =>
246
+ {
247
+ visitor ( node ) ;
248
+ return 0 ;
249
+ } ) ;
250
+ }
251
+
252
+ private enum Disposition
242
253
{
243
254
Acceptable ,
244
255
Rejected ,
@@ -287,6 +298,7 @@ private Item Resolve(
287
298
Dependencies = hit . Item2 . Dependencies ,
288
299
Resolver = hit . Item1 ,
289
300
} ;
301
+
290
302
resolvedItems [ packageKey ] = item ;
291
303
resolvedItems [ hit . Item2 . Identity ] = item ;
292
304
return item ;
@@ -301,7 +313,7 @@ public void Populate(FrameworkName frameworkName, IList<LibraryDescription> libr
301
313
var resolver = groupByResolver . Key ;
302
314
var packageKeys = groupByResolver . Select ( x => x . Value . Key ) . ToList ( ) ;
303
315
304
- Trace . TraceInformation ( "[{0}]: " + String . Join ( ", " , packageKeys ) , resolver . GetType ( ) . Name ) ;
316
+ Trace . TraceInformation ( "[{0}]: " + string . Join ( ", " , packageKeys ) , resolver . GetType ( ) . Name ) ;
305
317
306
318
var descriptions = groupByResolver . Select ( entry =>
307
319
{
@@ -334,7 +346,7 @@ private IEnumerable<LibraryDependency> CorrectDependencyVersion(LibraryDependenc
334
346
}
335
347
}
336
348
337
- public class Node
349
+ private class Node
338
350
{
339
351
public Node ( )
340
352
{
@@ -356,15 +368,15 @@ public override string ToString()
356
368
}
357
369
358
370
[ DebuggerDisplay ( "{Key}" ) ]
359
- public class Item
371
+ private class Item
360
372
{
361
373
public LibraryDescription Description { get ; set ; }
362
374
public Library Key { get ; set ; }
363
375
public IDependencyProvider Resolver { get ; set ; }
364
376
public IEnumerable < LibraryDependency > Dependencies { get ; set ; }
365
377
}
366
378
367
- public class Tracker
379
+ private class Tracker
368
380
{
369
381
class Entry
370
382
{
0 commit comments