Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1209)

Unified Diff: lib/src/dependency_graph.dart

Issue 988483006: Add widget to display errors, and report dependency_graph errors correctly (Closed) Base URL: git@github.com:dart-lang/dev_compiler.git@master
Patch Set: Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: lib/src/dependency_graph.dart
diff --git a/lib/src/dependency_graph.dart b/lib/src/dependency_graph.dart
index a38a0bbc2d51eb7cac7ccb2ccb028700ba5bf7d6..9f44025ae00a762ba6c0b9f0ceaf6bed5c68b15e 100644
--- a/lib/src/dependency_graph.dart
+++ b/lib/src/dependency_graph.dart
@@ -22,11 +22,12 @@ import 'package:analyzer/src/generated/engine.dart'
import 'package:analyzer/src/generated/source.dart' show Source, SourceKind;
import 'package:html5lib/dom.dart' show Document;
import 'package:html5lib/parser.dart' as html;
-import 'package:logging/logging.dart' show Logger;
+import 'package:logging/logging.dart' show Level;
import 'package:path/path.dart' as path;
+import 'package:source_span/source_span.dart' show SourceSpan;
import 'info.dart';
-import 'options.dart';
+import 'report.dart';
import 'utils.dart';
/// Holds references to all source nodes in the import graph. This is mainly
@@ -39,9 +40,9 @@ class SourceGraph {
/// Analyzer used to resolve source files.
final AnalysisContext _context;
- final CompilerOptions _options;
+ final CheckerReporter _reporter;
- SourceGraph(this._context, this._options);
+ SourceGraph(this._context, this._reporter);
/// Node associated with a resolved [uri].
SourceNode nodeFromUri(Uri uri) {
@@ -53,8 +54,8 @@ class SourceGraph {
return new HtmlSourceNode(uri, source, this);
} else if (extension == '.dart' || uriString.startsWith('dart:')) {
return new DartSourceNode(uri, source);
- } else if (extension == '.js') {
- return new JavaScriptSourceNode(uri, source);
+ } else if (extension == '.js' || extension == '.css') {
+ return new ResourceSourceNode(uri, source);
} else {
assert(false); // unreachable
}
@@ -110,8 +111,8 @@ abstract class SourceNode {
/// A node representing an entry HTML source file.
class HtmlSourceNode extends SourceNode {
- /// Javascript dependencies, included by default on any application.
- Set<JavaScriptSourceNode> runtimeDeps = new Set<JavaScriptSourceNode>();
+ /// Resources included by default on any application.
+ Set<ResourceSourceNode> runtimeDeps = new Set<ResourceSourceNode>();
/// Libraries referred to via script tags.
Set<DartSourceNode> scripts = new Set<DartSourceNode>();
@@ -129,31 +130,37 @@ class HtmlSourceNode extends SourceNode {
var prefix = 'package:dev_compiler/runtime';
runtimeDeps
..add(graph.nodeFromUri(Uri.parse('$prefix/dart_runtime.js')))
- ..add(graph.nodeFromUri(Uri.parse('$prefix/harmony_feature_check.js')));
+ ..add(graph.nodeFromUri(Uri.parse('$prefix/harmony_feature_check.js')))
+ ..add(graph.nodeFromUri(Uri.parse('$prefix/messages_widget.js')))
+ ..add(graph.nodeFromUri(Uri.parse('$prefix/messages.css')));
}
void update(SourceGraph graph) {
super.update(graph);
if (needsRebuild) {
+ graph._reporter.clearHtml(uri);
document = html.parse(source.contents.data, generateSpans: true);
var newScripts = new Set<DartSourceNode>();
var tags = document.querySelectorAll('script[type="application/dart"]');
for (var script in tags) {
var src = script.attributes['src'];
if (src == null) {
- // TODO(sigmund): expose these as compile-time failures
- _log.severe(script.sourceSpan.message(
+ graph._reporter.enterHtml(source.uri);
+ graph._reporter.log(new DependencyGraphError(
'inlined script tags not supported at this time '
'(see https://github.com/dart-lang/dart-dev-compiler/issues/54).',
- color: graph._options.useColors ? colorOf('error') : false));
+ script.sourceSpan));
+ graph._reporter.leaveHtml();
continue;
}
var node = graph.nodeFromUri(uri.resolve(src));
- if (!node.source.exists()) {
- _log.severe(script.sourceSpan.message('Script file $src not found',
- color: graph._options.useColors ? colorOf('error') : false));
+ if (node == null || !node.source.exists()) {
+ graph._reporter.enterHtml(source.uri);
+ graph._reporter.log(new DependencyGraphError(
+ 'Script file $src not found', script.sourceSpan));
+ graph._reporter.leaveHtml();
}
- newScripts.add(node);
+ if (node != null) newScripts.add(node);
}
if (!_same(newScripts, scripts)) {
@@ -194,6 +201,7 @@ class DartSourceNode extends SourceNode {
super.update(graph);
if (needsRebuild && source.contents.data != null) {
+ graph._reporter.clearLibrary(uri);
// If the defining compilation-unit changed, the structure might have
// changed.
var unit = parseDirectives(source.contents.data, name: source.fullName);
@@ -210,9 +218,10 @@ class DartSourceNode extends SourceNode {
var node =
graph.nodes.putIfAbsent(uri, () => new DartSourceNode(uri, target));
if (!node.source.exists()) {
- _log.severe(spanForNode(unit, source, d).message(
- 'File $uri not found',
- color: graph._options.useColors ? colorOf('error') : false));
+ graph._reporter.enterLibrary(source.uri);
+ graph._reporter.log(new DependencyGraphError(
+ 'File $uri not found', spanForNode(unit, source, d)));
+ graph._reporter.leaveLibrary();
}
if (d is ImportDirective) {
@@ -267,10 +276,10 @@ class DartSourceNode extends SourceNode {
}
}
-/// Represents a Javascript runtime resource from our compiler that is needed to
-/// run an application.
-class JavaScriptSourceNode extends SourceNode {
- JavaScriptSourceNode(uri, source) : super(uri, source);
+/// Represents a runtime resource from our compiler that is needed to run an
+/// application.
+class ResourceSourceNode extends SourceNode {
+ ResourceSourceNode(uri, source) : super(uri, source);
}
/// Updates the structure and `needsRebuild` marks in nodes of [graph] reachable
@@ -336,7 +345,7 @@ rebuild(SourceNode start, SourceGraph graph, bool build(SourceNode node)) {
bool shouldBuildNode(SourceNode n) {
if (n.needsRebuild) return true;
if (n is HtmlSourceNode) return structureHasChanged;
- if (n is JavaScriptSourceNode) return false;
+ if (n is ResourceSourceNode) return false;
return (n as DartSourceNode).imports
.any((i) => apiChangeDetected.contains(i));
}
@@ -390,4 +399,9 @@ visitInPostOrder(SourceNode start, void action(SourceNode node),
}
bool _same(Set a, Set b) => a.length == b.length && a.containsAll(b);
-final _log = new Logger('dev_compiler.graph');
+
+/// An error message discovered while parsing the dependencies between files.
+class DependencyGraphError extends MessageWithSpan {
+ const DependencyGraphError(String message, SourceSpan span)
+ : super(message, Level.SEVERE, span);
+}

Powered by Google App Engine
This is Rietveld 408576698