Index: pkg/kernel/lib/analyzer/loader.dart |
diff --git a/pkg/kernel/lib/analyzer/loader.dart b/pkg/kernel/lib/analyzer/loader.dart |
index ae169260ea99300157ce6e8bd8f436305648dfc9..c3b010be69cb2cb806cc6e7b8555d22ca9d6ce8f 100644 |
--- a/pkg/kernel/lib/analyzer/loader.dart |
+++ b/pkg/kernel/lib/analyzer/loader.dart |
@@ -16,6 +16,7 @@ import 'package:analyzer/src/generated/engine.dart'; |
import 'package:analyzer/src/generated/parser.dart'; |
import 'package:analyzer/src/generated/sdk.dart'; |
import 'package:analyzer/src/generated/source_io.dart'; |
+import 'package:analyzer/src/summary/summary_sdk.dart'; |
import 'package:kernel/application_root.dart'; |
import 'package:package_config/discovery.dart'; |
import 'package:package_config/packages.dart'; |
@@ -34,16 +35,29 @@ class DartOptions { |
/// True if the Dart SDK should be loaded in strong mode. |
bool strongModeSdk; |
+ |
+ /// Path to the sdk sources, ignored if sdkSummary is provided. |
String sdk; |
+ |
+ /// Path to a summary of the sdk sources. |
+ String sdkSummary; |
+ |
+ /// Path to the `.packages` file. |
String packagePath; |
+ |
+ /// Root used to relativize app file-urls, making them machine agnostic. |
ApplicationRoot applicationRoot; |
+ |
Map<Uri, Uri> customUriMappings; |
+ |
+ /// Environment definitions provided via `-Dkey=value`. |
Map<String, String> declaredVariables; |
DartOptions( |
{bool strongMode: false, |
bool strongModeSdk, |
this.sdk, |
+ this.sdkSummary, |
this.packagePath, |
ApplicationRoot applicationRoot, |
Map<Uri, Uri> customUriMappings, |
@@ -620,20 +634,26 @@ class DartLoader implements ReferenceLevelLoader { |
} |
} |
- void loadEverything({Target target}) { |
- ensureLibraryIsLoaded(getLibraryReference(getDartCoreLibrary())); |
- if (target != null) { |
- for (var uri in target.extraRequiredLibraries) { |
- var library = _findLibraryElement(uri); |
- if (library == null) { |
- errors.add('Could not find required library $uri'); |
- continue; |
+ void loadEverything({Target target, bool compileSdk}) { |
+ compileSdk ??= true; |
+ if (compileSdk) { |
+ ensureLibraryIsLoaded(getLibraryReference(getDartCoreLibrary())); |
+ if (target != null) { |
+ for (var uri in target.extraRequiredLibraries) { |
+ var library = _findLibraryElement(uri); |
+ if (library == null) { |
+ errors.add('Could not find required library $uri'); |
+ continue; |
+ } |
+ ensureLibraryIsLoaded(getLibraryReference(library)); |
} |
- ensureLibraryIsLoaded(getLibraryReference(library)); |
} |
} |
for (int i = 0; i < repository.libraries.length; ++i) { |
- ensureLibraryIsLoaded(repository.libraries[i]); |
+ var library = repository.libraries[i]; |
+ if (compileSdk || library.importUri.scheme != 'dart') { |
+ ensureLibraryIsLoaded(library); |
+ } |
} |
} |
@@ -660,11 +680,11 @@ class DartLoader implements ReferenceLevelLoader { |
} |
} |
- ast.Program loadProgram(Uri mainLibrary, {Target target}) { |
+ ast.Program loadProgram(Uri mainLibrary, {Target target, bool compileSdk}) { |
ast.Library library = repository |
.getLibraryReference(applicationRoot.relativeUri(mainLibrary)); |
ensureLibraryIsLoaded(library); |
- loadEverything(target: target); |
+ loadEverything(target: target, compileSdk: compileSdk); |
var program = new ast.Program(repository.libraries); |
program.mainMethod = library.procedures.firstWhere( |
(member) => member.name?.name == 'main', |
@@ -763,7 +783,10 @@ AnalysisOptions createAnalysisOptions(bool strongMode) { |
..enableSuperMixins = true; |
} |
-DartSdk createDartSdk(String path, {bool strongMode}) { |
+DartSdk createDartSdk(String path, {bool strongMode, bool isSummary}) { |
+ if (isSummary) { |
+ return new SummaryBasedDartSdk(path, strongMode); |
+ } |
var resources = PhysicalResourceProvider.INSTANCE; |
return new FolderBasedDartSdk(resources, resources.getFolder(path)) |
..context |
@@ -806,7 +829,9 @@ class CustomUriResolver extends UriResolver { |
AnalysisContext createContext(DartOptions options, Packages packages, |
{DartSdk dartSdk}) { |
- dartSdk ??= createDartSdk(options.sdk, strongMode: options.strongModeSdk); |
+ bool fromSummary = options.sdkSummary != null; |
+ dartSdk ??= createDartSdk(fromSummary ? options.sdkSummary : options.sdk, |
+ strongMode: options.strongModeSdk, isSummary: fromSummary); |
var resourceProvider = PhysicalResourceProvider.INSTANCE; |
var resourceUriResolver = new ResourceUriResolver(resourceProvider); |