Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1049)

Unified Diff: pkg/analysis_server/lib/src/services/refactoring/move_file.dart

Issue 603753002: Issue 21071. Generate posix-style relative URIs. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Tweak for isRelative check Created 6 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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;
- }
}
« no previous file with comments | « pkg/analysis_server/lib/src/edit/edit_domain.dart ('k') | pkg/analysis_server/lib/src/services/refactoring/refactoring.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698