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

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

Issue 1412213003: Register .analysis_options files for analysis. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: 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
« no previous file with comments | « no previous file | pkg/analysis_server/lib/src/plugin/server_plugin.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 context.directory.manager; 5 library context.directory.manager;
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:core' hide Resource; 10 import 'dart:core' hide Resource;
11 11
12 import 'package:analyzer/src/context/context.dart' as context;
13 import 'package:analysis_server/plugin/analysis/resolver_provider.dart'; 12 import 'package:analysis_server/plugin/analysis/resolver_provider.dart';
14 import 'package:analysis_server/src/analysis_server.dart'; 13 import 'package:analysis_server/src/analysis_server.dart';
15 import 'package:analysis_server/src/server_options.dart';
16 import 'package:analyzer/file_system/file_system.dart'; 14 import 'package:analyzer/file_system/file_system.dart';
17 import 'package:analyzer/instrumentation/instrumentation.dart'; 15 import 'package:analyzer/instrumentation/instrumentation.dart';
18 import 'package:analyzer/plugin/options.dart'; 16 import 'package:analyzer/plugin/options.dart';
19 import 'package:analyzer/source/analysis_options_provider.dart'; 17 import 'package:analyzer/source/analysis_options_provider.dart';
20 import 'package:analyzer/source/package_map_provider.dart'; 18 import 'package:analyzer/source/package_map_provider.dart';
21 import 'package:analyzer/source/package_map_resolver.dart'; 19 import 'package:analyzer/source/package_map_resolver.dart';
22 import 'package:analyzer/source/path_filter.dart'; 20 import 'package:analyzer/source/path_filter.dart';
23 import 'package:analyzer/source/pub_package_map_provider.dart'; 21 import 'package:analyzer/source/pub_package_map_provider.dart';
24 import 'package:analyzer/source/sdk_ext.dart'; 22 import 'package:analyzer/source/sdk_ext.dart';
23 import 'package:analyzer/src/context/context.dart' as context;
25 import 'package:analyzer/src/generated/engine.dart'; 24 import 'package:analyzer/src/generated/engine.dart';
26 import 'package:analyzer/src/generated/java_engine.dart'; 25 import 'package:analyzer/src/generated/java_engine.dart';
27 import 'package:analyzer/src/generated/java_io.dart'; 26 import 'package:analyzer/src/generated/java_io.dart';
28 import 'package:analyzer/src/generated/source.dart'; 27 import 'package:analyzer/src/generated/source.dart';
29 import 'package:analyzer/src/generated/source_io.dart'; 28 import 'package:analyzer/src/generated/source_io.dart';
30 import 'package:package_config/packages.dart'; 29 import 'package:package_config/packages.dart';
31 import 'package:package_config/packages_file.dart' as pkgfile show parse; 30 import 'package:package_config/packages_file.dart' as pkgfile show parse;
32 import 'package:package_config/src/packages_impl.dart' show MapPackages; 31 import 'package:package_config/src/packages_impl.dart' show MapPackages;
33 import 'package:path/path.dart' as pathos; 32 import 'package:path/path.dart' as pathos;
34 import 'package:watcher/watcher.dart'; 33 import 'package:watcher/watcher.dart';
(...skipping 270 matching lines...) Expand 10 before | Expand all | Expand 10 after
305 void updateContextPackageUriResolver( 304 void updateContextPackageUriResolver(
306 Folder contextFolder, FolderDisposition disposition); 305 Folder contextFolder, FolderDisposition disposition);
307 } 306 }
308 307
309 /** 308 /**
310 * Class that maintains a mapping from included/excluded paths to a set of 309 * Class that maintains a mapping from included/excluded paths to a set of
311 * folders that should correspond to analysis contexts. 310 * folders that should correspond to analysis contexts.
312 */ 311 */
313 class ContextManagerImpl implements ContextManager { 312 class ContextManagerImpl implements ContextManager {
314 /** 313 /**
315 * File name of analysis options files.
316 */
317 static const String ANALYSIS_OPTIONS_FILE = '.analysis_options';
318
319 /**
320 * The name of the `lib` directory. 314 * The name of the `lib` directory.
321 */ 315 */
322 static const String LIB_DIR_NAME = 'lib'; 316 static const String LIB_DIR_NAME = 'lib';
323 317
324 /** 318 /**
325 * The name of `packages` folders. 319 * The name of `packages` folders.
326 */ 320 */
327 static const String PACKAGES_NAME = 'packages'; 321 static const String PACKAGES_NAME = 'packages';
328 322
329 /** 323 /**
(...skipping 397 matching lines...) Expand 10 before | Expand all | Expand 10 after
727 } else if (child is Folder) { 721 } else if (child is Folder) {
728 String shortName = child.shortName; 722 String shortName = child.shortName;
729 if (shortName == PACKAGES_NAME) { 723 if (shortName == PACKAGES_NAME) {
730 continue; 724 continue;
731 } 725 }
732 _addSourceFiles(changeSet, child, info); 726 _addSourceFiles(changeSet, child, info);
733 } 727 }
734 } 728 }
735 } 729 }
736 730
731 void _checkForAnalysisOptionsUpdate(
732 String path, ContextInfo info, ChangeType changeType) {
733 if (AnalysisEngine.isAnalysisOptionsFileName(path, pathContext)) {
734 var analysisContext = info.context;
735 if (analysisContext is context.AnalysisContextImpl) {
736 processOptionsForContext(info, info.folder,
737 optionsRemoved: changeType == ChangeType.REMOVE);
738 analysisContext.invalidateCachedResults();
739 callbacks.applyChangesToContext(info.folder, new ChangeSet());
740 }
741 }
742 }
743
737 void _checkForPackagespecUpdate( 744 void _checkForPackagespecUpdate(
738 String path, ContextInfo info, Folder folder) { 745 String path, ContextInfo info, Folder folder) {
739 // Check to see if this is the .packages file for this context and if so, 746 // Check to see if this is the .packages file for this context and if so,
740 // update the context's source factory. 747 // update the context's source factory.
741 if (pathContext.basename(path) == PACKAGE_SPEC_NAME && 748 if (pathContext.basename(path) == PACKAGE_SPEC_NAME &&
742 info.isPathToPackageDescription(path)) { 749 info.isPathToPackageDescription(path)) {
743 File packagespec = resourceProvider.getFile(path); 750 File packagespec = resourceProvider.getFile(path);
744 if (packagespec.exists) { 751 if (packagespec.exists) {
745 Packages packages = _readPackagespec(packagespec); 752 Packages packages = _readPackagespec(packagespec);
746 if (packages != null) { 753 if (packages != null) {
(...skipping 403 matching lines...) Expand 10 before | Expand all | Expand 10 after
1150 changeSet.changedSource(source); 1157 changeSet.changedSource(source);
1151 }); 1158 });
1152 callbacks.applyChangesToContext(info.folder, changeSet); 1159 callbacks.applyChangesToContext(info.folder, changeSet);
1153 } 1160 }
1154 break; 1161 break;
1155 } 1162 }
1156 _checkForPackagespecUpdate(path, info, info.folder); 1163 _checkForPackagespecUpdate(path, info, info.folder);
1157 _checkForAnalysisOptionsUpdate(path, info, event.type); 1164 _checkForAnalysisOptionsUpdate(path, info, event.type);
1158 } 1165 }
1159 1166
1160 void _checkForAnalysisOptionsUpdate(
1161 String path, ContextInfo info, ChangeType changeType) {
1162 if (pathContext.basename(path) == ANALYSIS_OPTIONS_FILE) {
1163 var analysisContext = info.context;
1164 if (analysisContext is context.AnalysisContextImpl) {
1165 processOptionsForContext(info, info.folder,
1166 optionsRemoved: changeType == ChangeType.REMOVE);
1167 analysisContext.invalidateCachedResults();
1168 callbacks.applyChangesToContext(info.folder, new ChangeSet());
1169 }
1170 }
1171 }
1172
1173 /** 1167 /**
1174 * Determine whether the given [path], when interpreted relative to the 1168 * Determine whether the given [path], when interpreted relative to the
1175 * context root [root], contains a folder whose name starts with '.'. 1169 * context root [root], contains a folder whose name starts with '.'.
1176 */ 1170 */
1177 bool _isContainedInDotFolder(String root, String path) { 1171 bool _isContainedInDotFolder(String root, String path) {
1178 String relativePath = 1172 String relativePath =
1179 pathContext.relative(pathContext.dirname(path), from: root); 1173 pathContext.relative(pathContext.dirname(path), from: root);
1180 for (String pathComponent in pathContext.split(relativePath)) { 1174 for (String pathComponent in pathContext.split(relativePath)) {
1181 if (pathComponent.startsWith('.') && 1175 if (pathComponent.startsWith('.') &&
1182 pathComponent != '.' && 1176 pathComponent != '.' &&
(...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after
1446 var path = resourceProvider.pathContext.fromUri(uri); 1440 var path = resourceProvider.pathContext.fromUri(uri);
1447 packageMap[name] = <Folder>[resourceProvider.getFolder(path)]; 1441 packageMap[name] = <Folder>[resourceProvider.getFolder(path)];
1448 } 1442 }
1449 }); 1443 });
1450 return <UriResolver>[new SdkExtUriResolver(packageMap)]; 1444 return <UriResolver>[new SdkExtUriResolver(packageMap)];
1451 } else { 1445 } else {
1452 return const <UriResolver>[]; 1446 return const <UriResolver>[];
1453 } 1447 }
1454 } 1448 }
1455 } 1449 }
OLDNEW
« no previous file with comments | « no previous file | pkg/analysis_server/lib/src/plugin/server_plugin.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698