Add _sdkext support back to analysis server

BUG=
R=brianwilkerson@google.com, paulberry@google.com

Review URL: https://codereview.chromium.org//1295463003 .
This commit is contained in:
John McCutchan
2015-08-13 12:24:37 -07:00
parent d9bb318a04
commit 67a7aeaf12
2 changed files with 57 additions and 3 deletions
@@ -19,6 +19,7 @@ import 'package:analyzer/source/package_map_provider.dart';
import 'package:analyzer/source/package_map_resolver.dart';
import 'package:analyzer/source/path_filter.dart';
import 'package:analyzer/source/pub_package_map_provider.dart';
import 'package:analyzer/source/sdk_ext.dart';
import 'package:analyzer/src/generated/engine.dart';
import 'package:analyzer/src/generated/java_io.dart';
import 'package:analyzer/src/generated/source.dart';
@@ -1352,7 +1353,8 @@ class PackageMapDisposition extends FolderDisposition {
@override
Iterable<UriResolver> createPackageUriResolvers(
ResourceProvider resourceProvider) =>
<UriResolver>[new PackageMapUriResolver(resourceProvider, packageMap)];
<UriResolver>[new SdkExtUriResolver(packageMap),
new PackageMapUriResolver(resourceProvider, packageMap)];
}
/**
@@ -1370,6 +1372,19 @@ class PackagesFileDisposition extends FolderDisposition {
@override
Iterable<UriResolver> createPackageUriResolvers(
ResourceProvider resourceProvider) =>
const <UriResolver>[];
ResourceProvider resourceProvider) {
if (packages != null) {
// Construct package map for the SdkExtUriResolver.
Map<String, List<Folder>> packageMap = <String, List<Folder>>{};
packages.asMap().forEach((String name, Uri uri) {
if (uri.scheme == 'file' || uri.scheme == '' /* unspecified */) {
var path = resourceProvider.pathContext.fromUri(uri);
packageMap[name] = <Folder>[resourceProvider.getFolder(path)];
}
});
return <UriResolver>[new SdkExtUriResolver(packageMap)];
} else {
return const <UriResolver>[];
}
}
}
@@ -344,6 +344,45 @@ analyzer:
expect(contexts[1].name, equals('/my/proj/lib'));
}
// TODO(paulberry): This test only tests PackagesFileDisposition.
// Once http://dartbug.com/23909 is fixed, add a test for sdk extensions
// and PackageMapDisposition.
test_sdk_ext_packagespec() async {
// Create files.
String libPath = newFolder([projPath, LIB_NAME]);
newFile([libPath, 'main.dart']);
newFile([libPath, 'nope.dart']);
String sdkExtPath = newFolder([projPath, 'sdk_ext']);
newFile([sdkExtPath, 'entry.dart']);
String sdkExtSrcPath = newFolder([projPath, 'sdk_ext', 'src']);
newFile([sdkExtSrcPath, 'part.dart']);
// Setup sdk extension mapping.
newFile(
[libPath, '_sdkext'],
r'''
{
"dart:foobar": "../sdk_ext/entry.dart"
}
''');
// Setup .packages file
newFile(
[projPath, '.packages'],
r'''
test_pack:lib/
''');
// Setup context.
manager.setRoots(<String>[projPath], <String>[], <String, String>{});
// Confirm that one context was created.
var contexts =
manager.contextsInAnalysisRoot(resourceProvider.newFolder(projPath));
expect(contexts, isNotNull);
expect(contexts.length, equals(1));
var context = contexts[0];
var source = context.sourceFactory.forUri('dart:foobar');
expect(source.fullName, equals('/my/proj/sdk_ext/entry.dart'));
}
test_refresh_folder_with_packagespec() {
// create a context with a .packages file
String packagespecFile = posix.join(projPath, '.packages');