Tweaks to avoid failling back to PhysicalResourceProvider when not necessary.

Also use PlatformInfo in PhysicalResourceProvider.INSTANCE for consistency.

Change-Id: If9bb4a764f290dfa76aa30b43c52f4cf2692dffa
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/484142
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Reviewed-by: Phil Quitslund <pquitslund@google.com>
Auto-Submit: Jonas Jensen <jonasfj@google.com>
Commit-Queue: Phil Quitslund <pquitslund@google.com>
This commit is contained in:
Jonas Finnemann Jensen
2026-03-11 09:14:12 -07:00
committed by Commit Queue
parent ac38046718
commit bfa47ebf74
6 changed files with 46 additions and 23 deletions
@@ -7,6 +7,7 @@ import 'dart:io' as io;
import 'dart:typed_data';
import 'package:analyzer/file_system/file_system.dart';
import 'package:analyzer/src/util/platform_info.dart';
import 'package:path/path.dart';
import 'package:watcher/watcher.dart';
@@ -20,12 +21,12 @@ const String _serverDir = ".dartServer";
/// ANALYZER_STATE_LOCATION_OVERRIDE environment variable, in which case this
/// method will return the contents of that environment variable.
String? _getStandardStateLocation() {
Map<String, String> env = io.Platform.environment;
Map<String, String> env = platform.environment;
if (env.containsKey('ANALYZER_STATE_LOCATION_OVERRIDE')) {
return env['ANALYZER_STATE_LOCATION_OVERRIDE'];
}
var home = io.Platform.isWindows ? env['LOCALAPPDATA'] : env['HOME'];
var home = platform.isWindows ? env['LOCALAPPDATA'] : env['HOME'];
return home != null && io.FileSystemEntity.isDirectorySync(home)
? join(home, _serverDir)
: null;
@@ -763,7 +763,10 @@ class ContextLocatorImpl {
file_paths.pubspecYaml,
);
if (rootPubspecFile.exists) {
var rootPubspec = Pubspec.parse(rootPubspecFile.readAsStringSync());
var rootPubspec = Pubspec.parse(
rootPubspecFile.readAsStringSync(),
resourceProvider: resourceProvider,
);
var workspace = rootPubspec.workspace;
if (workspace != null) {
for (var entry in workspace) {
@@ -837,7 +840,10 @@ class ContextLocatorImpl {
} else {
var pubspecFile = folder.getChildAssumingFile(file_paths.pubspecYaml);
if (pubspecFile.exists) {
var pubspec = Pubspec.parse(pubspecFile.readAsStringSync());
var pubspec = Pubspec.parse(
pubspecFile.readAsStringSync(),
resourceProvider: resourceProvider,
);
var resolution = pubspec.resolution;
if (resolution != null && resolution.value.text == 'workspace') {
var known = rootWorkspaceSpecification[location.workspace.root] ??=
+16 -15
View File
@@ -4,7 +4,6 @@
import 'package:analyzer/analysis_rule/pubspec.dart';
import 'package:analyzer/file_system/file_system.dart';
import 'package:analyzer/file_system/physical_file_system.dart';
import 'package:analyzer/source/file_source.dart';
import 'package:analyzer/source/source.dart';
import 'package:source_span/source_span.dart';
@@ -13,7 +12,7 @@ import 'package:yaml/yaml.dart';
PubspecEntry? _findEntry(
YamlMap map,
String key,
ResourceProvider? resourceProvider,
ResourceProvider resourceProvider,
) {
PubspecEntry? entry;
map.nodes.forEach((k, v) {
@@ -27,7 +26,7 @@ PubspecEntry? _findEntry(
PubspecDependencyList? _processDependencies(
YamlScalar key,
YamlNode value,
ResourceProvider? resourceProvider,
ResourceProvider resourceProvider,
) {
if (value is! YamlMap) {
return null;
@@ -45,7 +44,7 @@ PubspecDependencyList? _processDependencies(
PubspecEnvironment? _processEnvironment(
YamlScalar key,
YamlNode value,
ResourceProvider? resourceProvider,
ResourceProvider resourceProvider,
) {
if (value is! YamlMap) {
return null;
@@ -61,7 +60,7 @@ PubspecEnvironment? _processEnvironment(
PubspecGitRepo? _processGitRepo(
YamlScalar key,
YamlNode value,
ResourceProvider? resourceProvider,
ResourceProvider resourceProvider,
) {
if (value is YamlScalar) {
var token = PubspecNodeImpl(key, resourceProvider);
@@ -86,7 +85,7 @@ PubspecGitRepo? _processGitRepo(
PubspecHost? _processHost(
YamlScalar key,
YamlNode value,
ResourceProvider? resourceProvider,
ResourceProvider resourceProvider,
) {
if (value is YamlScalar) {
// dependencies:
@@ -115,7 +114,7 @@ PubspecHost? _processHost(
PubspecEntry? _processScalar(
YamlScalar key,
YamlNode value,
ResourceProvider? resourceProvider,
ResourceProvider resourceProvider,
) {
if (value is! YamlScalar) {
return null;
@@ -130,7 +129,7 @@ PubspecEntry? _processScalar(
PubspecNodeList? _processScalarList(
YamlScalar key,
YamlNode value,
ResourceProvider? resourceProvider,
ResourceProvider resourceProvider,
) {
if (value is! YamlList) {
return null;
@@ -147,7 +146,7 @@ abstract class Pubspec {
factory Pubspec.parse(
String pubspec, {
Uri? sourceUrl,
ResourceProvider? resourceProvider,
required ResourceProvider resourceProvider,
}) {
try {
var yaml = loadYamlNode(pubspec, sourceUrl: sourceUrl);
@@ -159,7 +158,7 @@ abstract class Pubspec {
factory Pubspec.parseYaml(
YamlNode yaml, {
ResourceProvider? resourceProvider,
required ResourceProvider resourceProvider,
}) {
return _Pubspec.parse(yaml, resourceProvider: resourceProvider);
}
@@ -206,10 +205,9 @@ class PubspecNodeImpl implements PubspecNode {
final ResourceProvider _resourceProvider;
PubspecNodeImpl(YamlScalar node, ResourceProvider? resourceProvider)
PubspecNodeImpl(YamlScalar node, this._resourceProvider)
: text = node.value?.toString(),
span = node.span,
_resourceProvider = resourceProvider ?? PhysicalResourceProvider.INSTANCE;
span = node.span;
/// The [Source] information of the pubspec file in which this node is located.
Source get source {
@@ -269,7 +267,10 @@ class _Pubspec implements Pubspec {
@override
final PubspecDependencyList? dependencyOverrides;
factory _Pubspec.parse(YamlNode yaml, {ResourceProvider? resourceProvider}) {
factory _Pubspec.parse(
YamlNode yaml, {
required ResourceProvider resourceProvider,
}) {
if (yaml is! YamlMap) {
return _Pubspec._();
}
@@ -449,7 +450,7 @@ class _PubspecDependency extends PubspecDependency {
factory _PubspecDependency(
YamlScalar key,
YamlNode value,
ResourceProvider? resourceProvider,
ResourceProvider resourceProvider,
) {
var name = PubspecNodeImpl(key, resourceProvider);
PubspecEntry? path;
+8 -2
View File
@@ -216,7 +216,10 @@ class PackageConfigWorkspace extends SimpleWorkspace {
.getFolder(root)
.getChildAssumingFile(file_paths.pubspecYaml);
if (pubspecFile.exists) {
var pubspec = Pubspec.parse(pubspecFile.readAsStringSync());
var pubspec = Pubspec.parse(
pubspecFile.readAsStringSync(),
resourceProvider: provider,
);
if (pubspec.workspace != null) {
_isPubWorkspace = true;
}
@@ -448,7 +451,10 @@ class PubPackage extends WorkspacePackageImpl {
File pubspecFile,
) {
var pubspecContent = pubspecFile.readAsStringSync();
var pubspec = Pubspec.parse(pubspecContent);
var pubspec = Pubspec.parse(
pubspecContent,
resourceProvider: pubspecFile.provider,
);
var packageName = pubspec.name?.value.text;
return PubPackage._(
root,
+6 -1
View File
@@ -3,6 +3,8 @@
// BSD-style license that can be found in the LICENSE file.
import 'package:analyzer/analysis_rule/pubspec.dart';
import 'package:analyzer/file_system/physical_file_system.dart'
show PhysicalResourceProvider;
import 'package:analyzer/src/lint/pub.dart';
import 'package:source_span/source_span.dart';
import 'package:test/test.dart';
@@ -59,7 +61,10 @@ repository: https://github.com/dart-lang/linter
issue_tracker: https://github.com/dart-lang/linter/issues
""";
Pubspec ps = Pubspec.parse(src);
Pubspec ps = Pubspec.parse(
src,
resourceProvider: PhysicalResourceProvider.INSTANCE,
);
group('pubspec', () {
group('basic', () {
+5 -1
View File
@@ -86,7 +86,11 @@ class TestLinter implements DiagnosticListener {
void _lintPubspecSource({required String contents, String? sourcePath}) {
var sourceUrl = sourcePath == null ? null : path.toUri(sourcePath);
var spec = Pubspec.parse(contents, sourceUrl: sourceUrl);
var spec = Pubspec.parse(
contents,
sourceUrl: sourceUrl,
resourceProvider: _resourceProvider,
);
for (var rule in _rules) {
var visitor = rule.pubspecVisitor;