| Index: pkg/analysis_server/lib/src/context_manager.dart
|
| diff --git a/pkg/analysis_server/lib/src/context_manager.dart b/pkg/analysis_server/lib/src/context_manager.dart
|
| index d7a903ad387ebc3c20fdd4e92a2bff8346d3df3b..b4f5018d58749075e321e7b215a111f4deff48dc 100644
|
| --- a/pkg/analysis_server/lib/src/context_manager.dart
|
| +++ b/pkg/analysis_server/lib/src/context_manager.dart
|
| @@ -7,7 +7,9 @@ import 'dart:collection';
|
| import 'dart:convert';
|
| import 'dart:core';
|
|
|
| +import 'package:analysis_server/src/plugin/notification_manager.dart';
|
| import 'package:analyzer/context/context_root.dart';
|
| +import 'package:analyzer/error/error.dart';
|
| import 'package:analyzer/file_system/file_system.dart';
|
| import 'package:analyzer/instrumentation/instrumentation.dart';
|
| import 'package:analyzer/plugin/resolver_provider.dart';
|
| @@ -21,6 +23,7 @@ import 'package:analyzer/src/context/builder.dart';
|
| import 'package:analyzer/src/dart/analysis/driver.dart';
|
| import 'package:analyzer/src/dart/sdk/sdk.dart';
|
| import 'package:analyzer/src/generated/engine.dart';
|
| +import 'package:analyzer/src/generated/java_engine.dart';
|
| import 'package:analyzer/src/generated/java_io.dart';
|
| import 'package:analyzer/src/generated/sdk.dart';
|
| import 'package:analyzer/src/generated/source.dart';
|
| @@ -29,6 +32,7 @@ import 'package:analyzer/src/task/options.dart';
|
| import 'package:analyzer/src/util/absolute_path.dart';
|
| import 'package:analyzer/src/util/glob.dart';
|
| import 'package:analyzer/src/util/yaml.dart';
|
| +import 'package:analyzer_plugin/utilities/analyzer_converter.dart';
|
| import 'package:package_config/packages.dart';
|
| import 'package:package_config/packages_file.dart' as pkgfile show parse;
|
| import 'package:package_config/src/packages_impl.dart' show MapPackages;
|
| @@ -357,6 +361,11 @@ abstract class ContextManager {
|
| */
|
| abstract class ContextManagerCallbacks {
|
| /**
|
| + * Return the notification manager associated with the server.
|
| + */
|
| + NotificationManager get notificationManager;
|
| +
|
| + /**
|
| * Create and return a new analysis driver rooted at the given [folder], with
|
| * the given analysis [options].
|
| */
|
| @@ -967,6 +976,26 @@ class ContextManagerImpl implements ContextManager {
|
| }
|
| }
|
|
|
| + /**
|
| + * Use the given analysis [driver] to analyze the content of the analysis
|
| + * options file at the given [path].
|
| + */
|
| + void _analyzeAnalysisOptionsFile(AnalysisDriver driver, String path) {
|
| + String content = driver.fsState.getFileForPath(path).content;
|
| + List<AnalysisError> errors =
|
| + GenerateOptionsErrorsTask.analyzeAnalysisOptions(
|
| + resourceProvider.getFile(path).createSource(),
|
| + content,
|
| + driver.sourceFactory);
|
| + AnalyzerConverter converter = new AnalyzerConverter();
|
| + LineInfo lineInfo = _computeLineInfo(content);
|
| + callbacks.notificationManager.recordAnalysisErrors(
|
| + NotificationManager.serverId,
|
| + path,
|
| + converter.convertAnalysisErrors(errors,
|
| + lineInfo: lineInfo, options: driver.analysisOptions));
|
| + }
|
| +
|
| void _checkForAnalysisOptionsUpdate(
|
| String path, ContextInfo info, ChangeType changeType) {
|
| if (AnalysisEngine.isAnalysisOptionsFileName(path, pathContext)) {
|
| @@ -979,6 +1008,7 @@ class ContextManagerImpl implements ContextManager {
|
| SourceFactory factory = builder.createSourceFactory(contextRoot, options);
|
| driver.configure(analysisOptions: options, sourceFactory: factory);
|
| // TODO(brianwilkerson) Set exclusion patterns.
|
| + _analyzeAnalysisOptionsFile(driver, path);
|
| }
|
| }
|
|
|
| @@ -1095,6 +1125,14 @@ class ContextManagerImpl implements ContextManager {
|
| }
|
|
|
| /**
|
| + * Compute line information for the given [content].
|
| + */
|
| + LineInfo _computeLineInfo(String content) {
|
| + List<int> lineStarts = StringUtilities.computeLineStarts(content);
|
| + return new LineInfo(lineStarts);
|
| + }
|
| +
|
| + /**
|
| * Create an object that can be used to find and read the analysis options
|
| * file for code being analyzed using the given [packages].
|
| */
|
| @@ -1153,6 +1191,9 @@ class ContextManagerImpl implements ContextManager {
|
| }
|
| info.analysisDriver =
|
| callbacks.addAnalysisDriver(folder, contextRoot, options);
|
| + if (optionsFile != null) {
|
| + _analyzeAnalysisOptionsFile(info.analysisDriver, optionsFile.path);
|
| + }
|
| return info;
|
| }
|
|
|
|
|