Skip to content

Commit 697f93d

Browse files
committed
Properly print an error when failing to load a transformer.
[email protected] BUG= http://dartbug.com/21490 Review URL: https://codereview.chromium.org//1106803002 git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart@45414 260f80e4-7a28-3924-810f-c04153c831b5
1 parent 67f65fe commit 697f93d

File tree

2 files changed

+62
-0
lines changed

2 files changed

+62
-0
lines changed

sdk/lib/_internal/pub/lib/src/barback/dependency_computer.dart

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import '../dart.dart';
1111
import '../io.dart';
1212
import '../package.dart';
1313
import '../package_graph.dart';
14+
import '../pubspec.dart';
1415
import '../utils.dart';
1516
import 'cycle_exception.dart';
1617
import 'transformer_config.dart';
@@ -104,6 +105,17 @@ class DependencyComputer {
104105
/// loaded.
105106
Set<TransformerId> _transformersNeededByTransformer(TransformerId id) {
106107
if (id.isBuiltInTransformer) return new Set();
108+
109+
if (!_graph.packages.containsKey(id.package)) {
110+
// Throw this here rather than during pubspec parsing because by the time
111+
// we're here, we're sure that the package is actually transforming public
112+
// assets and that being unable to load it will be a problem.
113+
throw new PubspecException(
114+
'Error loading transformer "$id": package "${id.package}" is not '
115+
'a dependency.',
116+
id.span);
117+
}
118+
107119
_loadPackageComputer(id.package);
108120
return _packageComputers[id.package]._transformersNeededByTransformer(id);
109121
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS d.file
2+
// for details. All rights reserved. Use of this source code is governed by a
3+
// BSD-style license that can be found in the LICENSE file.
4+
5+
library pub_tests;
6+
7+
import 'package:scheduled_test/scheduled_test.dart';
8+
9+
import '../../lib/src/exit_codes.dart' as exit_codes;
10+
import '../descriptor.dart' as d;
11+
import '../test_pub.dart';
12+
import '../serve/utils.dart';
13+
14+
main() {
15+
initConfig();
16+
withBarbackVersions("any", () {
17+
integration("fails to load a transform from a non-dependency", () {
18+
d.dir("bar", [
19+
d.pubspec({
20+
"name": "bar",
21+
"version": "1.0.0",
22+
}),
23+
d.dir("lib", [
24+
d.file("transformer.dart", dartTransformer('bar')),
25+
])
26+
]).create();
27+
28+
d.dir("foo", [
29+
d.pubspec({
30+
"name": "foo",
31+
"version": "1.0.0",
32+
"dev_dependencies": {"bar": {"path": "../bar"}},
33+
"transformers": ["bar"]
34+
})
35+
]).create();
36+
37+
d.dir(appPath, [
38+
d.pubspec({
39+
"name": "myapp",
40+
"dependencies": {"foo": {"path": "../foo"}}
41+
})
42+
]).create();
43+
44+
var pub = startPubServe();
45+
pub.stderr.expect(contains('Error loading transformer "bar": package '
46+
'"bar" is not a dependency.'));
47+
pub.shouldExit(exit_codes.DATA);
48+
});
49+
});
50+
}

0 commit comments

Comments
 (0)