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

Unified Diff: sdk/lib/_internal/compiler/implementation/compiler.dart

Issue 173713002: Add --hide-package-warnings option. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 6 years, 10 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: sdk/lib/_internal/compiler/implementation/compiler.dart
diff --git a/sdk/lib/_internal/compiler/implementation/compiler.dart b/sdk/lib/_internal/compiler/implementation/compiler.dart
index af83ea7d7f27ce698e03171ad41db989b00c0241..cb8f41a8c13b30415a3fe9d4cb989e4c0095e6b5 100644
--- a/sdk/lib/_internal/compiler/implementation/compiler.dart
+++ b/sdk/lib/_internal/compiler/implementation/compiler.dart
@@ -393,6 +393,13 @@ abstract class Compiler implements DiagnosticListener {
/// Emit terse diagnostics without howToFix.
final bool terseDiagnostics;
+ /// If `true`, warnings and hints not from user code are not reported.
+ final bool hidePackageWarnings;
+
+ /// `true` if the last diagnostic was filtered, in which case the
+ /// accompanying info message should be filtered as well.
+ bool lastDiagnosticWasFiltered = false;
+
final api.CompilerOutputProvider outputProvider;
bool disableInlining = false;
@@ -615,6 +622,7 @@ abstract class Compiler implements DiagnosticListener {
this.buildId: UNDETERMINED_BUILD_ID,
this.terseDiagnostics: false,
this.dumpInfo: false,
+ this.hidePackageWarnings: false,
outputProvider,
List<String> strips: const []})
: this.analyzeOnly = analyzeOnly || analyzeSignaturesOnly,
@@ -748,6 +756,21 @@ abstract class Compiler implements DiagnosticListener {
}
}
+ /// Finds the approximate [Element] for [node]. [currentElement] is used as
+ /// the default value.
+ Element elementFromSpannable(Spannable node) {
+ Element element;
+ if (node is Element) {
+ element = node;
+ } else if (node is HInstruction) {
+ element = node.sourceElement;
+ } else if (node is MetadataAnnotation) {
+ MetadataAnnotation annotation = node;
floitsch 2014/02/20 19:24:32 This should not be necessary anymore. The is-check
Johnni Winther 2014/02/21 08:32:14 Done.
+ element = annotation.annotatedElement;
+ }
+ return element != null ? element : currentElement;
+ }
+
void log(message) {
reportDiagnostic(null,
MessageKind.GENERIC.error({'text': '$message'}),
@@ -1326,9 +1349,7 @@ abstract class Compiler implements DiagnosticListener {
void reportError(Spannable node,
MessageKind errorCode,
[Map arguments = const {}]) {
- reportDiagnostic(node,
- errorCode.error(arguments, terseDiagnostics),
- api.Diagnostic.ERROR);
+ reportDiagnosticInternal(node, errorCode, arguments, api.Diagnostic.ERROR);
}
void reportFatalError(Spannable node, MessageKind errorCode,
@@ -1345,23 +1366,18 @@ abstract class Compiler implements DiagnosticListener {
// is more complete.
if (errorCode == MessageKind.MISSING_RETURN) return;
if (errorCode == MessageKind.MAYBE_MISSING_RETURN) return;
- reportDiagnostic(node,
- errorCode.error(arguments, terseDiagnostics),
- api.Diagnostic.WARNING);
+ reportDiagnosticInternal(
+ node, errorCode, arguments, api.Diagnostic.WARNING);
}
void reportInfo(Spannable node, MessageKind errorCode,
[Map arguments = const {}]) {
- reportDiagnostic(node,
- errorCode.error(arguments, terseDiagnostics),
- api.Diagnostic.INFO);
+ reportDiagnosticInternal(node, errorCode, arguments, api.Diagnostic.INFO);
}
void reportHint(Spannable node, MessageKind errorCode,
[Map arguments = const {}]) {
- reportDiagnostic(node,
- errorCode.error(arguments, terseDiagnostics),
- api.Diagnostic.HINT);
+ reportDiagnosticInternal(node, errorCode, arguments, api.Diagnostic.HINT);
}
/// For debugging only, print a message with a source location.
@@ -1374,6 +1390,30 @@ abstract class Compiler implements DiagnosticListener {
node, MessageKind.GENERIC, {'text': 'Internal Error: $message'});
}
+ void reportDiagnosticInternal(Spannable node,
+ MessageKind errorCode,
+ Map arguments,
+ api.Diagnostic kind) {
+ if (hidePackageWarnings) {
+ switch (kind) {
+ case api.Diagnostic.WARNING:
+ case api.Diagnostic.HINT:
+ if (!inUserCode(elementFromSpannable(node))) {
+ lastDiagnosticWasFiltered = true;
+ return;
+ }
+ break;
+ case api.Diagnostic.INFO:
+ if (lastDiagnosticWasFiltered) {
+ return;
+ }
+ break;
+ }
+ }
+ lastDiagnosticWasFiltered = false;
+ reportDiagnostic(node, errorCode.error(arguments, terseDiagnostics), kind);
+ }
+
// TODO(ahe): The names Diagnostic and api.Diagnostic are in conflict. Fix it.
void reportDiagnostic(Spannable span,
Diagnostic message,
@@ -1535,16 +1575,15 @@ abstract class Compiler implements DiagnosticListener {
});
}
- /// Debugging helper for determining whether the current element is declared
- /// within 'user code'.
+ /// Helper for determining whether the current element is declared within
+ /// 'user code'.
///
/// See [inUserCode] for what defines 'user code'.
bool currentlyInUserCode() {
return inUserCode(currentElement);
}
- /// Debugging helper for determining whether [element] is declared within
- /// 'user code'.
+ /// Helper for determining whether [element] is declared within 'user code'.
///
/// What constitutes 'user code' is defined by the URI(s) provided by the
/// entry point(s) of compilation or analysis:
« no previous file with comments | « sdk/lib/_internal/compiler/implementation/apiimpl.dart ('k') | sdk/lib/_internal/compiler/implementation/dart2js.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698