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

Unified Diff: dart/editor/tools/plugins/com.google.dart.tools.core/src/com/google/dart/tools/core/internal/analysis/model/ProjectImpl.java

Issue 126303002: Version 1.1.0-dev.5.3 (Closed) Base URL: http://dart.googlecode.com/svn/trunk/
Patch Set: Created 6 years, 11 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: dart/editor/tools/plugins/com.google.dart.tools.core/src/com/google/dart/tools/core/internal/analysis/model/ProjectImpl.java
===================================================================
--- dart/editor/tools/plugins/com.google.dart.tools.core/src/com/google/dart/tools/core/internal/analysis/model/ProjectImpl.java (revision 31563)
+++ dart/editor/tools/plugins/com.google.dart.tools.core/src/com/google/dart/tools/core/internal/analysis/model/ProjectImpl.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
@@ -68,7 +68,7 @@
/**
* Represents an Eclipse project that has a Dart nature.
- *
+ *
* @coverage dart.tools.core.model
*/
public class ProjectImpl extends ContextManagerImpl implements Project {
@@ -90,13 +90,14 @@
* Answer the package roots for the specified project with the given options. May return an empty
* array if no package roots are specified either at the project level or in the command line
* options.
- *
+ *
* @param core the instance of DartCore used to access project preferences
* @param options the command line options (not {@code null})
* @param container the container for which package roots are to be returned
* @return the package roots (not {@code null}, contains no {@code null}s)
*/
- public static File[] getPackageRoots(DartCore core, CmdLineOptions options, IContainer container) {
+ public static File[] getPackageRoots(
+ DartCore core, CmdLineOptions options, IContainer container) {
if (container instanceof IProject) {
IEclipsePreferences prefs = core.getProjectPreferences((IProject) container);
String setting = prefs.get(DartCore.PROJECT_PREF_PACKAGE_ROOT, "");
@@ -126,7 +127,7 @@
/**
* The project resource location on disk or {@code null} if it has not yet been initialized.
- *
+ *
* @see #getResourceLocation()
*/
private IPath projectResourceLocation;
@@ -161,8 +162,13 @@
private final Index index;
/**
+ * The default package resolver used for the project
+ */
+ private UriResolver defaultPackageResolver;
+
+ /**
* Construct a new instance representing a Dart project
- *
+ *
* @param resource the Eclipse project associated with this Dart project (not {@code null})
* @param sdk the Dart SDK to use when initializing contexts (not {@code null})
*/
@@ -172,7 +178,7 @@
/**
* Construct a new instance representing a Dart project
- *
+ *
* @param resource the Eclipse project associated with this Dart project (not {@code null})
* @param sdk the Dart SDK to use when initializing contexts (not {@code null})
* @param index the index to be updated when contexts are discarded (not {@code null})
@@ -369,7 +375,12 @@
// Create and cache a new pub folder
DartSdk sdk = getSdk();
- PubFolderImpl pubFolder = new PubFolderImpl(container, createContext(container, sdk), sdk);
+ UriResolver pkgResolver = getPackageUriResolver(container, sdk, true);
+ PubFolderImpl pubFolder = new PubFolderImpl(
+ container,
+ createContext(container, sdk),
+ sdk,
+ pkgResolver);
pubFolders.put(container.getFullPath(), pubFolder);
// If this is the project, then adjust the context source factory
@@ -382,7 +393,8 @@
}
// Merge any overlapping pub folders
- for (Iterator<Entry<IPath, PubFolder>> iter = pubFolders.entrySet().iterator(); iter.hasNext();) {
+ for (Iterator<Entry<IPath, PubFolder>> iter = pubFolders.entrySet().iterator();
+ iter.hasNext();) {
Entry<IPath, PubFolder> entry = iter.next();
PubFolder parent = getParentPubFolder(entry.getKey());
if (parent != null) {
@@ -425,6 +437,20 @@
}
@Override
+ public String resolvePathToPackage(String path) {
+
+ PubFolder folder = getPubFolder(new Path(path));
+ if (folder != null) {
+ return folder.resolvePathToPackage(path);
+ } else {
+ if (defaultPackageResolver instanceof ExplicitPackageUriResolver) {
+ return ((ExplicitPackageUriResolver) defaultPackageResolver).resolvePathToPackage(path);
+ }
+ }
+ return null;
+ }
+
+ @Override
public IFileInfo resolveUriToFileInfo(IResource relativeTo, String uri) {
AnalysisContext context = getContext(relativeTo);
@@ -476,7 +502,7 @@
* Answer the {@link AnalysisContext} for the specified container, creating one if necessary. Must
* synchronize against {@link #pubFolders} before calling this method and either call
* {@link #initialize()} or check that {@link #isInitialized()} returns {@code true}.
- *
+ *
* @param container the container with sources to be analyzed (not {@code null})
* @param sdk the Dart SDK to use when initializing the context (not {@code null})
* @return the context (not {@code null})
@@ -501,7 +527,7 @@
* Create pub folders for any pubspec files found within the specified container. Must synchronize
* against {@link #pubFolders} before calling this method and either call {@link #initialize()} or
* check that {@link #isInitialized()} returns {@code true}.
- *
+ *
* @param container the container (not {@code null})
*/
private void createPubFolders(IContainer container) {
@@ -514,7 +540,10 @@
// Pub folders do not nest, so don't create a folder if a parent folder already exists
if (getParentPubFolder(path) == null) {
DartSdk sdk = getSdk();
- pubFolders.put(path, new PubFolderImpl(container, createContext(container, sdk), sdk));
+ UriResolver pkgResolver = getPackageUriResolver(container, sdk, true);
+ pubFolders.put(
+ path,
+ new PubFolderImpl(container, createContext(container, sdk), sdk, pkgResolver));
}
}
});
@@ -539,7 +568,7 @@
* Answer all the {@link AnalysisContext} for this project. Must synchronize against
* {@link #pubFolders} before calling this method and either call {@link #initialize()} or check
* that {@link #isInitialized()} returns {@code true}.
- *
+ *
* @return all the analysis contexts in the project
*/
private AnalysisContext[] getAnalysisContexts() {
@@ -554,7 +583,7 @@
/**
* Find the most appropriate package resolver for the given container, based on presence of
* pubspec, package roots etc.
- *
+ *
* @return UriResolver used to resolve package: uris.
*/
private UriResolver getPackageUriResolver(IContainer container, DartSdk sdk, boolean hasPubspec) {
@@ -586,7 +615,7 @@
* Find the {@link PubFolder} defined for an ancestor. Must synchronize against
* {@link #pubFolders} before calling this method and either call {@link #initialize()} or check
* that {@link #isInitialized()} returns {@code true}.
- *
+ *
* @param path the resource's full path
* @return the containing pub folder or {@code null} if none
*/
@@ -598,7 +627,7 @@
* Answer the {@link PubFolder} for the specified resource path. Must synchronize against
* {@link #pubFolders} before calling this method and either call {@link #initialize()} or check
* that {@link #isInitialized()} returns {@code true}.
- *
+ *
* @param path the resource full path (not {@code null})
* @return the folder or {@code null} if none is found
*/
@@ -629,15 +658,15 @@
* Initialize the context for analyzing sources in the specified directory. Must synchronize
* against {@link #pubFolders} before calling this method and either call {@link #initialize()} or
* check that {@link #isInitialized()} returns {@code true}.
- *
+ *
* @param context the context to be initialized (not {@code null})
* @param container the container with sources to be analyzed
* @param sdk the Dart SDK to use when initializing the context (not {@code null})
* @param hasPubspec {@code true} if the container has a pubspec file
* @return the context (not {@code null})
*/
- private AnalysisContext initContext(AnalysisContext context, IContainer container, DartSdk sdk,
- UriResolver pkgResolver) {
+ private AnalysisContext initContext(
+ AnalysisContext context, IContainer container, DartSdk sdk, UriResolver pkgResolver) {
DartUriResolver dartResolver = new DartUriResolver(sdk);
FileUriResolver fileResolver = new FileUriResolver();
@@ -672,11 +701,12 @@
return;
}
boolean hasPubspec = projectResource.getFile(PUBSPEC_FILE_NAME).exists();
+ defaultPackageResolver = getPackageUriResolver(projectResource, getSdk(), hasPubspec);
defaultContext = initContext(
factory.createContext(),
projectResource,
getSdk(),
- getPackageUriResolver(projectResource, getSdk(), hasPubspec));
+ defaultPackageResolver);
defaultResourceMap = new SimpleResourceMapImpl(projectResource, defaultContext);
createPubFolders(projectResource);
}
@@ -684,7 +714,7 @@
/**
* Answer true if {@link #defaultContext} and {@link #pubFolders} have been initialized. Must
* synchronize against {@link #pubFolders} before calling this method.
- *
+ *
* @return {@code true} if initialized, else {@code false}
*/
private boolean isInitialized() {

Powered by Google App Engine
This is Rietveld 408576698