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

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

Issue 1801883002: Remove old index and search implementations. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 9 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) 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; 5 library analysis.server;
6 6
7 import 'dart:async'; 7 import 'dart:async';
8 import 'dart:collection'; 8 import 'dart:collection';
9 import 'dart:core' hide Resource; 9 import 'dart:core' hide Resource;
10 import 'dart:math' show max; 10 import 'dart:math' show max;
11 11
12 import 'package:analysis_server/plugin/protocol/protocol.dart' 12 import 'package:analysis_server/plugin/protocol/protocol.dart'
13 hide AnalysisOptions, Element; 13 hide AnalysisOptions, Element;
14 import 'package:analysis_server/src/analysis_logger.dart'; 14 import 'package:analysis_server/src/analysis_logger.dart';
15 import 'package:analysis_server/src/channel/channel.dart'; 15 import 'package:analysis_server/src/channel/channel.dart';
16 import 'package:analysis_server/src/context_manager.dart'; 16 import 'package:analysis_server/src/context_manager.dart';
17 import 'package:analysis_server/src/operation/operation.dart'; 17 import 'package:analysis_server/src/operation/operation.dart';
18 import 'package:analysis_server/src/operation/operation_analysis.dart'; 18 import 'package:analysis_server/src/operation/operation_analysis.dart';
19 import 'package:analysis_server/src/operation/operation_queue.dart'; 19 import 'package:analysis_server/src/operation/operation_queue.dart';
20 import 'package:analysis_server/src/plugin/server_plugin.dart'; 20 import 'package:analysis_server/src/plugin/server_plugin.dart';
21 import 'package:analysis_server/src/services/correction/namespace.dart'; 21 import 'package:analysis_server/src/services/correction/namespace.dart';
22 import 'package:analysis_server/src/services/index/index.dart'; 22 import 'package:analysis_server/src/services/index/index.dart';
23 import 'package:analysis_server/src/services/index2/index2.dart';
24 import 'package:analysis_server/src/services/search/search_engine.dart'; 23 import 'package:analysis_server/src/services/search/search_engine.dart';
25 import 'package:analysis_server/src/services/search/search_engine_internal2.dart '; 24 import 'package:analysis_server/src/services/search/search_engine_internal.dart' ;
26 import 'package:analyzer/dart/ast/ast.dart'; 25 import 'package:analyzer/dart/ast/ast.dart';
27 import 'package:analyzer/dart/element/element.dart'; 26 import 'package:analyzer/dart/element/element.dart';
28 import 'package:analyzer/file_system/file_system.dart'; 27 import 'package:analyzer/file_system/file_system.dart';
29 import 'package:analyzer/instrumentation/instrumentation.dart'; 28 import 'package:analyzer/instrumentation/instrumentation.dart';
30 import 'package:analyzer/plugin/embedded_resolver_provider.dart'; 29 import 'package:analyzer/plugin/embedded_resolver_provider.dart';
31 import 'package:analyzer/plugin/resolver_provider.dart'; 30 import 'package:analyzer/plugin/resolver_provider.dart';
32 import 'package:analyzer/source/embedder.dart'; 31 import 'package:analyzer/source/embedder.dart';
33 import 'package:analyzer/source/pub_package_map_provider.dart'; 32 import 'package:analyzer/source/pub_package_map_provider.dart';
34 import 'package:analyzer/src/dart/ast/utilities.dart'; 33 import 'package:analyzer/src/dart/ast/utilities.dart';
35 import 'package:analyzer/src/generated/engine.dart'; 34 import 'package:analyzer/src/generated/engine.dart';
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
103 * The [ResourceProvider] using which paths are converted into [Resource]s. 102 * The [ResourceProvider] using which paths are converted into [Resource]s.
104 */ 103 */
105 final ResourceProvider resourceProvider; 104 final ResourceProvider resourceProvider;
106 105
107 /** 106 /**
108 * The [Index] for this server, may be `null` if indexing is disabled. 107 * The [Index] for this server, may be `null` if indexing is disabled.
109 */ 108 */
110 final Index index; 109 final Index index;
111 110
112 /** 111 /**
113 * The [Index2] for this server, may be `null` if indexing is disabled.
114 */
115 final Index2 index2;
116
117 /**
118 * The [SearchEngine] for this server, may be `null` if indexing is disabled. 112 * The [SearchEngine] for this server, may be `null` if indexing is disabled.
119 */ 113 */
120 final SearchEngine searchEngine; 114 final SearchEngine searchEngine;
121 115
122 /** 116 /**
123 * The plugin associated with this analysis server. 117 * The plugin associated with this analysis server.
124 */ 118 */
125 final ServerPlugin serverPlugin; 119 final ServerPlugin serverPlugin;
126 120
127 /** 121 /**
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after
307 * If [rethrowExceptions] is true, then any exceptions thrown by analysis are 301 * If [rethrowExceptions] is true, then any exceptions thrown by analysis are
308 * propagated up the call stack. The default is true to allow analysis 302 * propagated up the call stack. The default is true to allow analysis
309 * exceptions to show up in unit tests, but it should be set to false when 303 * exceptions to show up in unit tests, but it should be set to false when
310 * running a full analysis server. 304 * running a full analysis server.
311 */ 305 */
312 AnalysisServer( 306 AnalysisServer(
313 this.channel, 307 this.channel,
314 this.resourceProvider, 308 this.resourceProvider,
315 PubPackageMapProvider packageMapProvider, 309 PubPackageMapProvider packageMapProvider,
316 Index _index, 310 Index _index,
317 Index2 _index2,
318 this.serverPlugin, 311 this.serverPlugin,
319 this.options, 312 this.options,
320 this.defaultSdkCreator, 313 this.defaultSdkCreator,
321 this.instrumentationService, 314 this.instrumentationService,
322 {ResolverProvider packageResolverProvider: null, 315 {ResolverProvider packageResolverProvider: null,
323 EmbeddedResolverProvider embeddedResolverProvider: null, 316 EmbeddedResolverProvider embeddedResolverProvider: null,
324 this.rethrowExceptions: true}) 317 this.rethrowExceptions: true})
325 : index = _index, 318 : index = _index,
326 index2 = _index2, 319 searchEngine = _index != null ? new SearchEngineImpl(_index) : null {
327 searchEngine = _index != null ? new SearchEngineImpl2(_index2) : null {
328 _performance = performanceDuringStartup; 320 _performance = performanceDuringStartup;
329 defaultContextOptions.incremental = true; 321 defaultContextOptions.incremental = true;
330 defaultContextOptions.incrementalApi = 322 defaultContextOptions.incrementalApi =
331 options.enableIncrementalResolutionApi; 323 options.enableIncrementalResolutionApi;
332 defaultContextOptions.incrementalValidation = 324 defaultContextOptions.incrementalValidation =
333 options.enableIncrementalResolutionValidation; 325 options.enableIncrementalResolutionValidation;
334 defaultContextOptions.generateImplicitErrors = false; 326 defaultContextOptions.generateImplicitErrors = false;
335 operationQueue = new ServerOperationQueue(); 327 operationQueue = new ServerOperationQueue();
336 sdkManager = new DartSdkManager(defaultSdkCreator); 328 sdkManager = new DartSdkManager(defaultSdkCreator);
337 contextManager = new ContextManagerImpl( 329 contextManager = new ContextManagerImpl(
(...skipping 869 matching lines...) Expand 10 before | Expand all | Expand 10 after
1207 * Returns `true` if errors should be reported for [file] with the given 1199 * Returns `true` if errors should be reported for [file] with the given
1208 * absolute path. 1200 * absolute path.
1209 */ 1201 */
1210 bool shouldSendErrorsNotificationFor(String file) { 1202 bool shouldSendErrorsNotificationFor(String file) {
1211 return !_noErrorNotification && contextManager.isInAnalysisRoot(file); 1203 return !_noErrorNotification && contextManager.isInAnalysisRoot(file);
1212 } 1204 }
1213 1205
1214 void shutdown() { 1206 void shutdown() {
1215 running = false; 1207 running = false;
1216 if (index != null) { 1208 if (index != null) {
1217 index.clear();
1218 index.stop(); 1209 index.stop();
1219 } 1210 }
1220 // Defer closing the channel and shutting down the instrumentation server so 1211 // Defer closing the channel and shutting down the instrumentation server so
1221 // that the shutdown response can be sent and logged. 1212 // that the shutdown response can be sent and logged.
1222 new Future(() { 1213 new Future(() {
1223 instrumentationService.shutdown(); 1214 instrumentationService.shutdown();
1224 channel.close(); 1215 channel.close();
1225 }); 1216 });
1226 } 1217 }
1227 1218
(...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after
1432 } 1423 }
1433 1424
1434 _scheduleAnalysisImplementedNotification() async { 1425 _scheduleAnalysisImplementedNotification() async {
1435 Set<String> files = analysisServices[AnalysisService.IMPLEMENTED]; 1426 Set<String> files = analysisServices[AnalysisService.IMPLEMENTED];
1436 if (files != null) { 1427 if (files != null) {
1437 scheduleImplementedNotification(this, files); 1428 scheduleImplementedNotification(this, files);
1438 } 1429 }
1439 } 1430 }
1440 1431
1441 /** 1432 /**
1442 * Schedules [performOperation] exection. 1433 * Schedules [performOperation] execution.
1443 */ 1434 */
1444 void _schedulePerformOperation() { 1435 void _schedulePerformOperation() {
1445 if (performOperationPending) { 1436 if (performOperationPending) {
1446 return; 1437 return;
1447 } 1438 }
1448 /* 1439 /*
1449 * TODO (danrubel) Rip out this workaround once the underlying problem 1440 * TODO (danrubel) Rip out this workaround once the underlying problem
1450 * is fixed. Currently, the VM and dart:io do not deliver content 1441 * is fixed. Currently, the VM and dart:io do not deliver content
1451 * on stdin in a timely manner if the event loop is busy. 1442 * on stdin in a timely manner if the event loop is busy.
1452 * To work around this problem, we delay for 1 millisecond 1443 * To work around this problem, we delay for 1 millisecond
1453 * every 25 milliseconds. 1444 * every 25 milliseconds.
1454 * 1445 *
1455 * To disable this workaround and see the underlying problem, 1446 * To disable this workaround and see the underlying problem,
1456 * set performOperationDelayFreqency to zero 1447 * set performOperationDelayFrequency to zero
1457 */ 1448 */
1458 int now = new DateTime.now().millisecondsSinceEpoch; 1449 int now = new DateTime.now().millisecondsSinceEpoch;
1459 if (now > _nextPerformOperationDelayTime && 1450 if (now > _nextPerformOperationDelayTime &&
1460 performOperationDelayFrequency > 0) { 1451 performOperationDelayFrequency > 0) {
1461 _nextPerformOperationDelayTime = now + performOperationDelayFrequency; 1452 _nextPerformOperationDelayTime = now + performOperationDelayFrequency;
1462 new Future.delayed(new Duration(milliseconds: 1), performOperation); 1453 new Future.delayed(new Duration(milliseconds: 1), performOperation);
1463 } else { 1454 } else {
1464 new Future(performOperation); 1455 new Future(performOperation);
1465 } 1456 }
1466 performOperationPending = true; 1457 performOperationPending = true;
1467 } 1458 }
1468 1459
1469 /** 1460 /**
1470 * Listen for context events and invalidate index. 1461 * Listen for context events and invalidate index.
1471 * 1462 *
1472 * It is possible that this method will do more in the future, e.g. listening 1463 * It is possible that this method will do more in the future, e.g. listening
1473 * for summary information and linking pre-indexed packages into the index, 1464 * for summary information and linking pre-indexed packages into the index,
1474 * but for now we only invalidate project specific index information. 1465 * but for now we only invalidate project specific index information.
1475 */ 1466 */
1476 void _setupIndexInvalidation() { 1467 void _setupIndexInvalidation() {
1477 if (index2 == null) { 1468 if (index == null) {
1478 return; 1469 return;
1479 } 1470 }
1480 onContextsChanged.listen((ContextsChangedEvent event) { 1471 onContextsChanged.listen((ContextsChangedEvent event) {
1481 for (AnalysisContext context in event.added) { 1472 for (AnalysisContext context in event.added) {
1482 context 1473 context
1483 .onResultChanged(RESOLVED_UNIT) 1474 .onResultChanged(RESOLVED_UNIT)
1484 .listen((ResultChangedEvent event) { 1475 .listen((ResultChangedEvent event) {
1485 if (event.wasInvalidated) { 1476 if (event.wasInvalidated) {
1486 LibrarySpecificUnit target = event.target; 1477 LibrarySpecificUnit target = event.target;
1487 index2.removeUnit(event.context, target.library, target.unit); 1478 index.removeUnit(event.context, target.library, target.unit);
1488 } 1479 }
1489 }); 1480 });
1490 } 1481 }
1491 for (AnalysisContext context in event.removed) { 1482 for (AnalysisContext context in event.removed) {
1492 index2.removeContext(context); 1483 index.removeContext(context);
1493 } 1484 }
1494 }); 1485 });
1495 } 1486 }
1496 } 1487 }
1497 1488
1498 class AnalysisServerOptions { 1489 class AnalysisServerOptions {
1499 bool enableIncrementalResolutionApi = false; 1490 bool enableIncrementalResolutionApi = false;
1500 bool enableIncrementalResolutionValidation = false; 1491 bool enableIncrementalResolutionValidation = false;
1501 bool noErrorNotification = false; 1492 bool noErrorNotification = false;
1502 bool noIndex = false; 1493 bool noIndex = false;
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
1579 1570
1580 @override 1571 @override
1581 void computingPackageMap(bool computing) => 1572 void computingPackageMap(bool computing) =>
1582 analysisServer._computingPackageMap(computing); 1573 analysisServer._computingPackageMap(computing);
1583 1574
1584 @override 1575 @override
1585 void removeContext(Folder folder, List<String> flushedFiles) { 1576 void removeContext(Folder folder, List<String> flushedFiles) {
1586 AnalysisContext context = analysisServer.folderMap.remove(folder); 1577 AnalysisContext context = analysisServer.folderMap.remove(folder);
1587 sendAnalysisNotificationFlushResults(analysisServer, flushedFiles); 1578 sendAnalysisNotificationFlushResults(analysisServer, flushedFiles);
1588 1579
1589 if (analysisServer.index != null) {
1590 analysisServer.index.removeContext(context);
1591 }
1592 analysisServer.operationQueue.contextRemoved(context); 1580 analysisServer.operationQueue.contextRemoved(context);
1593 analysisServer._onContextsChangedController 1581 analysisServer._onContextsChangedController
1594 .add(new ContextsChangedEvent(removed: [context])); 1582 .add(new ContextsChangedEvent(removed: [context]));
1595 analysisServer.sendContextAnalysisDoneNotifications( 1583 analysisServer.sendContextAnalysisDoneNotifications(
1596 context, AnalysisDoneReason.CONTEXT_REMOVED); 1584 context, AnalysisDoneReason.CONTEXT_REMOVED);
1597 context.dispose(); 1585 context.dispose();
1598 } 1586 }
1599 1587
1600 @override 1588 @override
1601 void updateContextPackageUriResolver(AnalysisContext context) { 1589 void updateContextPackageUriResolver(AnalysisContext context) {
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
1739 * PerformAnalysisOperation._sendNotices. 1727 * PerformAnalysisOperation._sendNotices.
1740 */ 1728 */
1741 static PerformanceTag notices = new PerformanceTag('notices'); 1729 static PerformanceTag notices = new PerformanceTag('notices');
1742 1730
1743 /** 1731 /**
1744 * The [PerformanceTag] for time spent running pub. 1732 * The [PerformanceTag] for time spent running pub.
1745 */ 1733 */
1746 static PerformanceTag pub = new PerformanceTag('pub'); 1734 static PerformanceTag pub = new PerformanceTag('pub');
1747 1735
1748 /** 1736 /**
1749 * The [PerformanceTag] for time spent in server comminication channels. 1737 * The [PerformanceTag] for time spent in server communication channels.
1750 */ 1738 */
1751 static PerformanceTag serverChannel = new PerformanceTag('serverChannel'); 1739 static PerformanceTag serverChannel = new PerformanceTag('serverChannel');
1752 1740
1753 /** 1741 /**
1754 * The [PerformanceTag] for time spent in server request handlers. 1742 * The [PerformanceTag] for time spent in server request handlers.
1755 */ 1743 */
1756 static PerformanceTag serverRequests = new PerformanceTag('serverRequests'); 1744 static PerformanceTag serverRequests = new PerformanceTag('serverRequests');
1757 1745
1758 /** 1746 /**
1759 * The [PerformanceTag] for time spent in split store microtasks. 1747 * The [PerformanceTag] for time spent in split store microtasks.
1760 */ 1748 */
1761 static PerformanceTag splitStore = new PerformanceTag('splitStore'); 1749 static PerformanceTag splitStore = new PerformanceTag('splitStore');
1762 } 1750 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698