@@ -12,31 +12,21 @@ import 'package:analyzer/dart/analysis/features.dart';
12
12
import 'package:analyzer/dart/analysis/results.dart' ;
13
13
import 'package:analyzer/dart/ast/ast.dart' ;
14
14
import 'package:analyzer/dart/element/element.dart' ;
15
- import 'package:analyzer/dart/sdk/build_sdk_summary.dart' ;
16
15
import 'package:analyzer/error/error.dart' ;
17
- import 'package:analyzer/file_system/physical_file_system.dart' ;
18
16
// ignore: implementation_imports
19
17
import 'package:analyzer/src/clients/build_resolvers/build_resolvers.dart' ;
20
18
import 'package:async/async.dart' ;
21
19
import 'package:build/build.dart' ;
22
20
import 'package:build/experiments.dart' ;
23
21
import 'package:collection/collection.dart' show IterableExtension;
24
- import 'package:logging/logging.dart' ;
25
22
import 'package:package_config/package_config.dart' ;
26
23
import 'package:path/path.dart' as p;
27
24
import 'package:pool/pool.dart' ;
28
25
import 'package:yaml/yaml.dart' ;
29
26
30
27
import 'analysis_driver.dart' ;
31
28
import 'build_asset_uri_resolver.dart' ;
32
- import 'human_readable_duration.dart' ;
33
-
34
- final _logger = Logger ('build_resolvers' );
35
-
36
- Future <String > _packagePath (String package) async {
37
- var libRoot = await Isolate .resolvePackageUri (Uri .parse ('package:$package /' ));
38
- return p.dirname (p.fromUri (libRoot));
39
- }
29
+ import 'sdk_summary.dart' ;
40
30
41
31
/// Implements [Resolver.libraries] and [Resolver.findLibraryByName] by crawling
42
32
/// down from entrypoints.
@@ -365,7 +355,7 @@ class AnalyzerResolvers implements Resolvers {
365
355
366
356
/// A function that returns the path to the SDK summary when invoked.
367
357
///
368
- /// Defaults to [_defaultSdkSummaryGenerator ] .
358
+ /// Defaults to [defaultSdkSummaryGenerator ] .
369
359
final Future <String > Function () _sdkSummaryGenerator;
370
360
371
361
// Lazy, all access must be preceded by a call to `_ensureInitialized`.
@@ -400,7 +390,7 @@ class AnalyzerResolvers implements Resolvers {
400
390
..contextFeatures =
401
391
_featureSet (enableExperiments: enabledExperiments)),
402
392
_sdkSummaryGenerator =
403
- sdkSummaryGenerator ?? _defaultSdkSummaryGenerator ;
393
+ sdkSummaryGenerator ?? defaultSdkSummaryGenerator ;
404
394
405
395
/// Create a Resolvers backed by an `AnalysisContext` using options
406
396
/// [_analysisOptions] .
@@ -430,89 +420,6 @@ class AnalyzerResolvers implements Resolvers {
430
420
}
431
421
}
432
422
433
- /// Lazily creates a summary of the users SDK and caches it under
434
- /// `.dart_tool/build_resolvers` .
435
- ///
436
- /// This is only intended for use in typical dart packages, which must
437
- /// have an already existing `.dart_tool` directory (this is how we
438
- /// validate we are running under a typical dart package and not a custom
439
- /// environment).
440
- Future <String > _defaultSdkSummaryGenerator () async {
441
- var dartToolPath = '.dart_tool' ;
442
- if (! await Directory (dartToolPath).exists ()) {
443
- throw StateError (
444
- 'The default analyzer resolver can only be used when the current '
445
- 'working directory is a standard pub package.' );
446
- }
447
-
448
- var cacheDir = p.join (dartToolPath, 'build_resolvers' );
449
- var summaryPath = p.join (cacheDir, 'sdk.sum' );
450
- var depsFile = File ('$summaryPath .deps' );
451
- var summaryFile = File (summaryPath);
452
-
453
- var currentDeps = {
454
- 'sdk' : Platform .version,
455
- for (var package in _packageDepsToCheck)
456
- package: await _packagePath (package),
457
- };
458
-
459
- // Invalidate existing summary/version/analyzer files if present.
460
- if (await depsFile.exists ()) {
461
- if (! await _checkDeps (depsFile, currentDeps)) {
462
- await depsFile.delete ();
463
- if (await summaryFile.exists ()) await summaryFile.delete ();
464
- }
465
- } else if (await summaryFile.exists ()) {
466
- // Fallback for cases where we could not do a proper version check.
467
- await summaryFile.delete ();
468
- }
469
-
470
- // Generate the summary and version files if necessary.
471
- if (! await summaryFile.exists ()) {
472
- var watch = Stopwatch ()..start ();
473
- _logger.info ('Generating SDK summary...' );
474
- await summaryFile.create (recursive: true );
475
- final embedderYamlPath =
476
- isFlutter ? p.join (_dartUiPath, '_embedder.yaml' ) : null ;
477
- await summaryFile.writeAsBytes (
478
- await buildSdkSummary (
479
- sdkPath: _runningDartSdkPath,
480
- resourceProvider: PhysicalResourceProvider .INSTANCE ,
481
- embedderYamlPath: embedderYamlPath,
482
- ),
483
- );
484
-
485
- await _createDepsFile (depsFile, currentDeps);
486
- watch.stop ();
487
- _logger.info ('Generating SDK summary completed, took '
488
- '${humanReadable (watch .elapsed )}\n ' );
489
- }
490
-
491
- return p.absolute (summaryPath);
492
- }
493
-
494
- final _packageDepsToCheck = ['analyzer' , 'build_resolvers' ];
495
-
496
- Future <bool > _checkDeps (
497
- File versionsFile, Map <String , Object ?> currentDeps) async {
498
- var previous =
499
- jsonDecode (await versionsFile.readAsString ()) as Map <String , Object ?>;
500
-
501
- if (previous.keys.length != currentDeps.keys.length) return false ;
502
-
503
- for (var entry in previous.entries) {
504
- if (entry.value != currentDeps[entry.key]) return false ;
505
- }
506
-
507
- return true ;
508
- }
509
-
510
- Future <void > _createDepsFile (
511
- File depsFile, Map <String , Object ?> currentDeps) async {
512
- await depsFile.create (recursive: true );
513
- await depsFile.writeAsString (jsonEncode (currentDeps));
514
- }
515
-
516
423
/// Checks that the current analyzer version supports the current language
517
424
/// version.
518
425
void _warnOnLanguageVersionMismatch () async {
@@ -528,7 +435,7 @@ void _warnOnLanguageVersionMismatch() async {
528
435
var json = jsonDecode (content.toString ());
529
436
var latestAnalyzer = json['latest' ]['version' ];
530
437
var analyzerPubspecPath =
531
- p.join (await _packagePath ('analyzer' ), 'pubspec.yaml' );
438
+ p.join (await packagePath ('analyzer' ), 'pubspec.yaml' );
532
439
var currentAnalyzer =
533
440
loadYaml (await File (analyzerPubspecPath).readAsString ())['version' ];
534
441
@@ -580,11 +487,6 @@ https://pub.dev/packages/analyzer.
580
487
}
581
488
}
582
489
583
- /// Path where the dart:ui package will be found, if executing via the dart
584
- /// binary provided by the Flutter SDK.
585
- final _dartUiPath =
586
- p.normalize (p.join (_runningDartSdkPath, '..' , 'pkg' , 'sky_engine' , 'lib' ));
587
-
588
490
/// The current feature set based on the current sdk version and enabled
589
491
/// experiments.
590
492
FeatureSet _featureSet ({List <String > enableExperiments = const []}) {
@@ -609,10 +511,3 @@ current version by running `pub deps`.
609
511
return FeatureSet .fromEnableFlags2 (
610
512
sdkLanguageVersion: sdkLanguageVersion, flags: enableExperiments);
611
513
}
612
-
613
- /// Path to the running dart's SDK root.
614
- final _runningDartSdkPath = p.dirname (p.dirname (Platform .resolvedExecutable));
615
-
616
- /// `true` if the currently running dart was provided by the Flutter SDK.
617
- final isFlutter =
618
- Platform .version.contains ('flutter' ) || Directory (_dartUiPath).existsSync ();
0 commit comments