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

Side by Side 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 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. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 part of dart2js; 5 part of dart2js;
6 6
7 /** 7 /**
8 * If true, print a warning for each method that was resolved, but not 8 * If true, print a warning for each method that was resolved, but not
9 * compiled. 9 * compiled.
10 */ 10 */
(...skipping 375 matching lines...) Expand 10 before | Expand all | Expand 10 after
386 386
387 /** 387 /**
388 * URI of the main source map if the compiler is generating source 388 * URI of the main source map if the compiler is generating source
389 * maps. 389 * maps.
390 */ 390 */
391 final Uri sourceMapUri; 391 final Uri sourceMapUri;
392 392
393 /// Emit terse diagnostics without howToFix. 393 /// Emit terse diagnostics without howToFix.
394 final bool terseDiagnostics; 394 final bool terseDiagnostics;
395 395
396 /// If `true`, warnings and hints not from user code are not reported.
397 final bool hidePackageWarnings;
398
399 /// `true` if the last diagnostic was filtered, in which case the
400 /// accompanying info message should be filtered as well.
401 bool lastDiagnosticWasFiltered = false;
402
396 final api.CompilerOutputProvider outputProvider; 403 final api.CompilerOutputProvider outputProvider;
397 404
398 bool disableInlining = false; 405 bool disableInlining = false;
399 406
400 List<Uri> librariesToAnalyzeWhenRun; 407 List<Uri> librariesToAnalyzeWhenRun;
401 408
402 final Tracer tracer; 409 final Tracer tracer;
403 410
404 CompilerTask measuredTask; 411 CompilerTask measuredTask;
405 Element _currentElement; 412 Element _currentElement;
(...skipping 202 matching lines...) Expand 10 before | Expand all | Expand 10 after
608 bool generateSourceMap: true, 615 bool generateSourceMap: true,
609 this.analyzeAllFlag: false, 616 this.analyzeAllFlag: false,
610 bool analyzeOnly: false, 617 bool analyzeOnly: false,
611 bool analyzeSignaturesOnly: false, 618 bool analyzeSignaturesOnly: false,
612 this.preserveComments: false, 619 this.preserveComments: false,
613 this.verbose: false, 620 this.verbose: false,
614 this.sourceMapUri: null, 621 this.sourceMapUri: null,
615 this.buildId: UNDETERMINED_BUILD_ID, 622 this.buildId: UNDETERMINED_BUILD_ID,
616 this.terseDiagnostics: false, 623 this.terseDiagnostics: false,
617 this.dumpInfo: false, 624 this.dumpInfo: false,
625 this.hidePackageWarnings: false,
618 outputProvider, 626 outputProvider,
619 List<String> strips: const []}) 627 List<String> strips: const []})
620 : this.analyzeOnly = analyzeOnly || analyzeSignaturesOnly, 628 : this.analyzeOnly = analyzeOnly || analyzeSignaturesOnly,
621 this.analyzeSignaturesOnly = analyzeSignaturesOnly, 629 this.analyzeSignaturesOnly = analyzeSignaturesOnly,
622 this.outputProvider = (outputProvider == null) 630 this.outputProvider = (outputProvider == null)
623 ? NullSink.outputProvider 631 ? NullSink.outputProvider
624 : outputProvider { 632 : outputProvider {
625 world = new World(this); 633 world = new World(this);
626 634
627 closureMapping.ClosureNamer closureNamer; 635 closureMapping.ClosureNamer closureNamer;
(...skipping 113 matching lines...) Expand 10 before | Expand all | Expand 10 after
741 return spanFromElement(node); 749 return spanFromElement(node);
742 } else if (node is MetadataAnnotation) { 750 } else if (node is MetadataAnnotation) {
743 MetadataAnnotation annotation = node; 751 MetadataAnnotation annotation = node;
744 Uri uri = annotation.annotatedElement.getCompilationUnit().script.uri; 752 Uri uri = annotation.annotatedElement.getCompilationUnit().script.uri;
745 return spanFromTokens(annotation.beginToken, annotation.endToken, uri); 753 return spanFromTokens(annotation.beginToken, annotation.endToken, uri);
746 } else { 754 } else {
747 throw 'No error location.'; 755 throw 'No error location.';
748 } 756 }
749 } 757 }
750 758
759 /// Finds the approximate [Element] for [node]. [currentElement] is used as
760 /// the default value.
761 Element elementFromSpannable(Spannable node) {
762 Element element;
763 if (node is Element) {
764 element = node;
765 } else if (node is HInstruction) {
766 element = node.sourceElement;
767 } else if (node is MetadataAnnotation) {
768 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.
769 element = annotation.annotatedElement;
770 }
771 return element != null ? element : currentElement;
772 }
773
751 void log(message) { 774 void log(message) {
752 reportDiagnostic(null, 775 reportDiagnostic(null,
753 MessageKind.GENERIC.error({'text': '$message'}), 776 MessageKind.GENERIC.error({'text': '$message'}),
754 api.Diagnostic.VERBOSE_INFO); 777 api.Diagnostic.VERBOSE_INFO);
755 } 778 }
756 779
757 Future<bool> run(Uri uri) { 780 Future<bool> run(Uri uri) {
758 totalCompileTime.start(); 781 totalCompileTime.start();
759 782
760 return new Future.sync(() => runCompiler(uri)).catchError((error) { 783 return new Future.sync(() => runCompiler(uri)).catchError((error) {
(...skipping 558 matching lines...) Expand 10 before | Expand all | Expand 10 after
1319 1342
1320 FunctionType computeFunctionType(Element element, 1343 FunctionType computeFunctionType(Element element,
1321 FunctionSignature signature) { 1344 FunctionSignature signature) {
1322 return withCurrentElement(element, 1345 return withCurrentElement(element,
1323 () => resolver.computeFunctionType(element, signature)); 1346 () => resolver.computeFunctionType(element, signature));
1324 } 1347 }
1325 1348
1326 void reportError(Spannable node, 1349 void reportError(Spannable node,
1327 MessageKind errorCode, 1350 MessageKind errorCode,
1328 [Map arguments = const {}]) { 1351 [Map arguments = const {}]) {
1329 reportDiagnostic(node, 1352 reportDiagnosticInternal(node, errorCode, arguments, api.Diagnostic.ERROR);
1330 errorCode.error(arguments, terseDiagnostics),
1331 api.Diagnostic.ERROR);
1332 } 1353 }
1333 1354
1334 void reportFatalError(Spannable node, MessageKind errorCode, 1355 void reportFatalError(Spannable node, MessageKind errorCode,
1335 [Map arguments = const {}]) { 1356 [Map arguments = const {}]) {
1336 reportError(node, errorCode, arguments); 1357 reportError(node, errorCode, arguments);
1337 // TODO(ahe): Make this only abort the current method. 1358 // TODO(ahe): Make this only abort the current method.
1338 throw new CompilerCancelledException( 1359 throw new CompilerCancelledException(
1339 'Error: Cannot continue due to previous error.'); 1360 'Error: Cannot continue due to previous error.');
1340 } 1361 }
1341 1362
1342 void reportWarning(Spannable node, MessageKind errorCode, 1363 void reportWarning(Spannable node, MessageKind errorCode,
1343 [Map arguments = const {}]) { 1364 [Map arguments = const {}]) {
1344 // TODO(ahe): Don't suppress these warning when the type checker 1365 // TODO(ahe): Don't suppress these warning when the type checker
1345 // is more complete. 1366 // is more complete.
1346 if (errorCode == MessageKind.MISSING_RETURN) return; 1367 if (errorCode == MessageKind.MISSING_RETURN) return;
1347 if (errorCode == MessageKind.MAYBE_MISSING_RETURN) return; 1368 if (errorCode == MessageKind.MAYBE_MISSING_RETURN) return;
1348 reportDiagnostic(node, 1369 reportDiagnosticInternal(
1349 errorCode.error(arguments, terseDiagnostics), 1370 node, errorCode, arguments, api.Diagnostic.WARNING);
1350 api.Diagnostic.WARNING);
1351 } 1371 }
1352 1372
1353 void reportInfo(Spannable node, MessageKind errorCode, 1373 void reportInfo(Spannable node, MessageKind errorCode,
1354 [Map arguments = const {}]) { 1374 [Map arguments = const {}]) {
1355 reportDiagnostic(node, 1375 reportDiagnosticInternal(node, errorCode, arguments, api.Diagnostic.INFO);
1356 errorCode.error(arguments, terseDiagnostics),
1357 api.Diagnostic.INFO);
1358 } 1376 }
1359 1377
1360 void reportHint(Spannable node, MessageKind errorCode, 1378 void reportHint(Spannable node, MessageKind errorCode,
1361 [Map arguments = const {}]) { 1379 [Map arguments = const {}]) {
1362 reportDiagnostic(node, 1380 reportDiagnosticInternal(node, errorCode, arguments, api.Diagnostic.HINT);
1363 errorCode.error(arguments, terseDiagnostics),
1364 api.Diagnostic.HINT);
1365 } 1381 }
1366 1382
1367 /// For debugging only, print a message with a source location. 1383 /// For debugging only, print a message with a source location.
1368 void reportHere(Spannable node, String debugMessage) { 1384 void reportHere(Spannable node, String debugMessage) {
1369 reportInfo(node, MessageKind.GENERIC, {'text': 'HERE: $debugMessage'}); 1385 reportInfo(node, MessageKind.GENERIC, {'text': 'HERE: $debugMessage'});
1370 } 1386 }
1371 1387
1372 void reportInternalError(Spannable node, String message) { 1388 void reportInternalError(Spannable node, String message) {
1373 reportError( 1389 reportError(
1374 node, MessageKind.GENERIC, {'text': 'Internal Error: $message'}); 1390 node, MessageKind.GENERIC, {'text': 'Internal Error: $message'});
1375 } 1391 }
1376 1392
1393 void reportDiagnosticInternal(Spannable node,
1394 MessageKind errorCode,
1395 Map arguments,
1396 api.Diagnostic kind) {
1397 if (hidePackageWarnings) {
1398 switch (kind) {
1399 case api.Diagnostic.WARNING:
1400 case api.Diagnostic.HINT:
1401 if (!inUserCode(elementFromSpannable(node))) {
1402 lastDiagnosticWasFiltered = true;
1403 return;
1404 }
1405 break;
1406 case api.Diagnostic.INFO:
1407 if (lastDiagnosticWasFiltered) {
1408 return;
1409 }
1410 break;
1411 }
1412 }
1413 lastDiagnosticWasFiltered = false;
1414 reportDiagnostic(node, errorCode.error(arguments, terseDiagnostics), kind);
1415 }
1416
1377 // TODO(ahe): The names Diagnostic and api.Diagnostic are in conflict. Fix it. 1417 // TODO(ahe): The names Diagnostic and api.Diagnostic are in conflict. Fix it.
1378 void reportDiagnostic(Spannable span, 1418 void reportDiagnostic(Spannable span,
1379 Diagnostic message, 1419 Diagnostic message,
1380 api.Diagnostic kind); 1420 api.Diagnostic kind);
1381 1421
1382 void reportAssertionFailure(SpannableAssertionFailure ex) { 1422 void reportAssertionFailure(SpannableAssertionFailure ex) {
1383 String message = (ex.message != null) ? tryToString(ex.message) 1423 String message = (ex.message != null) ? tryToString(ex.message)
1384 : tryToString(ex); 1424 : tryToString(ex);
1385 SourceSpan span = spanFromSpannable(ex.node); 1425 SourceSpan span = spanFromSpannable(ex.node);
1386 reportError(ex.node, MessageKind.GENERIC, {'text': message}); 1426 reportError(ex.node, MessageKind.GENERIC, {'text': message});
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
1528 // TODO(ahe): Implement better heuristics to discover entry points of 1568 // TODO(ahe): Implement better heuristics to discover entry points of
1529 // packages and use that to discover unused implementation details in 1569 // packages and use that to discover unused implementation details in
1530 // packages. 1570 // packages.
1531 if (library.isPlatformLibrary || library.isPackageLibrary) return; 1571 if (library.isPlatformLibrary || library.isPackageLibrary) return;
1532 library.compilationUnits.forEach((unit) { 1572 library.compilationUnits.forEach((unit) {
1533 unit.forEachLocalMember(checkLive); 1573 unit.forEachLocalMember(checkLive);
1534 }); 1574 });
1535 }); 1575 });
1536 } 1576 }
1537 1577
1538 /// Debugging helper for determining whether the current element is declared 1578 /// Helper for determining whether the current element is declared within
1539 /// within 'user code'. 1579 /// 'user code'.
1540 /// 1580 ///
1541 /// See [inUserCode] for what defines 'user code'. 1581 /// See [inUserCode] for what defines 'user code'.
1542 bool currentlyInUserCode() { 1582 bool currentlyInUserCode() {
1543 return inUserCode(currentElement); 1583 return inUserCode(currentElement);
1544 } 1584 }
1545 1585
1546 /// Debugging helper for determining whether [element] is declared within 1586 /// Helper for determining whether [element] is declared within 'user code'.
1547 /// 'user code'.
1548 /// 1587 ///
1549 /// What constitutes 'user code' is defined by the URI(s) provided by the 1588 /// What constitutes 'user code' is defined by the URI(s) provided by the
1550 /// entry point(s) of compilation or analysis: 1589 /// entry point(s) of compilation or analysis:
1551 /// 1590 ///
1552 /// If an entrypoint URI uses the 'package' scheme then every library from 1591 /// If an entrypoint URI uses the 'package' scheme then every library from
1553 /// that same package is considered to be in user code. For instance, if 1592 /// that same package is considered to be in user code. For instance, if
1554 /// an entry point URI is 'package:foo/bar.dart' then every library whose 1593 /// an entry point URI is 'package:foo/bar.dart' then every library whose
1555 /// canonical URI starts with 'package:foo/' is in user code. 1594 /// canonical URI starts with 'package:foo/' is in user code.
1556 /// 1595 ///
1557 /// If an entrypoint URI uses another scheme than 'package' then every library 1596 /// If an entrypoint URI uses another scheme than 'package' then every library
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
1722 1761
1723 void close() {} 1762 void close() {}
1724 1763
1725 toString() => name; 1764 toString() => name;
1726 1765
1727 /// Convenience method for getting an [api.CompilerOutputProvider]. 1766 /// Convenience method for getting an [api.CompilerOutputProvider].
1728 static NullSink outputProvider(String name, String extension) { 1767 static NullSink outputProvider(String name, String extension) {
1729 return new NullSink('$name.$extension'); 1768 return new NullSink('$name.$extension');
1730 } 1769 }
1731 } 1770 }
OLDNEW
« 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