| Index: pkg/analysis_server/lib/src/services/refactoring/move_file.dart
|
| diff --git a/pkg/analysis_server/lib/src/services/refactoring/move_file.dart b/pkg/analysis_server/lib/src/services/refactoring/move_file.dart
|
| index cf7c778cb3fd209a78cd4a514e901816311dc684..178e7c44026500bc74674954a545581ee9885d2a 100644
|
| --- a/pkg/analysis_server/lib/src/services/refactoring/move_file.dart
|
| +++ b/pkg/analysis_server/lib/src/services/refactoring/move_file.dart
|
| @@ -22,6 +22,7 @@ import 'package:path/path.dart' as pathos;
|
| */
|
| class MoveFileRefactoringImpl extends RefactoringImpl implements
|
| MoveFileRefactoring {
|
| + final pathos.Context pathContext;
|
| final SearchEngine searchEngine;
|
| final AnalysisContext context;
|
| final Source source;
|
| @@ -34,7 +35,8 @@ class MoveFileRefactoringImpl extends RefactoringImpl implements
|
| String oldLibraryDir;
|
| String newLibraryDir;
|
|
|
| - MoveFileRefactoringImpl(this.searchEngine, this.context, this.source) {
|
| + MoveFileRefactoringImpl(this.pathContext, this.searchEngine, this.context,
|
| + this.source) {
|
| oldFile = source.fullName;
|
| }
|
|
|
| @@ -64,8 +66,8 @@ class MoveFileRefactoringImpl extends RefactoringImpl implements
|
| // if a defining unit, update outgoing references
|
| library = unitElement.library;
|
| if (library.definingCompilationUnit == unitElement) {
|
| - oldLibraryDir = pathos.dirname(oldFile);
|
| - newLibraryDir = pathos.dirname(newFile);
|
| + oldLibraryDir = pathContext.dirname(oldFile);
|
| + newLibraryDir = pathContext.dirname(newFile);
|
| _updateUriReferences(library.imports);
|
| _updateUriReferences(library.exports);
|
| _updateUriReferences(library.parts);
|
| @@ -91,7 +93,7 @@ class MoveFileRefactoringImpl extends RefactoringImpl implements
|
| * Computes the URI to use to reference [newFile] from [reference].
|
| */
|
| String _computeNewUri(SourceReference reference) {
|
| - String refDir = pathos.dirname(reference.file);
|
| + String refDir = pathContext.dirname(reference.file);
|
| // try to keep package: URI
|
| if (_isPackageReference(reference)) {
|
| Source newSource = new NonExistingSource(newFile, UriKind.FILE_URI);
|
| @@ -101,7 +103,13 @@ class MoveFileRefactoringImpl extends RefactoringImpl implements
|
| }
|
| }
|
| // if no package: URI, prepare relative
|
| - return pathos.relative(newFile, from: refDir);
|
| + return _getRelativeUri(newFile, refDir);
|
| + }
|
| +
|
| + String _getRelativeUri(String path, String from) {
|
| + String uri = pathContext.relative(path, from: from);
|
| + List<String> parts = pathContext.split(uri);
|
| + return pathos.posix.joinAll(parts);
|
| }
|
|
|
| bool _isPackageReference(SourceReference reference) {
|
| @@ -111,12 +119,32 @@ class MoveFileRefactoringImpl extends RefactoringImpl implements
|
| return content.startsWith('package:', offset);
|
| }
|
|
|
| + /**
|
| + * Checks if the given [path] represents a relative URI.
|
| + *
|
| + * The following URI's are not relative:
|
| + * `/absolute/path/file.dart`
|
| + * `dart:math`
|
| + */
|
| + bool _isRelativeUri(String path) {
|
| + // absolute URI
|
| + if (Uri.parse(path).isAbsolute) {
|
| + return false;
|
| + }
|
| + // absolute path
|
| + if (pathContext.isAbsolute(path)) {
|
| + return false;
|
| + }
|
| + // OK
|
| + return true;
|
| + }
|
| +
|
| void _updateUriReference(UriReferencedElement element) {
|
| if (!element.isSynthetic) {
|
| String elementUri = element.uri;
|
| if (_isRelativeUri(elementUri)) {
|
| - String elementPath = pathos.join(oldLibraryDir, elementUri);
|
| - String newUri = pathos.relative(elementPath, from: newLibraryDir);
|
| + String elementPath = pathContext.join(oldLibraryDir, elementUri);
|
| + String newUri = _getRelativeUri(elementPath, newLibraryDir);
|
| int uriOffset = element.uriOffset;
|
| int uriLength = element.uriEnd - uriOffset;
|
| change.addElementEdit(
|
| @@ -131,24 +159,4 @@ class MoveFileRefactoringImpl extends RefactoringImpl implements
|
| _updateUriReference(element);
|
| }
|
| }
|
| -
|
| - /**
|
| - * Checks if the given [path] represents a relative URI.
|
| - *
|
| - * The following URI's are not relative:
|
| - * `/absolute/path/file.dart`
|
| - * `dart:math`
|
| - */
|
| - static bool _isRelativeUri(String path) {
|
| - // absolute path
|
| - if (pathos.isAbsolute(path)) {
|
| - return false;
|
| - }
|
| - // absolute URI
|
| - if (Uri.parse(path).isAbsolute) {
|
| - return false;
|
| - }
|
| - // OK
|
| - return true;
|
| - }
|
| }
|
|
|