| Index: editor/tools/plugins/com.google.dart.tools.debug.core/src/com/google/dart/tools/debug/core/source/UriToFileResolver.java
|
| ===================================================================
|
| --- editor/tools/plugins/com.google.dart.tools.debug.core/src/com/google/dart/tools/debug/core/source/UriToFileResolver.java (revision 41867)
|
| +++ editor/tools/plugins/com.google.dart.tools.debug.core/src/com/google/dart/tools/debug/core/source/UriToFileResolver.java (working copy)
|
| @@ -25,6 +25,7 @@
|
| import com.google.dart.tools.core.internal.util.ResourceUtil;
|
| import com.google.dart.tools.debug.core.DartLaunchConfigWrapper;
|
|
|
| +import org.eclipse.core.resources.IContainer;
|
| import org.eclipse.core.resources.IFile;
|
| import org.eclipse.core.resources.IResource;
|
| import org.eclipse.debug.core.ILaunch;
|
| @@ -41,8 +42,7 @@
|
| * A helper for converting URIs to files paths and vice versa.
|
| */
|
| public class UriToFileResolver {
|
| - private final IResource resource;
|
| - private final String resourcePath;
|
| + private IContainer container;
|
| private final Map<String, String> urlToFileCache = Maps.newHashMap();
|
| private final Map<String, String> fileToUriCache = Maps.newHashMap();
|
|
|
| @@ -51,8 +51,20 @@
|
| public UriToFileResolver(ILaunch launch) {
|
| ILaunchConfiguration launchConfiguration = launch.getLaunchConfiguration();
|
| DartLaunchConfigWrapper wrapper = new DartLaunchConfigWrapper(launchConfiguration);
|
| - resource = wrapper.getApplicationResource();
|
| - resourcePath = resource != null ? resource.getLocation().toOSString() : null;
|
| +
|
| + container = wrapper.getSourceDirectory();
|
| + if (container == null) {
|
| + IResource resource = wrapper.getApplicationResource();
|
| +
|
| + if (resource instanceof IContainer) {
|
| + container = resource.getParent();
|
| + } else if (resource != null) {
|
| + container = resource.getParent();
|
| + }
|
| + }
|
| +
|
| + String resourcePath = container != null ? container.getLocation().toOSString() : null;
|
| +
|
| // create an execution context
|
| if (DartCoreDebug.ENABLE_ANALYSIS_SERVER && resourcePath != null) {
|
| DartCore.getAnalysisServer().execution_createContext(
|
| @@ -75,7 +87,7 @@
|
| }
|
|
|
| public String getFileForUri(String url) {
|
| - if (resource == null) {
|
| + if (container == null) {
|
| return null;
|
| }
|
| String file = urlToFileCache.get(url);
|
| @@ -87,7 +99,7 @@
|
| }
|
|
|
| public String getUriForPath(String file) {
|
| - if (resource == null) {
|
| + if (container == null) {
|
| return null;
|
| }
|
| String uri = fileToUriCache.get(file);
|
| @@ -147,11 +159,10 @@
|
| filePath = uri.getPath();
|
| }
|
|
|
| - // dart:
|
| if (filePath == null) {
|
| return null;
|
| } else {
|
| - return filePath;
|
| + return returnAbsoluteOrRelative(filePath);
|
| }
|
| } catch (URISyntaxException e) {
|
| return null;
|
| @@ -227,7 +238,7 @@
|
| return uri;
|
| }
|
| }
|
| - return DartCore.getProjectManager().resolvePathToPackage(resource, file);
|
| + return DartCore.getProjectManager().resolvePathToPackage(container, file);
|
| }
|
| return null;
|
| }
|
| @@ -253,7 +264,7 @@
|
| }
|
| } else {
|
| ProjectManager projectManager = DartCore.getProjectManager();
|
| - IFileInfo fileInfo = projectManager.resolveUriToFileInfo(resource, url);
|
| + IFileInfo fileInfo = projectManager.resolveUriToFileInfo(container, url);
|
| if (fileInfo != null) {
|
| File file = fileInfo.getFile();
|
| File absoluteFile = file.getAbsoluteFile();
|
| @@ -264,12 +275,37 @@
|
| }
|
|
|
| private String resolveRelativePath(String url) {
|
| - if (resource != null) {
|
| - IResource file = resource.getParent().findMember(url);
|
| + if (container != null) {
|
| + IResource file = container.getParent().findMember(url);
|
| if (file != null) {
|
| return file.getLocation().toOSString();
|
| }
|
| }
|
| return null;
|
| }
|
| +
|
| + private String returnAbsoluteOrRelative(String path) {
|
| + // If path exists, return that.
|
| + File file = new File(path);
|
| + if (file.exists()) {
|
| + return path;
|
| + }
|
| +
|
| + // Try and return a path relative to the resource.
|
| + if (container != null) {
|
| + int index = path.indexOf('/');
|
| +
|
| + while (index != -1) {
|
| + String subPath = path.substring(index + 1);
|
| + IResource resource = container.findMember(subPath);
|
| + if (resource != null) {
|
| + return resource.getLocation().toFile().getAbsolutePath();
|
| + }
|
| + index = path.indexOf('/', index + 1);
|
| + }
|
| + }
|
| +
|
| + // Else, return the original path.
|
| + return path;
|
| + }
|
| }
|
|
|