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

Side by Side Diff: pkg/compiler/lib/src/compiler.dart

Issue 1363993004: Report info messages together with their error, warning, or hint. (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Updated cf. comment. Created 5 years, 2 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
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 library dart2js.compiler_base; 5 library dart2js.compiler_base;
6 6
7 import 'dart:async' show 7 import 'dart:async' show
8 EventSink, 8 EventSink,
9 Future; 9 Future;
10 10
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
131 import 'universe/selector.dart' show 131 import 'universe/selector.dart' show
132 Selector; 132 Selector;
133 import 'universe/universe.dart' show 133 import 'universe/universe.dart' show
134 Universe; 134 Universe;
135 import 'util/util.dart' show 135 import 'util/util.dart' show
136 Link, 136 Link,
137 Setlet; 137 Setlet;
138 import 'world.dart' show 138 import 'world.dart' show
139 World; 139 World;
140 140
141 abstract class Compiler implements DiagnosticListener { 141 abstract class Compiler extends DiagnosticListener {
142 142
143 final Stopwatch totalCompileTime = new Stopwatch(); 143 final Stopwatch totalCompileTime = new Stopwatch();
144 int nextFreeClassId = 0; 144 int nextFreeClassId = 0;
145 World world; 145 World world;
146 Types types; 146 Types types;
147 _CompilerCoreTypes _coreTypes; 147 _CompilerCoreTypes _coreTypes;
148 148
149 final CacheStrategy cacheStrategy; 149 final CacheStrategy cacheStrategy;
150 150
151 /** 151 /**
(...skipping 457 matching lines...) Expand 10 before | Expand all | Expand 10 after
609 bool get disableTypeInference { 609 bool get disableTypeInference {
610 return disableTypeInferenceFlag || compilationFailed; 610 return disableTypeInferenceFlag || compilationFailed;
611 } 611 }
612 612
613 int getNextFreeClassId() => nextFreeClassId++; 613 int getNextFreeClassId() => nextFreeClassId++;
614 614
615 void unimplemented(Spannable spannable, String methodName) { 615 void unimplemented(Spannable spannable, String methodName) {
616 internalError(spannable, "$methodName not implemented."); 616 internalError(spannable, "$methodName not implemented.");
617 } 617 }
618 618
619 void internalError(Spannable node, reason) { 619 internalError(Spannable node, reason) {
620 String message = tryToString(reason); 620 String message = tryToString(reason);
621 reportDiagnosticInternal( 621 reportDiagnosticInternal(
622 node, MessageKind.GENERIC, {'text': message}, api.Diagnostic.CRASH); 622 createMessage(node, MessageKind.GENERIC, {'text': message}),
623 const <DiagnosticMessage>[],
624 api.Diagnostic.CRASH);
623 throw 'Internal Error: $message'; 625 throw 'Internal Error: $message';
624 } 626 }
625 627
626 void unhandledExceptionOnElement(Element element) { 628 void unhandledExceptionOnElement(Element element) {
627 if (hasCrashed) return; 629 if (hasCrashed) return;
628 hasCrashed = true; 630 hasCrashed = true;
629 reportDiagnostic( 631 reportDiagnostic(
630 element, 632 createMessage(element, MessageKind.COMPILER_CRASHED),
631 MessageTemplate.TEMPLATES[MessageKind.COMPILER_CRASHED].message(), 633 const <DiagnosticMessage>[],
632 api.Diagnostic.CRASH); 634 api.Diagnostic.CRASH);
633 pleaseReportCrash(); 635 pleaseReportCrash();
634 } 636 }
635 637
636 void pleaseReportCrash() { 638 void pleaseReportCrash() {
637 print( 639 print(
638 MessageTemplate.TEMPLATES[MessageKind.PLEASE_REPORT_THE_CRASH] 640 MessageTemplate.TEMPLATES[MessageKind.PLEASE_REPORT_THE_CRASH]
639 .message({'buildId': buildId})); 641 .message({'buildId': buildId}));
640 } 642 }
641 643
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
684 element = node; 686 element = node;
685 } else if (node is HInstruction) { 687 } else if (node is HInstruction) {
686 element = _elementFromHInstruction(node); 688 element = _elementFromHInstruction(node);
687 } else if (node is MetadataAnnotation) { 689 } else if (node is MetadataAnnotation) {
688 element = node.annotatedElement; 690 element = node.annotatedElement;
689 } 691 }
690 return element != null ? element : currentElement; 692 return element != null ? element : currentElement;
691 } 693 }
692 694
693 void log(message) { 695 void log(message) {
694 reportDiagnostic(null, 696 Message msg = MessageTemplate.TEMPLATES[MessageKind.GENERIC]
695 MessageTemplate.TEMPLATES[MessageKind.GENERIC] 697 .message({'text': '$message'});
696 .message({'text': '$message'}), 698 reportDiagnostic(
699 new DiagnosticMessage(null, null, msg),
700 const <DiagnosticMessage>[],
697 api.Diagnostic.VERBOSE_INFO); 701 api.Diagnostic.VERBOSE_INFO);
698 } 702 }
699 703
700 Future<bool> run(Uri uri) { 704 Future<bool> run(Uri uri) {
701 totalCompileTime.start(); 705 totalCompileTime.start();
702 706
703 return new Future.sync(() => runCompiler(uri)).catchError((error) { 707 return new Future.sync(() => runCompiler(uri)).catchError((error) {
704 try { 708 try {
705 if (!hasCrashed) { 709 if (!hasCrashed) {
706 hasCrashed = true; 710 hasCrashed = true;
707 if (error is SpannableAssertionFailure) { 711 if (error is SpannableAssertionFailure) {
708 reportAssertionFailure(error); 712 reportAssertionFailure(error);
709 } else { 713 } else {
710 reportDiagnostic( 714 reportDiagnostic(
711 new SourceSpan(uri, 0, 0), 715 createMessage(
712 MessageTemplate.TEMPLATES[MessageKind.COMPILER_CRASHED] 716 new SourceSpan(uri, 0, 0),
713 .message(), 717 MessageKind.COMPILER_CRASHED),
718 const <DiagnosticMessage>[],
714 api.Diagnostic.CRASH); 719 api.Diagnostic.CRASH);
715 } 720 }
716 pleaseReportCrash(); 721 pleaseReportCrash();
717 } 722 }
718 } catch (doubleFault) { 723 } catch (doubleFault) {
719 // Ignoring exceptions in exception handling. 724 // Ignoring exceptions in exception handling.
720 } 725 }
721 throw error; 726 throw error;
722 }).whenComplete(() { 727 }).whenComplete(() {
723 tracer.close(); 728 tracer.close();
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
868 873
869 if (!loadedLibraries.containsLibrary(Uris.dart_core)) { 874 if (!loadedLibraries.containsLibrary(Uris.dart_core)) {
870 return null; 875 return null;
871 } 876 }
872 877
873 if (!enableExperimentalMirrors && 878 if (!enableExperimentalMirrors &&
874 loadedLibraries.containsLibrary(Uris.dart_mirrors)) { 879 loadedLibraries.containsLibrary(Uris.dart_mirrors)) {
875 Set<String> importChains = 880 Set<String> importChains =
876 computeImportChainsFor(loadedLibraries, Uris.dart_mirrors); 881 computeImportChainsFor(loadedLibraries, Uris.dart_mirrors);
877 if (!backend.supportsReflection) { 882 if (!backend.supportsReflection) {
878 reportError(NO_LOCATION_SPANNABLE, 883 reportErrorMessage(
879 MessageKind.MIRRORS_LIBRARY_NOT_SUPPORT_BY_BACKEND); 884 NO_LOCATION_SPANNABLE,
885 MessageKind.MIRRORS_LIBRARY_NOT_SUPPORT_BY_BACKEND);
880 } else { 886 } else {
881 reportWarning(NO_LOCATION_SPANNABLE, 887 reportWarningMessage(
882 MessageKind.IMPORT_EXPERIMENTAL_MIRRORS, 888 NO_LOCATION_SPANNABLE,
889 MessageKind.IMPORT_EXPERIMENTAL_MIRRORS,
883 {'importChain': importChains.join( 890 {'importChain': importChains.join(
884 MessageTemplate.IMPORT_EXPERIMENTAL_MIRRORS_PADDING)}); 891 MessageTemplate.IMPORT_EXPERIMENTAL_MIRRORS_PADDING)});
885 } 892 }
886 } 893 }
887 894
888 functionClass.ensureResolved(this); 895 functionClass.ensureResolved(this);
889 functionApplyMethod = functionClass.lookupLocalMember('apply'); 896 functionApplyMethod = functionClass.lookupLocalMember('apply');
890 897
891 if (preserveComments) { 898 if (preserveComments) {
892 return libraryLoader.loadLibrary(Uris.dart_mirrors) 899 return libraryLoader.loadLibrary(Uris.dart_mirrors)
(...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after
1079 if (mainFunction == null) { 1086 if (mainFunction == null) {
1080 if (errorElement == null && !analyzeOnly && !analyzeAll) { 1087 if (errorElement == null && !analyzeOnly && !analyzeAll) {
1081 internalError(mainApp, "Problem with '${Identifiers.main}'."); 1088 internalError(mainApp, "Problem with '${Identifiers.main}'.");
1082 } else { 1089 } else {
1083 mainFunction = errorElement; 1090 mainFunction = errorElement;
1084 } 1091 }
1085 } 1092 }
1086 if (errorElement != null && 1093 if (errorElement != null &&
1087 errorElement.isSynthesized && 1094 errorElement.isSynthesized &&
1088 !mainApp.isSynthesized) { 1095 !mainApp.isSynthesized) {
1089 reportWarning( 1096 reportWarningMessage(
1090 errorElement, errorElement.messageKind, 1097 errorElement, errorElement.messageKind,
1091 errorElement.messageArguments); 1098 errorElement.messageArguments);
1092 } 1099 }
1093 } 1100 }
1094 1101
1095 /// Analyze all member of the library in [libraryUri]. 1102 /// Analyze all member of the library in [libraryUri].
1096 /// 1103 ///
1097 /// If [skipLibraryWithPartOfTag] is `true`, member analysis is skipped if the 1104 /// If [skipLibraryWithPartOfTag] is `true`, member analysis is skipped if the
1098 /// library has a `part of` tag, assuming it is a part and not a library. 1105 /// library has a `part of` tag, assuming it is a part and not a library.
1099 /// 1106 ///
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
1147 1154
1148 if (!showPackageWarnings && !suppressWarnings) { 1155 if (!showPackageWarnings && !suppressWarnings) {
1149 suppressedWarnings.forEach((Uri uri, SuppressionInfo info) { 1156 suppressedWarnings.forEach((Uri uri, SuppressionInfo info) {
1150 MessageKind kind = MessageKind.HIDDEN_WARNINGS_HINTS; 1157 MessageKind kind = MessageKind.HIDDEN_WARNINGS_HINTS;
1151 if (info.warnings == 0) { 1158 if (info.warnings == 0) {
1152 kind = MessageKind.HIDDEN_HINTS; 1159 kind = MessageKind.HIDDEN_HINTS;
1153 } else if (info.hints == 0) { 1160 } else if (info.hints == 0) {
1154 kind = MessageKind.HIDDEN_WARNINGS; 1161 kind = MessageKind.HIDDEN_WARNINGS;
1155 } 1162 }
1156 MessageTemplate template = MessageTemplate.TEMPLATES[kind]; 1163 MessageTemplate template = MessageTemplate.TEMPLATES[kind];
1157 reportDiagnostic(null, 1164 Message message = template.message(
1158 template.message( 1165 {'warnings': info.warnings,
1159 {'warnings': info.warnings, 1166 'hints': info.hints,
1160 'hints': info.hints, 1167 'uri': uri},
1161 'uri': uri}, 1168 terseDiagnostics);
1162 terseDiagnostics), 1169 reportDiagnostic(
1170 new DiagnosticMessage(null, null, message),
1171 const <DiagnosticMessage>[],
1163 api.Diagnostic.HINT); 1172 api.Diagnostic.HINT);
1164 }); 1173 });
1165 } 1174 }
1166 1175
1167 if (compilationFailed){ 1176 if (compilationFailed){
1168 if (!generateCodeWithCompileTimeErrors) return; 1177 if (!generateCodeWithCompileTimeErrors) return;
1169 if (!backend.enableCodegenWithErrorsIfSupported(NO_LOCATION_SPANNABLE)) { 1178 if (!backend.enableCodegenWithErrorsIfSupported(NO_LOCATION_SPANNABLE)) {
1170 return; 1179 return;
1171 } 1180 }
1172 } 1181 }
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
1319 } 1328 }
1320 if (identical(e.kind, ElementKind.GENERATIVE_CONSTRUCTOR)) { 1329 if (identical(e.kind, ElementKind.GENERATIVE_CONSTRUCTOR)) {
1321 resolved.remove(e); 1330 resolved.remove(e);
1322 } 1331 }
1323 if (backend.isBackendLibrary(e.library)) { 1332 if (backend.isBackendLibrary(e.library)) {
1324 resolved.remove(e); 1333 resolved.remove(e);
1325 } 1334 }
1326 } 1335 }
1327 log('Excess resolution work: ${resolved.length}.'); 1336 log('Excess resolution work: ${resolved.length}.');
1328 for (Element e in resolved) { 1337 for (Element e in resolved) {
1329 reportWarning(e, 1338 reportWarningMessage(e,
1330 MessageKind.GENERIC, 1339 MessageKind.GENERIC,
1331 {'text': 'Warning: $e resolved but not compiled.'}); 1340 {'text': 'Warning: $e resolved but not compiled.'});
1332 } 1341 }
1333 } 1342 }
1334 1343
1335 WorldImpact analyzeElement(Element element) { 1344 WorldImpact analyzeElement(Element element) {
1336 assert(invariant(element, 1345 assert(invariant(element,
1337 element.impliesType || 1346 element.impliesType ||
1338 element.isField || 1347 element.isField ||
1339 element.isFunction || 1348 element.isFunction ||
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
1386 assert(invariant(work.element, identical(world, enqueuer.codegen))); 1395 assert(invariant(work.element, identical(world, enqueuer.codegen)));
1387 if (shouldPrintProgress) { 1396 if (shouldPrintProgress) {
1388 // TODO(ahe): Add structured diagnostics to the compiler API and 1397 // TODO(ahe): Add structured diagnostics to the compiler API and
1389 // use it to separate this from the --verbose option. 1398 // use it to separate this from the --verbose option.
1390 log('Compiled ${enqueuer.codegen.generatedCode.length} methods.'); 1399 log('Compiled ${enqueuer.codegen.generatedCode.length} methods.');
1391 progress.reset(); 1400 progress.reset();
1392 } 1401 }
1393 return backend.codegen(work); 1402 return backend.codegen(work);
1394 } 1403 }
1395 1404
1396 void reportError(Spannable node, 1405 DiagnosticMessage createMessage(
1397 MessageKind messageKind, 1406 Spannable spannable,
1398 [Map arguments = const {}]) { 1407 MessageKind messageKind,
1399 reportDiagnosticInternal( 1408 [Map arguments = const {}]) {
1400 node, messageKind, arguments, api.Diagnostic.ERROR); 1409 SourceSpan span = spanFromSpannable(spannable);
1410 MessageTemplate template = MessageTemplate.TEMPLATES[messageKind];
1411 Message message = template.message(arguments, terseDiagnostics);
1412 return new DiagnosticMessage(span, spannable, message);
1401 } 1413 }
1402 1414
1403 void reportWarning(Spannable node, MessageKind messageKind, 1415 void reportError(
1404 [Map arguments = const {}]) { 1416 DiagnosticMessage message,
1405 reportDiagnosticInternal( 1417 [List<DiagnosticMessage> infos = const <DiagnosticMessage>[]]) {
1406 node, messageKind, arguments, api.Diagnostic.WARNING); 1418 reportDiagnosticInternal(message, infos, api.Diagnostic.ERROR);
1407 } 1419 }
1408 1420
1421 void reportWarning(
1422 DiagnosticMessage message,
1423 [List<DiagnosticMessage> infos = const <DiagnosticMessage>[]]) {
1424 reportDiagnosticInternal(message, infos, api.Diagnostic.WARNING);
1425 }
1426
1427 void reportHint(
1428 DiagnosticMessage message,
1429 [List<DiagnosticMessage> infos = const <DiagnosticMessage>[]]) {
1430 reportDiagnosticInternal(message, infos, api.Diagnostic.HINT);
1431 }
1432
1433 @deprecated
1409 void reportInfo(Spannable node, MessageKind messageKind, 1434 void reportInfo(Spannable node, MessageKind messageKind,
1410 [Map arguments = const {}]) { 1435 [Map arguments = const {}]) {
1411 reportDiagnosticInternal(node, messageKind, arguments, api.Diagnostic.INFO); 1436 reportDiagnosticInternal(
1437 createMessage(node, messageKind, arguments),
1438 const <DiagnosticMessage>[],
1439 api.Diagnostic.INFO);
1412 } 1440 }
1413 1441
1414 void reportHint(Spannable node, MessageKind messageKind, 1442 void reportDiagnosticInternal(DiagnosticMessage message,
1415 [Map arguments = const {}]) { 1443 List<DiagnosticMessage> infos,
1416 reportDiagnosticInternal(node, messageKind, arguments, api.Diagnostic.HINT);
1417 }
1418
1419 void reportDiagnosticInternal(Spannable node,
1420 MessageKind messageKind,
1421 Map arguments,
1422 api.Diagnostic kind) { 1444 api.Diagnostic kind) {
1423 if (!showPackageWarnings && node != NO_LOCATION_SPANNABLE) { 1445 if (!showPackageWarnings && message.spannable != NO_LOCATION_SPANNABLE) {
1424 switch (kind) { 1446 switch (kind) {
1425 case api.Diagnostic.WARNING: 1447 case api.Diagnostic.WARNING:
1426 case api.Diagnostic.HINT: 1448 case api.Diagnostic.HINT:
1427 Element element = elementFromSpannable(node); 1449 Element element = elementFromSpannable(message.spannable);
1428 if (!inUserCode(element, assumeInUserCode: true)) { 1450 if (!inUserCode(element, assumeInUserCode: true)) {
1429 Uri uri = getCanonicalUri(element); 1451 Uri uri = getCanonicalUri(element);
1430 SuppressionInfo info = 1452 SuppressionInfo info =
1431 suppressedWarnings.putIfAbsent(uri, () => new SuppressionInfo()); 1453 suppressedWarnings.putIfAbsent(uri, () => new SuppressionInfo());
1432 if (kind == api.Diagnostic.WARNING) { 1454 if (kind == api.Diagnostic.WARNING) {
1433 info.warnings++; 1455 info.warnings++;
1434 } else { 1456 } else {
1435 info.hints++; 1457 info.hints++;
1436 } 1458 }
1437 lastDiagnosticWasFiltered = true; 1459 lastDiagnosticWasFiltered = true;
1438 return; 1460 return;
1439 } 1461 }
1440 break; 1462 break;
1441 case api.Diagnostic.INFO: 1463 case api.Diagnostic.INFO:
1442 if (lastDiagnosticWasFiltered) { 1464 if (lastDiagnosticWasFiltered) {
1443 return; 1465 return;
1444 } 1466 }
1445 break; 1467 break;
1446 } 1468 }
1447 } 1469 }
1448 lastDiagnosticWasFiltered = false; 1470 lastDiagnosticWasFiltered = false;
1449 MessageTemplate template = MessageTemplate.TEMPLATES[messageKind]; 1471 reportDiagnostic(message, infos, kind);
1450 reportDiagnostic(
1451 node,
1452 template.message(arguments, terseDiagnostics),
1453 kind);
1454 } 1472 }
1455 1473
1456 void reportDiagnostic(Spannable span, 1474 void reportDiagnostic(DiagnosticMessage message,
1457 Message message, 1475 List<DiagnosticMessage> infos,
1458 api.Diagnostic kind); 1476 api.Diagnostic kind);
1459 1477
1460 void reportAssertionFailure(SpannableAssertionFailure ex) { 1478 void reportAssertionFailure(SpannableAssertionFailure ex) {
1461 String message = (ex.message != null) ? tryToString(ex.message) 1479 String message = (ex.message != null) ? tryToString(ex.message)
1462 : tryToString(ex); 1480 : tryToString(ex);
1463 reportDiagnosticInternal( 1481 reportDiagnosticInternal(
1464 ex.node, MessageKind.GENERIC, {'text': message}, api.Diagnostic.CRASH); 1482 createMessage(ex.node, MessageKind.GENERIC, {'text': message}),
1483 const <DiagnosticMessage>[],
1484 api.Diagnostic.CRASH);
1465 } 1485 }
1466 1486
1467 SourceSpan spanFromTokens(Token begin, Token end, [Uri uri]) { 1487 SourceSpan spanFromTokens(Token begin, Token end, [Uri uri]) {
1468 if (begin == null || end == null) { 1488 if (begin == null || end == null) {
1469 // TODO(ahe): We can almost always do better. Often it is only 1489 // TODO(ahe): We can almost always do better. Often it is only
1470 // end that is null. Otherwise, we probably know the current 1490 // end that is null. Otherwise, we probably know the current
1471 // URI. 1491 // URI.
1472 throw 'Cannot find tokens to produce error message.'; 1492 throw 'Cannot find tokens to produce error message.';
1473 } 1493 }
1474 if (uri == null && currentElement != null) { 1494 if (uri == null && currentElement != null) {
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
1591 currentToken = currentToken.next; 1611 currentToken = currentToken.next;
1592 } 1612 }
1593 return firstToken; 1613 return firstToken;
1594 } 1614 }
1595 1615
1596 void reportUnusedCode() { 1616 void reportUnusedCode() {
1597 void checkLive(member) { 1617 void checkLive(member) {
1598 if (member.isErroneous) return; 1618 if (member.isErroneous) return;
1599 if (member.isFunction) { 1619 if (member.isFunction) {
1600 if (!enqueuer.resolution.hasBeenResolved(member)) { 1620 if (!enqueuer.resolution.hasBeenResolved(member)) {
1601 reportHint(member, MessageKind.UNUSED_METHOD, 1621 reportHintMessage(
1602 {'name': member.name}); 1622 member, MessageKind.UNUSED_METHOD, {'name': member.name});
1603 } 1623 }
1604 } else if (member.isClass) { 1624 } else if (member.isClass) {
1605 if (!member.isResolved) { 1625 if (!member.isResolved) {
1606 reportHint(member, MessageKind.UNUSED_CLASS, 1626 reportHintMessage(
1607 {'name': member.name}); 1627 member, MessageKind.UNUSED_CLASS, {'name': member.name});
1608 } else { 1628 } else {
1609 member.forEachLocalMember(checkLive); 1629 member.forEachLocalMember(checkLive);
1610 } 1630 }
1611 } else if (member.isTypedef) { 1631 } else if (member.isTypedef) {
1612 if (!member.isResolved) { 1632 if (!member.isResolved) {
1613 reportHint(member, MessageKind.UNUSED_TYPEDEF, 1633 reportHintMessage(
1614 {'name': member.name}); 1634 member, MessageKind.UNUSED_TYPEDEF, {'name': member.name});
1615 } 1635 }
1616 } 1636 }
1617 } 1637 }
1618 libraryLoader.libraries.forEach((LibraryElement library) { 1638 libraryLoader.libraries.forEach((LibraryElement library) {
1619 // TODO(ahe): Implement better heuristics to discover entry points of 1639 // TODO(ahe): Implement better heuristics to discover entry points of
1620 // packages and use that to discover unused implementation details in 1640 // packages and use that to discover unused implementation details in
1621 // packages. 1641 // packages.
1622 if (library.isPlatformLibrary || library.isPackageLibrary) return; 1642 if (library.isPlatformLibrary || library.isPackageLibrary) return;
1623 library.compilationUnits.forEach((unit) { 1643 library.compilationUnits.forEach((unit) {
1624 unit.forEachLocalMember(checkLive); 1644 unit.forEachLocalMember(checkLive);
(...skipping 207 matching lines...) Expand 10 before | Expand all | Expand 10 after
1832 1852
1833 @override 1853 @override
1834 InterfaceType streamType([DartType elementType]) { 1854 InterfaceType streamType([DartType elementType]) {
1835 InterfaceType type = streamClass.computeType(compiler); 1855 InterfaceType type = streamClass.computeType(compiler);
1836 if (elementType == null) { 1856 if (elementType == null) {
1837 return streamClass.rawType; 1857 return streamClass.rawType;
1838 } 1858 }
1839 return type.createInstantiation([elementType]); 1859 return type.createInstantiation([elementType]);
1840 } 1860 }
1841 } 1861 }
OLDNEW
« no previous file with comments | « pkg/compiler/lib/src/compile_time_constants.dart ('k') | pkg/compiler/lib/src/dart_backend/backend.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698