@@ -101,7 +101,7 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
101
101
userBuilders = < Uri , LibraryBuilder > {};
102
102
platformBuilders = < LibraryBuilder > [];
103
103
dillLoadedData.loader.builders.forEach ((uri, builder) {
104
- if (builder.fileUri .scheme == "dart" ) {
104
+ if (builder.uri .scheme == "dart" ) {
105
105
platformBuilders.add (builder);
106
106
} else {
107
107
userBuilders[uri] = builder;
@@ -110,7 +110,7 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
110
110
if (userBuilders.isEmpty) userBuilders = null ;
111
111
}
112
112
113
- List <Uri > invalidatedUris = this .invalidatedUris.toList ();
113
+ Set <Uri > invalidatedUris = this .invalidatedUris.toSet ();
114
114
this .invalidatedUris.clear ();
115
115
if (fullComponent) {
116
116
invalidatedUris.add (entryPoint);
@@ -156,7 +156,7 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
156
156
List <Library > librariesWithSdk = userCode.component.libraries;
157
157
List <Library > libraries = < Library > [];
158
158
for (Library lib in librariesWithSdk) {
159
- if (lib.fileUri .scheme == "dart" ) continue ;
159
+ if (lib.importUri .scheme == "dart" ) continue ;
160
160
libraries.add (lib);
161
161
break ;
162
162
}
@@ -199,20 +199,20 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
199
199
IncrementalCompilerData data) {
200
200
Map <Uri , Library > libraryMap = < Uri , Library > {};
201
201
for (Library library in libraries) {
202
- libraryMap[library.fileUri ] = library;
202
+ libraryMap[library.importUri ] = library;
203
203
}
204
204
List <Uri > worklist = new List <Uri >.from (libraryMap.keys);
205
- worklist.add (mainMethod? .enclosingLibrary? .fileUri );
205
+ worklist.add (mainMethod? .enclosingLibrary? .importUri );
206
206
if (entry != null ) {
207
207
worklist.add (entry);
208
208
}
209
209
210
210
Map <Uri , Library > potentiallyReferencedLibraries = < Uri , Library > {};
211
211
for (LibraryBuilder library in reusedLibraries) {
212
- if (library.fileUri .scheme == "dart" ) continue ;
212
+ if (library.uri .scheme == "dart" ) continue ;
213
213
Library lib = library.target;
214
- potentiallyReferencedLibraries[library.fileUri ] = lib;
215
- libraryMap[library.fileUri ] = lib;
214
+ potentiallyReferencedLibraries[library.uri ] = lib;
215
+ libraryMap[library.uri ] = lib;
216
216
}
217
217
218
218
LibraryGraph graph = new LibraryGraph (libraryMap);
@@ -325,45 +325,52 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
325
325
}
326
326
327
327
List <LibraryBuilder > computeReusedLibraries (
328
- Iterable <Uri > invalidatedUris, UriTranslator uriTranslator) {
328
+ Set <Uri > invalidatedUris, UriTranslator uriTranslator) {
329
329
if (userCode == null && userBuilders == null ) {
330
330
return < LibraryBuilder > [];
331
331
}
332
332
333
- // [invalidatedUris] converted to a set.
334
- Set <Uri > invalidatedFileUris = invalidatedUris.toSet ();
335
-
336
333
// Maps all non-platform LibraryBuilders from their import URI.
337
334
Map <Uri , LibraryBuilder > builders = < Uri , LibraryBuilder > {};
338
335
339
336
// Invalidated URIs translated back to their import URI (package:, dart:,
340
337
// etc.).
341
338
List <Uri > invalidatedImportUris = < Uri > [];
342
339
340
+ bool isInvalidated (Uri importUri, Uri fileUri) {
341
+ if (invalidatedUris.contains (importUri) ||
342
+ (importUri != fileUri && invalidatedUris.contains (fileUri))) {
343
+ return true ;
344
+ }
345
+ if (importUri.scheme == "package" &&
346
+ uriTranslator.translate (importUri, false ) != fileUri) {
347
+ return true ;
348
+ }
349
+ return false ;
350
+ }
351
+
343
352
// Compute [builders] and [invalidatedImportUris].
344
353
addBuilderAndInvalidateUris (Uri uri, LibraryBuilder library,
345
354
[bool recursive = true ]) {
346
355
builders[uri] = library;
347
- if (invalidatedFileUris.contains (uri) ||
348
- (uri != library.fileUri &&
349
- invalidatedFileUris.contains (library.fileUri)) ||
350
- (library is DillLibraryBuilder &&
351
- uri != library.library.fileUri &&
352
- invalidatedFileUris.contains (library.library.fileUri)) ||
353
- (library.uri.scheme == "package" &&
354
- uriTranslator.translate (library.uri, false ) !=
355
- library.target.fileUri)) {
356
+ if (isInvalidated (uri, library.target.fileUri)) {
356
357
invalidatedImportUris.add (uri);
357
358
}
358
- if (! recursive) return ;
359
359
if (library is SourceLibraryBuilder ) {
360
360
for (LibraryBuilder part in library.parts) {
361
- addBuilderAndInvalidateUris (part.uri, part, false );
361
+ if (isInvalidated (part.uri, part.fileUri)) {
362
+ invalidatedImportUris.add (part.uri);
363
+ builders[part.uri] = part;
364
+ }
362
365
}
363
366
} else if (library is DillLibraryBuilder ) {
364
- for (LibraryPart part in library.library .parts) {
367
+ for (LibraryPart part in library.target .parts) {
365
368
Uri partUri = library.uri.resolve (part.partUri);
366
- addBuilderAndInvalidateUris (partUri, library, false );
369
+ Uri fileUri = library.library.fileUri.resolve (part.partUri);
370
+ if (isInvalidated (partUri, fileUri)) {
371
+ invalidatedImportUris.add (partUri);
372
+ builders[partUri] = library;
373
+ }
367
374
}
368
375
}
369
376
}
@@ -417,7 +424,10 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
417
424
List <LibraryBuilder > result = < LibraryBuilder > [];
418
425
for (LibraryBuilder builder in builders.values) {
419
426
if (builder.isPart) continue ;
420
- if (! seenUris.add (builder.fileUri)) continue ;
427
+ // TODO(jensj/ahe): This line can probably go away once
428
+ // https://dart-review.googlesource.com/47442 lands.
429
+ if (builder.isPatch) continue ;
430
+ if (! seenUris.add (builder.uri)) continue ;
421
431
result.add (builder);
422
432
}
423
433
return result;
0 commit comments