Index: sdk/lib/_internal/compiler/implementation/js_backend/namer.dart |
diff --git a/sdk/lib/_internal/compiler/implementation/js_backend/namer.dart b/sdk/lib/_internal/compiler/implementation/js_backend/namer.dart |
index fa6f91e0a59498dc43e58a6202955993b3772208..5b93c92c50abf1f37f5d4e813a0d43a8cbdd7ccb 100644 |
--- a/sdk/lib/_internal/compiler/implementation/js_backend/namer.dart |
+++ b/sdk/lib/_internal/compiler/implementation/js_backend/namer.dart |
@@ -539,11 +539,13 @@ class Namer implements ClosureNamer { |
} |
// Use the unminified names here to construct the interceptor names. This |
// helps ensure that they don't all suddenly change names due to a name |
- // clash in the minifier, which would affect the diff size. |
+ // clash in the minifier, which would affect the diff size. Sort the names |
+ // of the classes to ensure name is stable and predicatble for the suggested |
+ // names. |
StringBuffer buffer = new StringBuffer('${element.name.slowToString()}\$'); |
- for (ClassElement cls in classes) { |
- buffer.add(cls.name.slowToString()); |
- } |
+ List<String> names = classes.map((cls) => cls.name.slowToString()).toList(); |
+ names.sort(); |
+ names.forEach(buffer.add); |
return getMappedGlobalName(buffer.toString()); |
} |