mirror of
https://github.com/dart-lang/sdk
synced 2024-10-02 23:59:16 +00:00
Macro. Optimize for large number of libraries in the library cycle.
See https://dart-review.googlesource.com/c/sdk/+/361160/1 Base 116399 115298 118562 Get LibraryElement from target 61165 62028 62587 Use identical() for LibraryElement 22795 23462 22797 Use for-index loop instead of for-each 13651 11733 11529 Use Map<LibraryElement, List<Application>> 10812 9922 9597 Change-Id: If06075e7d4264dfd21b9c9ef8b310f84f2f9bb6e Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/361130 Reviewed-by: Keerti Parthasarathy <keertip@google.com> Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
This commit is contained in:
parent
1cd4705935
commit
6e11b5dd40
|
@ -90,7 +90,8 @@ class LibraryMacroApplier {
|
|||
/// 1. inner before outer
|
||||
/// 2. right to left
|
||||
/// 3. source order
|
||||
final List<_MacroApplication> _applications = [];
|
||||
final Map<LibraryElementImpl, List<_MacroApplication>> _libraryApplications =
|
||||
Map.identity();
|
||||
|
||||
/// The applications that currently run the declarations phase.
|
||||
final List<_MacroApplication> _declarationsPhaseRunning = [];
|
||||
|
@ -520,7 +521,7 @@ class LibraryMacroApplier {
|
|||
phasesToExecute: phasesToExecute,
|
||||
);
|
||||
|
||||
_applications.add(application);
|
||||
_libraryApplications.add(libraryElement, application);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -733,14 +734,17 @@ class LibraryMacroApplier {
|
|||
required LibraryElementImpl library,
|
||||
required Element? targetElement,
|
||||
}) {
|
||||
for (final application in _applications.reversed) {
|
||||
final applicationElement = application.target.element;
|
||||
if (applicationElement.library != library) {
|
||||
continue;
|
||||
}
|
||||
final applications = _libraryApplications[library];
|
||||
if (applications == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
for (var i = applications.length - 1; i >= 0; i--) {
|
||||
final application = applications[i];
|
||||
if (targetElement != null) {
|
||||
if (applicationElement != targetElement &&
|
||||
applicationElement.enclosingElement != targetElement) {
|
||||
final applicationElement = application.target.element;
|
||||
if (!identical(applicationElement, targetElement) &&
|
||||
!identical(applicationElement.enclosingElement, targetElement)) {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
@ -748,15 +752,21 @@ class LibraryMacroApplier {
|
|||
return application;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
_MacroApplication? _nextForDefinitionsPhase({
|
||||
required LibraryElementImpl library,
|
||||
}) {
|
||||
for (final application in _applications.reversed) {
|
||||
final applicationElement = application.target.element;
|
||||
if (applicationElement.library != library) {
|
||||
final applications = _libraryApplications[library];
|
||||
if (applications == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
for (var i = applications.length - 1; i >= 0; i--) {
|
||||
final application = applications[i];
|
||||
if (!identical(application.target.library, library)) {
|
||||
continue;
|
||||
}
|
||||
if (application.phasesToExecute.remove(macro.Phase.definitions)) {
|
||||
|
@ -769,9 +779,14 @@ class LibraryMacroApplier {
|
|||
_MacroApplication? _nextForTypesPhase({
|
||||
required LibraryElementImpl library,
|
||||
}) {
|
||||
for (final application in _applications.reversed) {
|
||||
final applicationElement = application.target.element;
|
||||
if (applicationElement.library != library) {
|
||||
final applications = _libraryApplications[library];
|
||||
if (applications == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
for (var i = applications.length - 1; i >= 0; i--) {
|
||||
final application = applications[i];
|
||||
if (!identical(application.target.library, library)) {
|
||||
continue;
|
||||
}
|
||||
if (application.phasesToExecute.remove(macro.Phase.types)) {
|
||||
|
|
Loading…
Reference in a new issue