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

Unified Diff: pkg/analysis_server/lib/src/status/get_handler.dart

Issue 1211243003: Re-implement the status page for the new task model (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Add missed file Created 5 years, 6 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
« no previous file with comments | « pkg/analysis_server/lib/src/server/http_server.dart ('k') | pkg/analyzer/lib/src/context/cache.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/analysis_server/lib/src/status/get_handler.dart
diff --git a/pkg/analysis_server/lib/src/get_handler.dart b/pkg/analysis_server/lib/src/status/get_handler.dart
similarity index 89%
copy from pkg/analysis_server/lib/src/get_handler.dart
copy to pkg/analysis_server/lib/src/status/get_handler.dart
index 983f689abcd823e173ed492092bdf239b79149c0..01a330aefceacae35e0b914103a99cbefc4d8976 100644
--- a/pkg/analysis_server/lib/src/get_handler.dart
+++ b/pkg/analysis_server/lib/src/status/get_handler.dart
@@ -2,7 +2,7 @@
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
-library analysis_server.src.get_handler;
+library analysis_server.src.status.get_handler;
import 'dart:async';
import 'dart:collection';
@@ -24,13 +24,18 @@ import 'package:analysis_server/src/socket_server.dart';
import 'package:analysis_server/src/status/ast_writer.dart';
import 'package:analysis_server/src/status/element_writer.dart';
import 'package:analyzer/file_system/file_system.dart';
+import 'package:analyzer/src/context/cache.dart';
import 'package:analyzer/src/generated/ast.dart';
import 'package:analyzer/src/generated/element.dart';
-import 'package:analyzer/src/generated/engine.dart';
+import 'package:analyzer/src/generated/engine.dart'
+ hide AnalysisContextImpl, AnalysisTask;
import 'package:analyzer/src/generated/java_engine.dart';
import 'package:analyzer/src/generated/source.dart';
+import 'package:analyzer/src/generated/utilities_collection.dart';
import 'package:analyzer/src/generated/utilities_general.dart';
-import 'package:analyzer/task/model.dart' as newTask;
+import 'package:analyzer/src/task/dart.dart';
+import 'package:analyzer/task/dart.dart';
+import 'package:analyzer/task/model.dart';
import 'package:plugin/plugin.dart';
/**
@@ -222,18 +227,49 @@ class GetHandler {
}
/**
+ * Return any AST structure stored in the given [entry].
+ */
+ CompilationUnit _getAnyAst(CacheEntry entry) {
+ CompilationUnit unit = entry.getValue(PARSED_UNIT);
+ if (unit != null) {
+ return unit;
+ }
+ unit = entry.getValue(RESOLVED_UNIT1);
+ if (unit != null) {
+ return unit;
+ }
+ unit = entry.getValue(RESOLVED_UNIT2);
+ if (unit != null) {
+ return unit;
+ }
+ unit = entry.getValue(RESOLVED_UNIT3);
+ if (unit != null) {
+ return unit;
+ }
+ unit = entry.getValue(RESOLVED_UNIT4);
+ if (unit != null) {
+ return unit;
+ }
+ unit = entry.getValue(RESOLVED_UNIT5);
+ if (unit != null) {
+ return unit;
+ }
+ return entry.getValue(RESOLVED_UNIT);
+ }
+
+ /**
* Return `true` if the given analysis [context] has at least one entry with
* an exception.
*/
- bool _hasException(AnalysisContextImpl context) {
- bool hasException = false;
- context.visitCacheItems((Source source, SourceEntry sourceEntry,
- DataDescriptor rowDesc, CacheState state) {
- if (sourceEntry.exception != null) {
- hasException = true;
+ bool _hasException(InternalAnalysisContext context) {
+ MapIterator<AnalysisTarget, CacheEntry> iterator =
+ context.analysisCache.iterator();
+ while (iterator.moveNext()) {
+ if (iterator.value.exception != null) {
+ return true;
}
- });
- return hasException;
+ }
+ return false;
}
/**
@@ -306,8 +342,8 @@ class GetHandler {
'Average Time (in ms)'
], header: true);
- Map<Type, int> countMap = newTask.AnalysisTask.countMap;
- Map<Type, Stopwatch> stopwatchMap = newTask.AnalysisTask.stopwatchMap;
+ Map<Type, int> countMap = AnalysisTask.countMap;
+ Map<Type, Stopwatch> stopwatchMap = AnalysisTask.stopwatchMap;
List<Type> taskClasses = stopwatchMap.keys.toList();
taskClasses.sort((Type first, Type second) =>
first.toString().compareTo(second.toString()));
@@ -389,7 +425,7 @@ class GetHandler {
request, 'Query parameter $SOURCE_QUERY_PARAM required');
}
- AnalysisContextImpl context = analysisServer.folderMap[folder];
+ InternalAnalysisContext context = analysisServer.folderMap[folder];
_writeResponse(request, (StringBuffer buffer) {
_writePage(buffer, 'Analysis Server - AST Structure', [
@@ -401,12 +437,12 @@ class GetHandler {
buffer.write('<p>Not found.</p>');
return;
}
- SourceEntry entry = context.getReadableSourceEntryOrNull(source);
+ CacheEntry entry = context.analysisCache.get(source);
if (entry == null) {
buffer.write('<p>Not found.</p>');
return;
}
- CompilationUnit ast = (entry as DartEntry).anyParsedCompilationUnit;
+ CompilationUnit ast = _getAnyAst(entry);
if (ast == null) {
buffer.write('<p>null</p>');
return;
@@ -448,21 +484,32 @@ class GetHandler {
}
List<Folder> allContexts = <Folder>[];
- Map<Folder, SourceEntry> entryMap = new HashMap<Folder, SourceEntry>();
+ Map<Folder, List<CacheEntry>> entryMap =
+ new HashMap<Folder, List<CacheEntry>>();
analysisServer.folderMap
- .forEach((Folder folder, AnalysisContextImpl context) {
+ .forEach((Folder folder, InternalAnalysisContext context) {
Source source = context.sourceFactory.forUri(sourceUri);
if (source != null) {
- SourceEntry entry = context.getReadableSourceEntryOrNull(source);
- if (entry != null) {
- allContexts.add(folder);
- entryMap[folder] = entry;
+ MapIterator<AnalysisTarget, CacheEntry> iterator =
+ context.analysisCache.iterator();
+ while (iterator.moveNext()) {
+ if (source == iterator.key.source) {
+ if (!allContexts.contains(folder)) {
+ allContexts.add(folder);
+ }
+ List<CacheEntry> entries = entryMap[folder];
+ if (entries == null) {
+ entries = <CacheEntry>[];
+ entryMap[folder] = entries;
+ }
+ entries.add(iterator.value);
+ }
}
}
});
allContexts.sort((Folder firstFolder, Folder secondFolder) =>
firstFolder.path.compareTo(secondFolder.path));
- AnalysisContextImpl context = analysisServer.folderMap[folder];
+ InternalAnalysisContext context = analysisServer.folderMap[folder];
_writeResponse(request, (StringBuffer buffer) {
_writePage(buffer, 'Analysis Server - Cache Entry', [
@@ -477,7 +524,7 @@ class GetHandler {
} else {
buffer.write('<br>');
}
- AnalysisContextImpl analyzingContext =
+ InternalAnalysisContext analyzingContext =
analysisServer.folderMap[folder];
if (analyzingContext == context) {
buffer.write(folder.path);
@@ -487,7 +534,7 @@ class GetHandler {
SOURCE_QUERY_PARAM: sourceUri
}, HTML_ESCAPE.convert(folder.path)));
}
- if (entryMap[folder].explicitlyAdded) {
+ if (entryMap[folder][0].explicitlyAdded) {
buffer.write(' (explicit)');
} else {
buffer.write(' (implicit)');
@@ -495,34 +542,45 @@ class GetHandler {
});
buffer.write('</p>');
- SourceEntry entry = entryMap[folder];
- if (entry == null) {
+ List<CacheEntry> entries = entryMap[folder];
+ if (entries == null) {
buffer.write('<p>Not being analyzed in this context.</p>');
return;
}
- Map<String, String> linkParameters = <String, String>{
- CONTEXT_QUERY_PARAM: folder.path,
- SOURCE_QUERY_PARAM: sourceUri
- };
-
- buffer.write('<h3>Library Independent</h3>');
- _writeDescriptorTable(buffer, entry.descriptors, entry.getState,
- entry.getValue, linkParameters);
- if (entry is DartEntry) {
- for (Source librarySource in entry.containingLibraries) {
- String libraryName = HTML_ESCAPE.convert(librarySource.fullName);
- buffer.write('<h3>In library $libraryName:</h3>');
- _writeDescriptorTable(buffer, entry.libraryDescriptors,
- (DataDescriptor descriptor) =>
- entry.getStateInLibrary(descriptor, librarySource),
- (DataDescriptor descriptor) =>
- entry.getValueInLibrary(descriptor, librarySource),
- linkParameters);
+ for (CacheEntry entry in entries) {
+ Map<String, String> linkParameters = <String, String>{
+ CONTEXT_QUERY_PARAM: folder.path,
+ SOURCE_QUERY_PARAM: sourceUri
+ };
+ List<ResultDescriptor> results = entry.nonInvalidResults;
+ results.sort((ResultDescriptor first, ResultDescriptor second) =>
+ first.toString().compareTo(second.toString()));
+
+ buffer.write('<h3>');
+ buffer.write(HTML_ESCAPE.convert(entry.target.toString()));
+ buffer.write('</h3>');
+ buffer.write('<dl>');
+ buffer.write('<dt>time</dt><dd>');
+ buffer.write(entry.modificationTime);
+ buffer.write('</dd></dl>');
+ for (ResultDescriptor result in results) {
+ ResultData data = entry.getResultData(result);
+ String descriptorName = HTML_ESCAPE.convert(result.toString());
+ String descriptorState = HTML_ESCAPE.convert(data.state.toString());
+ buffer.write('<dt>$descriptorName ($descriptorState)</dt><dd>');
+ try {
+ _writeValueAsHtml(buffer, data.value, linkParameters);
+ } catch (exception) {
+ buffer.write('(${HTML_ESCAPE.convert(exception.toString())})');
+ }
+ buffer.write('</dd>');
}
- }
- if (entry.exception != null) {
- buffer.write('<h3>Exception</h3>');
- _writeException(buffer, entry.exception);
+ if (entry.exception != null) {
+ buffer.write('<dt>exception</dt><dd>');
+ _writeException(buffer, entry.exception);
+ buffer.write('</dd></dl>');
+ }
+ buffer.write('</dl>');
}
});
});
@@ -567,20 +625,26 @@ class GetHandler {
request, 'Query parameter $DESCRIPTOR_QUERY_PARAM required');
}
- Folder folder = _findFolder(analysisServer, contextFilter);
- AnalysisContextImpl context = analysisServer.folderMap[folder];
- List<String> links = <String>[];
- context.visitCacheItems((Source source, SourceEntry dartEntry,
- DataDescriptor rowDesc, CacheState state) {
- if (state != stateFilter || rowDesc.toString() != descriptorFilter) {
- return;
- }
- String link = makeLink(CACHE_ENTRY_PATH, {
- CONTEXT_QUERY_PARAM: folder.path,
- SOURCE_QUERY_PARAM: source.uri.toString()
- }, HTML_ESCAPE.convert(source.fullName));
- links.add(link);
- });
+ // TODO(brianwilkerson) Figure out how to convert the 'descriptorFilter' to
+ // a ResultDescriptor so that we can query the state, then uncomment the
+ // code below that computes and prints the list of links.
+// Folder folder = _findFolder(analysisServer, contextFilter);
+// InternalAnalysisContext context = analysisServer.folderMap[folder];
+// List<String> links = <String>[];
+// MapIterator<AnalysisTarget, CacheEntry> iterator = context.analysisCache.iterator();
+// while (iterator.moveNext()) {
+// Source source = iterator.key.source;
+// if (source != null) {
+// CacheEntry entry = iterator.value;
+// if (entry.getState(result) == stateFilter) {
+// String link = makeLink(CACHE_ENTRY_PATH, {
+// CONTEXT_QUERY_PARAM: folder.path,
+// SOURCE_QUERY_PARAM: source.uri.toString()
+// }, HTML_ESCAPE.convert(source.fullName));
+// links.add(link);
+// }
+// }
+// }
_writeResponse(request, (StringBuffer buffer) {
_writePage(buffer, 'Analysis Server - Cache Search', [
@@ -588,12 +652,13 @@ class GetHandler {
'Descriptor: ${HTML_ESCAPE.convert(descriptorFilter)}',
'State: ${HTML_ESCAPE.convert(stateQueryParam)}'
], (StringBuffer buffer) {
- buffer.write('<p>${links.length} files found</p>');
- buffer.write('<ul>');
- links.forEach((String link) {
- buffer.write('<li>$link</li>');
- });
- buffer.write('</ul>');
+ buffer.write('<p>Cache search is not yet implemented.</p>');
+// buffer.write('<p>${links.length} files found</p>');
+// buffer.write('<ul>');
+// links.forEach((String link) {
+// buffer.write('<li>$link</li>');
+// });
+// buffer.write('</ul>');
});
});
}
@@ -705,30 +770,35 @@ class GetHandler {
List<String> implicitNames = <String>[];
Map<String, String> links = new HashMap<String, String>();
List<CaughtException> exceptions = <CaughtException>[];
- AnalysisContextImpl context = analysisServer.folderMap[folder];
+ InternalAnalysisContext context = analysisServer.folderMap[folder];
priorityNames = context.prioritySources
.map((Source source) => source.fullName)
.toList();
- context.visitCacheItems((Source source, SourceEntry sourceEntry,
- DataDescriptor rowDesc, CacheState state) {
- String sourceName = source.fullName;
- if (!links.containsKey(sourceName)) {
- CaughtException exception = sourceEntry.exception;
- if (exception != null) {
- exceptions.add(exception);
- }
- String link = makeLink(CACHE_ENTRY_PATH, {
- CONTEXT_QUERY_PARAM: folder.path,
- SOURCE_QUERY_PARAM: source.uri.toString()
- }, sourceName, exception != null);
- if (sourceEntry.explicitlyAdded) {
- explicitNames.add(sourceName);
- } else {
- implicitNames.add(sourceName);
+ MapIterator<AnalysisTarget, CacheEntry> iterator =
+ context.analysisCache.iterator();
+ while (iterator.moveNext()) {
+ Source source = iterator.key.source;
+ if (source != null) {
+ CacheEntry entry = iterator.value;
+ String sourceName = source.fullName;
+ if (!links.containsKey(sourceName)) {
+ CaughtException exception = entry.exception;
+ if (exception != null) {
+ exceptions.add(exception);
+ }
+ String link = makeLink(CACHE_ENTRY_PATH, {
+ CONTEXT_QUERY_PARAM: folder.path,
+ SOURCE_QUERY_PARAM: source.uri.toString()
+ }, sourceName, exception != null);
+ if (entry.explicitlyAdded) {
+ explicitNames.add(sourceName);
+ } else {
+ implicitNames.add(sourceName);
+ }
+ links[sourceName] = link;
}
- links[sourceName] = link;
}
- });
+ }
explicitNames.sort();
implicitNames.sort();
@@ -821,7 +891,7 @@ class GetHandler {
request, 'Query parameter $SOURCE_QUERY_PARAM required');
}
- AnalysisContextImpl context = analysisServer.folderMap[folder];
+ InternalAnalysisContext context = analysisServer.folderMap[folder];
_writeResponse(request, (StringBuffer buffer) {
_writePage(buffer, 'Analysis Server - Element Model', [
@@ -833,12 +903,12 @@ class GetHandler {
buffer.write('<p>Not found.</p>');
return;
}
- SourceEntry entry = context.getReadableSourceEntryOrNull(source);
+ CacheEntry entry = context.analysisCache.get(source);
if (entry == null) {
buffer.write('<p>Not found.</p>');
return;
}
- LibraryElement element = entry.getValue(DartEntry.ELEMENT);
+ LibraryElement element = entry.getValue(LIBRARY_ELEMENT);
if (element == null) {
buffer.write('<p>null</p>');
return;
@@ -1184,33 +1254,6 @@ class GetHandler {
}
/**
- * Generate a table showing the cache values corresponding to the given
- * [descriptors], using [getState] to get the cache state corresponding to
- * each descriptor, and [getValue] to get the cached value corresponding to
- * each descriptor. Append the resulting HTML to the given [buffer]. The
- * [linkParameters] will be used if the value is too large to be displayed on
- * the current page and needs to be linked to a separate page.
- */
- void _writeDescriptorTable(StringBuffer buffer,
- List<DataDescriptor> descriptors, CacheState getState(DataDescriptor),
- dynamic getValue(DataDescriptor), Map<String, String> linkParameters) {
- buffer.write('<dl>');
- for (DataDescriptor descriptor in descriptors) {
- String descriptorName = HTML_ESCAPE.convert(descriptor.toString());
- String descriptorState =
- HTML_ESCAPE.convert(getState(descriptor).toString());
- buffer.write('<dt>$descriptorName ($descriptorState)</dt><dd>');
- try {
- _writeValueAsHtml(buffer, getValue(descriptor), linkParameters);
- } catch (exception) {
- buffer.write('(${HTML_ESCAPE.convert(exception.toString())})');
- }
- buffer.write('</dd>');
- }
- buffer.write('</dl>');
- }
-
- /**
* Write the status of the edit domain (on the main status page) to the given
* [buffer].
*/
« no previous file with comments | « pkg/analysis_server/lib/src/server/http_server.dart ('k') | pkg/analyzer/lib/src/context/cache.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698