11import 'dart:io' ;
2- import 'dart:isolate' ;
32
43import 'package:analyzer/dart/analysis/analysis_context.dart' ;
4+ import 'package:analyzer/dart/analysis/uri_converter.dart' ;
55import 'package:path/path.dart' as p;
66import 'package:yaml/yaml.dart' ;
77
@@ -109,28 +109,43 @@ class AnalysisOptions {
109109 }
110110}
111111
112- Future < AnalysisOptions ?> analysisOptionsFromContext (
112+ AnalysisOptions ? analysisOptionsFromContext (
113113 AnalysisContext context,
114- ) async {
114+ ) {
115115 final optionsFilePath = context.contextRoot.optionsFile? .path;
116116
117117 return optionsFilePath == null
118118 ? null
119- : analysisOptionsFromFile (File (optionsFilePath));
119+ : analysisOptionsFromFile (File (optionsFilePath), context );
120120}
121121
122- Future <AnalysisOptions > analysisOptionsFromFilePath (String path) {
122+ AnalysisOptions analysisOptionsFromFilePath (
123+ String path,
124+ AnalysisContext context,
125+ ) {
123126 final analysisOptionsFile = File (p.absolute (path, _analysisOptionsFileName));
124127
125- return analysisOptionsFromFile (analysisOptionsFile);
128+ return analysisOptionsFromFile (analysisOptionsFile, context );
126129}
127130
128- Future <AnalysisOptions > analysisOptionsFromFile (File ? options) async =>
131+ AnalysisOptions analysisOptionsFromFile (
132+ File ? options,
133+ AnalysisContext context,
134+ ) =>
129135 options != null && options.existsSync ()
130- ? AnalysisOptions (options.path, await _loadConfigFromYamlFile (options))
136+ ? AnalysisOptions (
137+ options.path,
138+ _loadConfigFromYamlFile (
139+ options,
140+ context.currentSession.uriConverter,
141+ ),
142+ )
131143 : const AnalysisOptions (null , {});
132144
133- Future <Map <String , Object >> _loadConfigFromYamlFile (File options) async {
145+ Map <String , Object > _loadConfigFromYamlFile (
146+ File options,
147+ UriConverter converter,
148+ ) {
134149 try {
135150 final node = options.existsSync ()
136151 ? loadYamlNode (options.readAsStringSync ())
@@ -141,12 +156,15 @@ Future<Map<String, Object>> _loadConfigFromYamlFile(File options) async {
141156
142157 final includeNode = optionsNode['include' ];
143158 if (includeNode is String ) {
144- final resolvedUri = includeNode.startsWith ('package:' )
145- ? await Isolate .resolvePackageUri (Uri .parse (includeNode))
146- : Uri .file (p.absolute (p.dirname (options.path), includeNode));
159+ final packageImport = includeNode.startsWith ('package:' );
160+
161+ final resolvedUri = packageImport
162+ ? converter.uriToPath (Uri .parse (includeNode))
163+ : p.absolute (p.dirname (options.path), includeNode);
164+
147165 if (resolvedUri != null ) {
148166 final resolvedYamlMap =
149- await _loadConfigFromYamlFile (File . fromUri (resolvedUri));
167+ _loadConfigFromYamlFile (File (resolvedUri), converter );
150168 optionsNode =
151169 mergeMaps (defaults: resolvedYamlMap, overrides: optionsNode);
152170 }
0 commit comments