Don't read files in _isPackageReference() during MoveFileRefactoringImpl.
We regularly get FileSystemException(s) like: at _PhysicalFile.readAsStringSync (physical_file_system.dart:184) at _OverlayFile.readAsStringSync (overlay_file_system.dart:206) at FileSource.contentsFromFile (source_resource.dart:68) at FileSource.contents (source_resource.dart:55) at MoveFileRefactoringImpl._isPackageReference (move_file.dart:183) So, instead we could use already recorded source content from which the element model was built. Alternatively we could record different kinds of references into the index, e.g. IS_REFERENCED_BY_PACKAGE_URI or IS_REFERENCED_BY. Change-Id: Ic4aa839f706f37c9df2504f866dfca7c7581c347 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/212860 Reviewed-by: Brian Wilkerson <brianwilkerson@google.com> Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
This commit is contained in:
committed by
commit-bot@chromium.org
parent
61ed30ac75
commit
a900531934
@@ -8,8 +8,10 @@ import 'package:analysis_server/src/services/refactoring/refactoring.dart';
|
||||
import 'package:analysis_server/src/services/refactoring/refactoring_internal.dart';
|
||||
import 'package:analyzer/dart/analysis/results.dart';
|
||||
import 'package:analyzer/dart/ast/ast.dart';
|
||||
import 'package:analyzer/dart/element/element.dart';
|
||||
import 'package:analyzer/file_system/file_system.dart';
|
||||
import 'package:analyzer/src/dart/analysis/driver.dart';
|
||||
import 'package:analyzer/src/dart/element/element.dart';
|
||||
import 'package:analyzer/src/generated/source.dart';
|
||||
import 'package:analyzer_plugin/utilities/change_builder/change_builder_core.dart';
|
||||
import 'package:analyzer_plugin/utilities/range_factory.dart';
|
||||
@@ -177,8 +179,11 @@ class MoveFileRefactoringImpl extends RefactoringImpl
|
||||
}
|
||||
|
||||
bool _isPackageReference(SourceReference reference) {
|
||||
var source = reference.element.source!;
|
||||
var quotedImportUri = source.contents.data.substring(reference.range.offset,
|
||||
var unitSourceContent = reference.element.unitSourceContent;
|
||||
if (unitSourceContent == null) {
|
||||
return false;
|
||||
}
|
||||
var quotedImportUri = unitSourceContent.substring(reference.range.offset,
|
||||
reference.range.offset + reference.range.length);
|
||||
return packagePrefixedStringPattern.hasMatch(quotedImportUri);
|
||||
}
|
||||
@@ -215,3 +220,10 @@ class MoveFileRefactoringImpl extends RefactoringImpl
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
extension on Element {
|
||||
String? get unitSourceContent {
|
||||
var unitElement = thisOrAncestorOfType<CompilationUnitElementImpl>();
|
||||
return unitElement?.sourceContent;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user