| Index: pkg/kernel/lib/analyzer/loader.dart
|
| diff --git a/pkg/kernel/lib/analyzer/loader.dart b/pkg/kernel/lib/analyzer/loader.dart
|
| index 1591bcf71f4e70afb4d1899d10b8e272ddb880c5..fb523000daa7dfbe3c33803eee39bcfd0881b10f 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:kernel/application_root.dart';
|
| import 'package:package_config/discovery.dart';
|
| import 'package:package_config/packages.dart';
|
|
|
| @@ -35,6 +36,7 @@ class DartOptions {
|
| bool strongModeSdk;
|
| String sdk;
|
| String packagePath;
|
| + ApplicationRoot applicationRoot;
|
| Map<Uri, Uri> customUriMappings;
|
| Map<String, String> declaredVariables;
|
|
|
| @@ -43,12 +45,14 @@ class DartOptions {
|
| bool strongModeSdk,
|
| this.sdk,
|
| this.packagePath,
|
| + ApplicationRoot applicationRoot,
|
| Map<Uri, Uri> customUriMappings,
|
| Map<String, String> declaredVariables})
|
| : this.customUriMappings = customUriMappings ?? <Uri, Uri>{},
|
| this.declaredVariables = declaredVariables ?? <String, String>{},
|
| this.strongMode = strongMode,
|
| - this.strongModeSdk = strongModeSdk ?? strongMode;
|
| + this.strongModeSdk = strongModeSdk ?? strongMode,
|
| + this.applicationRoot = applicationRoot ?? new ApplicationRoot.none();
|
| }
|
|
|
| abstract class ReferenceLevelLoader {
|
| @@ -68,6 +72,7 @@ abstract class ReferenceLevelLoader {
|
|
|
| class DartLoader implements ReferenceLevelLoader {
|
| final Repository repository;
|
| + final ApplicationRoot applicationRoot;
|
| final Bimap<ClassElement, ast.Class> _classes =
|
| new Bimap<ClassElement, ast.Class>();
|
| final Bimap<Element, ast.Member> _members = new Bimap<Element, ast.Member>();
|
| @@ -90,19 +95,16 @@ class DartLoader implements ReferenceLevelLoader {
|
|
|
| DartLoader(this.repository, DartOptions options, Packages packages,
|
| {DartSdk dartSdk})
|
| - : this.context = createContext(options, packages, dartSdk: dartSdk);
|
| -
|
| - LibraryElement getLibraryElement(ast.Library node) {
|
| - return context
|
| - .getLibraryElement(context.sourceFactory.forUri2(node.importUri));
|
| - }
|
| + : this.context = createContext(options, packages, dartSdk: dartSdk),
|
| + this.applicationRoot = options.applicationRoot;
|
|
|
| String getLibraryName(LibraryElement element) {
|
| return element.name.isEmpty ? null : element.name;
|
| }
|
|
|
| ast.Library getLibraryReference(LibraryElement element) {
|
| - return repository.getLibraryReference(element.source.uri)
|
| + var uri = applicationRoot.relativeUri(element.source.uri);
|
| + return repository.getLibraryReference(uri)
|
| ..name ??= getLibraryName(element)
|
| ..fileUri = "file://${element.source.fullName}";
|
| }
|
| @@ -579,7 +581,8 @@ class DartLoader implements ReferenceLevelLoader {
|
| void ensureLibraryIsLoaded(ast.Library node) {
|
| if (!node.isExternal) return;
|
| node.isExternal = false;
|
| - var source = context.sourceFactory.forUri2(node.importUri);
|
| + var source = context.sourceFactory
|
| + .forUri2(applicationRoot.absoluteUri(node.importUri));
|
| assert(source != null);
|
| var element = context.computeLibraryElement(source);
|
| context.resolveCompilationUnit(source, element);
|
| @@ -623,8 +626,9 @@ class DartLoader implements ReferenceLevelLoader {
|
| List<String> getLoadedFileNames() {
|
| var list = <String>[];
|
| for (var library in repository.libraries) {
|
| - LibraryElement element = context.computeLibraryElement(
|
| - context.sourceFactory.forUri2(library.importUri));
|
| + LibraryElement element = context.computeLibraryElement(context
|
| + .sourceFactory
|
| + .forUri2(applicationRoot.absoluteUri(library.importUri)));
|
| for (var unit in element.units) {
|
| list.add(unit.source.fullName);
|
| }
|
| @@ -639,8 +643,9 @@ class DartLoader implements ReferenceLevelLoader {
|
| }
|
| }
|
|
|
| - ast.Program loadProgram(String mainLibrary, {Target target}) {
|
| - ast.Library library = repository.getLibrary(mainLibrary);
|
| + ast.Program loadProgram(Uri mainLibrary, {Target target}) {
|
| + ast.Library library = repository
|
| + .getLibraryReference(applicationRoot.relativeUri(mainLibrary));
|
| ensureLibraryIsLoaded(library);
|
| loadEverything(target: target);
|
| var program = new ast.Program(repository.libraries);
|
| @@ -661,8 +666,9 @@ class DartLoader implements ReferenceLevelLoader {
|
| return program;
|
| }
|
|
|
| - ast.Library loadLibrary(String mainLibrary) {
|
| - ast.Library library = repository.getLibrary(mainLibrary);
|
| + ast.Library loadLibrary(Uri uri) {
|
| + ast.Library library =
|
| + repository.getLibraryReference(applicationRoot.relativeUri(uri));
|
| ensureLibraryIsLoaded(library);
|
| return library;
|
| }
|
|
|