OLD | NEW |
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, 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 analysis_server.src.status.get_handler; | 5 library analysis_server.src.status.get_handler; |
6 | 6 |
7 import 'dart:async'; | 7 import 'dart:async'; |
8 import 'dart:collection'; | 8 import 'dart:collection'; |
9 import 'dart:convert'; | 9 import 'dart:convert'; |
10 import 'dart:io'; | 10 import 'dart:io'; |
(...skipping 661 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
672 } | 672 } |
673 String sourceUri = request.uri.queryParameters[SOURCE_QUERY_PARAM]; | 673 String sourceUri = request.uri.queryParameters[SOURCE_QUERY_PARAM]; |
674 if (sourceUri == null) { | 674 if (sourceUri == null) { |
675 return _returnFailure( | 675 return _returnFailure( |
676 request, 'Query parameter $SOURCE_QUERY_PARAM required'); | 676 request, 'Query parameter $SOURCE_QUERY_PARAM required'); |
677 } | 677 } |
678 | 678 |
679 List<Folder> allContexts = <Folder>[]; | 679 List<Folder> allContexts = <Folder>[]; |
680 Map<Folder, List<CacheEntry>> entryMap = | 680 Map<Folder, List<CacheEntry>> entryMap = |
681 new HashMap<Folder, List<CacheEntry>>(); | 681 new HashMap<Folder, List<CacheEntry>>(); |
| 682 StringBuffer invalidKeysBuffer = new StringBuffer(); |
682 analysisServer.folderMap | 683 analysisServer.folderMap |
683 .forEach((Folder folder, InternalAnalysisContext context) { | 684 .forEach((Folder folder, InternalAnalysisContext context) { |
684 Source source = context.sourceFactory.forUri(sourceUri); | 685 Source source = context.sourceFactory.forUri(sourceUri); |
685 if (source != null) { | 686 if (source != null) { |
686 MapIterator<AnalysisTarget, CacheEntry> iterator = | 687 MapIterator<AnalysisTarget, CacheEntry> iterator = |
687 context.analysisCache.iterator(); | 688 context.analysisCache.iterator(); |
688 while (iterator.moveNext()) { | 689 while (iterator.moveNext()) { |
689 if (source == iterator.key.source) { | 690 if (source == iterator.key.source) { |
690 if (!allContexts.contains(folder)) { | 691 if (!allContexts.contains(folder)) { |
691 allContexts.add(folder); | 692 allContexts.add(folder); |
692 } | 693 } |
693 List<CacheEntry> entries = entryMap[folder]; | 694 List<CacheEntry> entries = entryMap[folder]; |
694 if (entries == null) { | 695 if (entries == null) { |
695 entries = <CacheEntry>[]; | 696 entries = <CacheEntry>[]; |
696 entryMap[folder] = entries; | 697 entryMap[folder] = entries; |
697 } | 698 } |
698 entries.add(iterator.value); | 699 CacheEntry value = iterator.value; |
| 700 if (value == null) { |
| 701 if (invalidKeysBuffer.isNotEmpty) { |
| 702 invalidKeysBuffer.write(', '); |
| 703 } |
| 704 invalidKeysBuffer.write(iterator.key.toString()); |
| 705 } else { |
| 706 entries.add(value); |
| 707 } |
699 } | 708 } |
700 } | 709 } |
701 } | 710 } |
702 }); | 711 }); |
703 allContexts.sort((Folder firstFolder, Folder secondFolder) => | 712 allContexts.sort((Folder firstFolder, Folder secondFolder) => |
704 firstFolder.path.compareTo(secondFolder.path)); | 713 firstFolder.path.compareTo(secondFolder.path)); |
705 InternalAnalysisContext context = analysisServer.folderMap[folder]; | 714 InternalAnalysisContext context = analysisServer.folderMap[folder]; |
706 | 715 |
707 _writeResponse(request, (StringBuffer buffer) { | 716 _writeResponse(request, (StringBuffer buffer) { |
708 _writePage(buffer, 'Analysis Server - Cache Entry', | 717 _writePage(buffer, 'Analysis Server - Cache Entry', |
709 ['Context: $contextFilter', 'File: $sourceUri'], (HttpResponse) { | 718 ['Context: $contextFilter', 'File: $sourceUri'], (HttpResponse) { |
| 719 if (invalidKeysBuffer.isNotEmpty) { |
| 720 buffer.write('<h3>Targets with null Entries</h3><p>'); |
| 721 buffer.write(invalidKeysBuffer.toString()); |
| 722 buffer.write('</p>'); |
| 723 } |
710 List<CacheEntry> entries = entryMap[folder]; | 724 List<CacheEntry> entries = entryMap[folder]; |
711 buffer.write('<h3>Analyzing Contexts</h3><p>'); | 725 buffer.write('<h3>Analyzing Contexts</h3><p>'); |
712 bool first = true; | 726 bool first = true; |
713 allContexts.forEach((Folder folder) { | 727 allContexts.forEach((Folder folder) { |
714 if (first) { | 728 if (first) { |
715 first = false; | 729 first = false; |
716 } else { | 730 } else { |
717 buffer.write('<br>'); | 731 buffer.write('<br>'); |
718 } | 732 } |
719 InternalAnalysisContext analyzingContext = | 733 InternalAnalysisContext analyzingContext = |
(...skipping 1310 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2030 */ | 2044 */ |
2031 static String makeLink( | 2045 static String makeLink( |
2032 String path, Map<String, String> params, String innerHtml, | 2046 String path, Map<String, String> params, String innerHtml, |
2033 [bool hasError = false]) { | 2047 [bool hasError = false]) { |
2034 Uri uri = new Uri(path: path, queryParameters: params); | 2048 Uri uri = new Uri(path: path, queryParameters: params); |
2035 String href = HTML_ESCAPE.convert(uri.toString()); | 2049 String href = HTML_ESCAPE.convert(uri.toString()); |
2036 String classAttribute = hasError ? ' class="error"' : ''; | 2050 String classAttribute = hasError ? ' class="error"' : ''; |
2037 return '<a href="$href"$classAttribute>$innerHtml</a>'; | 2051 return '<a href="$href"$classAttribute>$innerHtml</a>'; |
2038 } | 2052 } |
2039 } | 2053 } |
OLD | NEW |