Index: dart/editor/tools/plugins/com.google.dart.engine/src/com/google/dart/engine/source/ExplicitPackageUriResolver.java |
=================================================================== |
--- dart/editor/tools/plugins/com.google.dart.engine/src/com/google/dart/engine/source/ExplicitPackageUriResolver.java (revision 31563) |
+++ dart/editor/tools/plugins/com.google.dart.engine/src/com/google/dart/engine/source/ExplicitPackageUriResolver.java (working copy) |
@@ -1,11 +1,11 @@ |
/* |
* Copyright (c) 2013, the Dart project authors. |
- * |
+ * |
* Licensed under the Eclipse Public License v1.0 (the "License"); you may not use this file except |
* in compliance with the License. You may obtain a copy of the License at |
- * |
+ * |
* http://www.eclipse.org/legal/epl-v10.html |
- * |
+ * |
* Unless required by applicable law or agreed to in writing, software distributed under the License |
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express |
* or implied. See the License for the specific language governing permissions and limitations under |
@@ -14,6 +14,7 @@ |
package com.google.dart.engine.source; |
+import com.google.common.annotations.VisibleForTesting; |
import com.google.dart.engine.AnalysisEngine; |
import com.google.dart.engine.sdk.DirectoryBasedDartSdk; |
import com.google.dart.engine.utilities.io.ProcessRunner; |
@@ -35,18 +36,18 @@ |
* An explicit package: resolver. This UriResolver shells out to pub, calling it's list-package-dirs |
* command. It parses the resulting json map, which maps symbolic package references to their |
* concrete locations on disk. |
- * |
+ * |
* <pre> |
- * { |
- * "packages": { |
- * "foo": "path/to/foo", |
- * "bar": "path/to/bar" |
- * }, |
- * "input_files": [ |
- * ... |
- * ] |
- * }, |
- * </pre> |
+ *{ |
+ *"packages": { |
+ *"foo": "path/to/foo", |
+ *"bar": "path/to/bar" |
+ *}, |
+ *"input_files": [ |
+ *... |
+ *] |
+ *}, |
+ *</pre> |
*/ |
public class ExplicitPackageUriResolver extends UriResolver { |
/** |
@@ -58,7 +59,7 @@ |
/** |
* Return {@code true} if the given URI is a {@code package} URI. |
- * |
+ * |
* @param uri the URI being tested |
* @return {@code true} if the given URI is a {@code package} URI |
*/ |
@@ -68,14 +69,15 @@ |
private File rootDir; |
private DirectoryBasedDartSdk sdk; |
- private Map<String, List<File>> packageMap; |
+ @VisibleForTesting |
+ protected Map<String, List<File>> packageMap; |
// TODO: For now, this takes a DirectoryBasedDartSdk. We may want to abstract this out into |
// something that can return a package map. |
/** |
* Create a new ExplicitPackageUriResolver. |
- * |
+ * |
* @param sdk the sdk; this is used to locate the pub command to run |
* @param rootDir the directory for which we'll be resolving package information |
*/ |
@@ -149,11 +151,29 @@ |
String fullPackagePath = pkgName + "/" + relPath; |
return new FileBasedSource( // |
- contentCache, |
- new File(rootDir, fullPackagePath.replace('/', File.separatorChar)), |
- UriKind.PACKAGE_URI); |
+ contentCache, new File(rootDir, fullPackagePath.replace('/', File.separatorChar)), UriKind.PACKAGE_URI); |
} |
+ public String resolvePathToPackage(String path) { |
+ if (packageMap == null) { |
+ return null; |
+ } |
+ |
+ for (String key : packageMap.keySet()) { |
+ List<File> files = packageMap.get(key); |
+ for (File file : files) { |
+ try { |
+ if (file.getCanonicalPath().endsWith(path)) { |
+ return key; |
+ } |
+ } catch (IOException e) { |
+ |
+ } |
+ } |
+ } |
+ return null; |
+ } |
+ |
@Override |
public URI restoreAbsolute(Source source) { |
if (packageMap == null) { |
@@ -196,13 +216,11 @@ |
"pub " + PUB_LIST_COMMAND + " failed: exit code " + runner.getExitCode()); |
} |
} catch (IOException ioe) { |
- AnalysisEngine.getInstance().getLogger().logInformation( |
- "error running pub " + PUB_LIST_COMMAND, |
- ioe); |
+ AnalysisEngine.getInstance() |
+ .getLogger().logInformation("error running pub " + PUB_LIST_COMMAND, ioe); |
} catch (JSONException e) { |
- AnalysisEngine.getInstance().getLogger().logError( |
- "malformed json from pub " + PUB_LIST_COMMAND, |
- e); |
+ AnalysisEngine.getInstance() |
+ .getLogger().logError("malformed json from pub " + PUB_LIST_COMMAND, e); |
} |
return new HashMap<String, List<File>>(); |