| 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 767875ba42fafd915ecd96970444a459b825f228..aa34cf96f7e30e336bf06dde429e721ca1055a99 100644 | 
| --- a/pkg/analysis_server/lib/src/context_manager.dart | 
| +++ b/pkg/analysis_server/lib/src/context_manager.dart | 
| @@ -29,6 +29,7 @@ import 'package:analyzer/src/generated/source.dart'; | 
| import 'package:analyzer/src/generated/source_io.dart'; | 
| import 'package:analyzer/src/task/options.dart'; | 
| import 'package:analyzer/src/util/absolute_path.dart'; | 
| +import 'package:analyzer/src/util/yaml.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; | 
| @@ -500,15 +501,28 @@ class ContextManagerImpl implements ContextManager { | 
| } | 
| }); | 
|  | 
| -    // In case options files are removed, revert to default options. | 
| +    // In case options files are removed, revert to defaults. | 
| if (optionsRemoved) { | 
| +      // Start with defaults. | 
| info.context.analysisOptions = new AnalysisOptionsImpl(); | 
| + | 
| +      // Apply inherited options. | 
| +      YamlMap embeddedOptions = _getEmbeddedOptions(info.context); | 
| +      if (embeddedOptions != null) { | 
| +        configureContextOptions(info.context, embeddedOptions); | 
| +      } | 
| return; | 
| } | 
|  | 
| +    // Check for embedded options. | 
| +    YamlMap embeddedOptions = _getEmbeddedOptions(info.context); | 
| +    if (embeddedOptions != null) { | 
| +      options = new Merger().merge(embeddedOptions, options); | 
| +    } | 
| + | 
| // Analysis options are processed 'in-line'. | 
| var analyzer = options[AnalyzerOptions.analyzer]; | 
| -    if (analyzer is! YamlMap) { | 
| +    if (analyzer is! Map) { | 
| // No options for analyzer. | 
| return; | 
| } | 
| @@ -1008,6 +1022,20 @@ class ContextManagerImpl implements ContextManager { | 
| return packageSpec; | 
| } | 
|  | 
| +  /// Get analysis options associated with an `_embedder.yaml`. If there is | 
| +  /// more than one `_embedder.yaml` associated with the given context, `null` | 
| +  /// is returned. | 
| +  YamlMap _getEmbeddedOptions(AnalysisContext context) { | 
| +    if (context is InternalAnalysisContext) { | 
| +      EmbedderYamlLocator locator = context.embedderYamlLocator; | 
| +      Iterable<YamlMap> maps = locator.embedderYamls.values; | 
| +      if (maps.length == 1) { | 
| +        return maps.first; | 
| +      } | 
| +    } | 
| +    return null; | 
| +  } | 
| + | 
| /** | 
| * Return the [ContextInfo] for the "innermost" context whose associated | 
| * folder is or contains the given path.  ("innermost" refers to the nesting | 
| @@ -1454,6 +1482,11 @@ class PackagesFileDisposition extends FolderDisposition { | 
| @override | 
| final Packages packages; | 
|  | 
| +  PackagesFileDisposition(this.packages) {} | 
| + | 
| +  @override | 
| +  String get packageRoot => null; | 
| + | 
| Map<String, List<Folder>> buildPackageMap(ResourceProvider resourceProvider) { | 
| Map<String, List<Folder>> packageMap = <String, List<Folder>>{}; | 
| if (packages == null) { | 
| @@ -1468,18 +1501,12 @@ class PackagesFileDisposition extends FolderDisposition { | 
| return packageMap; | 
| } | 
|  | 
| -  PackagesFileDisposition(this.packages) {} | 
| - | 
| -  @override | 
| -  String get packageRoot => null; | 
| - | 
| @override | 
| Iterable<UriResolver> createPackageUriResolvers( | 
| ResourceProvider resourceProvider) { | 
| if (packages != null) { | 
| // Construct package map for the SdkExtUriResolver. | 
| -      Map<String, List<Folder>> packageMap = | 
| -          buildPackageMap(resourceProvider); | 
| +      Map<String, List<Folder>> packageMap = buildPackageMap(resourceProvider); | 
| return <UriResolver>[new SdkExtUriResolver(packageMap)]; | 
| } else { | 
| return const <UriResolver>[]; | 
|  |