Skip to content
This repository was archived by the owner on Feb 22, 2018. It is now read-only.

Commit 62ae96d

Browse files
author
John Messerly
committed
Support reading summaries in DDC
[email protected] Review URL: https://codereview.chromium.org/1893603003 .
1 parent 64c0e9f commit 62ae96d

File tree

3 files changed

+99
-16
lines changed

3 files changed

+99
-16
lines changed

bin/dartdevc.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ main(List<String> args) async {
4646
runner.addCommand(new CompileCommand());
4747
try {
4848
await runner.run(args);
49-
} catch(e, s) {
49+
} catch (e, s) {
5050
exit(handleError(e, s, args));
5151
}
5252
}

lib/src/analyzer/context.dart

Lines changed: 37 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,11 @@ import 'package:analyzer/src/generated/source_io.dart'
1616
PackageUriResolver,
1717
SourceFactory,
1818
UriResolver;
19+
import 'package:analyzer/src/summary/package_bundle_reader.dart'
20+
show
21+
InSummaryPackageUriResolver,
22+
InputPackagesResultProvider,
23+
SummaryDataStore;
1924
import 'package:cli_util/cli_util.dart' show getSdkDir;
2025

2126
import 'dart_sdk.dart' show MockDartSdk, mockSdkSources;
@@ -97,9 +102,30 @@ class AnalyzerOptions {
97102
AnalysisContext createAnalysisContextWithSources(AnalyzerOptions options,
98103
{DartUriResolver sdkResolver, List<UriResolver> fileResolvers}) {
99104
AnalysisEngine.instance.processRequiredPlugins();
100-
var srcFactory = createSourceFactory(options,
101-
sdkResolver: sdkResolver, fileResolvers: fileResolvers);
102-
return createAnalysisContext()..sourceFactory = srcFactory;
105+
106+
sdkResolver ??= options.useMockSdk
107+
? createMockSdkResolver(mockSdkSources)
108+
: createSdkPathResolver(options.dartSdkPath);
109+
110+
// Read the summaries.
111+
SummaryDataStore summaryData;
112+
if (options.summaryPaths.isNotEmpty) {
113+
summaryData = new SummaryDataStore(options.summaryPaths);
114+
}
115+
116+
var srcFactory = _createSourceFactory(options,
117+
sdkResolver: sdkResolver,
118+
fileResolvers: fileResolvers,
119+
summaryData: summaryData);
120+
121+
var context = createAnalysisContext();
122+
context.sourceFactory = srcFactory;
123+
if (summaryData != null) {
124+
context.typeProvider = sdkResolver.dartSdk.context.typeProvider;
125+
context.resultProvider =
126+
new InputPackagesResultProvider(context, summaryData);
127+
}
128+
return context;
103129
}
104130

105131
/// Creates an analysis context that contains our restricted typing rules.
@@ -116,17 +142,19 @@ AnalysisContext createAnalysisContext() {
116142
///
117143
/// If supplied, [fileResolvers] will override the default `file:` and
118144
/// `package:` URI resolvers.
119-
SourceFactory createSourceFactory(AnalyzerOptions options,
120-
{DartUriResolver sdkResolver, List<UriResolver> fileResolvers}) {
121-
sdkResolver ??= options.useMockSdk
122-
? createMockSdkResolver(mockSdkSources)
123-
: createSdkPathResolver(options.dartSdkPath);
124-
145+
SourceFactory _createSourceFactory(AnalyzerOptions options,
146+
{DartUriResolver sdkResolver,
147+
List<UriResolver> fileResolvers,
148+
SummaryDataStore summaryData}) {
125149
var resolvers = <UriResolver>[];
126150
if (options.customUrlMappings.isNotEmpty) {
127151
resolvers.add(new CustomUriResolver(options.customUrlMappings));
128152
}
129153
resolvers.add(sdkResolver);
154+
if (summaryData != null) {
155+
resolvers.add(new InSummaryPackageUriResolver(summaryData));
156+
}
157+
130158
if (fileResolvers == null) fileResolvers = createFileResolvers(options);
131159
resolvers.addAll(fileResolvers);
132160
return new SourceFactory(resolvers);

test/worker/worker_test.dart

Lines changed: 61 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -70,17 +70,72 @@ main() {
7070
expect(await messageGrouper.next, isNull);
7171
});
7272

73-
test('can compile in basic mode', () async {
73+
test('can compile in basic mode', () {
7474
var args = new List.from(executableArgs)..addAll(compilerArgs);
75-
var process = await Process.start('dart', args);
76-
stderr.addStream(process.stderr);
77-
var futureProcessOutput = process.stdout.map(UTF8.decode).toList();
75+
var result = Process.runSync('dart', args);
7876

79-
expect(await process.exitCode, EXIT_CODE_OK);
80-
expect((await futureProcessOutput).join(), isEmpty);
77+
expect(result.exitCode, EXIT_CODE_OK);
78+
expect(result.stdout, isEmpty);
79+
expect(result.stderr, isEmpty);
8180
expect(outputJsFile.existsSync(), isTrue);
8281
});
8382
});
83+
84+
group('Hello World with Summaries', () {
85+
final greetingDart = new File('test/worker/greeting.dart').absolute;
86+
final helloDart = new File('test/worker/hello.dart').absolute;
87+
88+
final greetingJS = new File('test/worker/greeting.js').absolute;
89+
final greetingSummary = new File('test/worker/greeting.sum').absolute;
90+
final helloJS = new File('test/worker/hello_world.js').absolute;
91+
92+
setUp(() {
93+
greetingDart.writeAsStringSync('String greeting = "hello";');
94+
helloDart.writeAsStringSync(
95+
'import "greeting.dart";'
96+
'main() => print(greeting);');
97+
});
98+
99+
tearDown(() {
100+
if (greetingDart.existsSync()) greetingDart.deleteSync();
101+
if (helloDart.existsSync()) helloDart.deleteSync();
102+
if (greetingJS.existsSync()) greetingJS.deleteSync();
103+
if (greetingSummary.existsSync()) greetingSummary.deleteSync();
104+
if (helloJS.existsSync()) helloJS.deleteSync();
105+
});
106+
107+
test('can compile in basic mode', () {
108+
var result = Process.runSync('dart', [
109+
'bin/dartdevc.dart',
110+
'compile',
111+
'--no-source-map',
112+
'-o',
113+
greetingJS.path,
114+
greetingDart.path,
115+
]);
116+
expect(result.exitCode, EXIT_CODE_OK);
117+
expect(result.stdout, isEmpty);
118+
expect(result.stderr, isEmpty);
119+
expect(greetingJS.existsSync(), isTrue);
120+
expect(greetingSummary.existsSync(), isTrue);
121+
122+
result = Process.runSync('dart', [
123+
'bin/dartdevc.dart',
124+
'compile',
125+
'--no-source-map',
126+
'--no-summarize',
127+
'-s',
128+
greetingSummary.path,
129+
'-o',
130+
helloJS.path,
131+
helloDart.path,
132+
]);
133+
expect(result.exitCode, EXIT_CODE_OK);
134+
expect(result.stdout, isEmpty);
135+
expect(result.stderr, isEmpty);
136+
expect(helloJS.existsSync(), isTrue);
137+
});
138+
});
84139
}
85140

86141
Future<WorkResponse> _readResponse(MessageGrouper messageGrouper) async {

0 commit comments

Comments
 (0)