@@ -101,7 +101,7 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
101101 userBuilders = < Uri , LibraryBuilder > {};
102102 platformBuilders = < LibraryBuilder > [];
103103 dillLoadedData.loader.builders.forEach ((uri, builder) {
104- if (builder.fileUri .scheme == "dart" ) {
104+ if (builder.uri .scheme == "dart" ) {
105105 platformBuilders.add (builder);
106106 } else {
107107 userBuilders[uri] = builder;
@@ -110,7 +110,7 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
110110 if (userBuilders.isEmpty) userBuilders = null ;
111111 }
112112
113- List <Uri > invalidatedUris = this .invalidatedUris.toList ();
113+ Set <Uri > invalidatedUris = this .invalidatedUris.toSet ();
114114 this .invalidatedUris.clear ();
115115 if (fullComponent) {
116116 invalidatedUris.add (entryPoint);
@@ -156,7 +156,7 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
156156 List <Library > librariesWithSdk = userCode.component.libraries;
157157 List <Library > libraries = < Library > [];
158158 for (Library lib in librariesWithSdk) {
159- if (lib.fileUri .scheme == "dart" ) continue ;
159+ if (lib.importUri .scheme == "dart" ) continue ;
160160 libraries.add (lib);
161161 break ;
162162 }
@@ -199,20 +199,20 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
199199 IncrementalCompilerData data) {
200200 Map <Uri , Library > libraryMap = < Uri , Library > {};
201201 for (Library library in libraries) {
202- libraryMap[library.fileUri ] = library;
202+ libraryMap[library.importUri ] = library;
203203 }
204204 List <Uri > worklist = new List <Uri >.from (libraryMap.keys);
205- worklist.add (mainMethod? .enclosingLibrary? .fileUri );
205+ worklist.add (mainMethod? .enclosingLibrary? .importUri );
206206 if (entry != null ) {
207207 worklist.add (entry);
208208 }
209209
210210 Map <Uri , Library > potentiallyReferencedLibraries = < Uri , Library > {};
211211 for (LibraryBuilder library in reusedLibraries) {
212- if (library.fileUri .scheme == "dart" ) continue ;
212+ if (library.uri .scheme == "dart" ) continue ;
213213 Library lib = library.target;
214- potentiallyReferencedLibraries[library.fileUri ] = lib;
215- libraryMap[library.fileUri ] = lib;
214+ potentiallyReferencedLibraries[library.uri ] = lib;
215+ libraryMap[library.uri ] = lib;
216216 }
217217
218218 LibraryGraph graph = new LibraryGraph (libraryMap);
@@ -325,45 +325,52 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
325325 }
326326
327327 List <LibraryBuilder > computeReusedLibraries (
328- Iterable <Uri > invalidatedUris, UriTranslator uriTranslator) {
328+ Set <Uri > invalidatedUris, UriTranslator uriTranslator) {
329329 if (userCode == null && userBuilders == null ) {
330330 return < LibraryBuilder > [];
331331 }
332332
333- // [invalidatedUris] converted to a set.
334- Set <Uri > invalidatedFileUris = invalidatedUris.toSet ();
335-
336333 // Maps all non-platform LibraryBuilders from their import URI.
337334 Map <Uri , LibraryBuilder > builders = < Uri , LibraryBuilder > {};
338335
339336 // Invalidated URIs translated back to their import URI (package:, dart:,
340337 // etc.).
341338 List <Uri > invalidatedImportUris = < Uri > [];
342339
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+
343352 // Compute [builders] and [invalidatedImportUris].
344353 addBuilderAndInvalidateUris (Uri uri, LibraryBuilder library,
345354 [bool recursive = true ]) {
346355 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)) {
356357 invalidatedImportUris.add (uri);
357358 }
358- if (! recursive) return ;
359359 if (library is SourceLibraryBuilder ) {
360360 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+ }
362365 }
363366 } else if (library is DillLibraryBuilder ) {
364- for (LibraryPart part in library.library .parts) {
367+ for (LibraryPart part in library.target .parts) {
365368 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+ }
367374 }
368375 }
369376 }
@@ -417,7 +424,10 @@ class IncrementalCompiler implements IncrementalKernelGenerator {
417424 List <LibraryBuilder > result = < LibraryBuilder > [];
418425 for (LibraryBuilder builder in builders.values) {
419426 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 ;
421431 result.add (builder);
422432 }
423433 return result;
0 commit comments