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

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

Issue 8631010: Move bundled libraries out of plugins (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge/dart/
Patch Set: '' Created 9 years, 1 month 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: editor/tools/plugins/com.google.dart.tools.core/src/com/google/dart/tools/core/internal/model/SystemLibraryManagerProvider.java
===================================================================
--- editor/tools/plugins/com.google.dart.tools.core/src/com/google/dart/tools/core/internal/model/SystemLibraryManagerProvider.java (revision 1856)
+++ editor/tools/plugins/com.google.dart.tools.core/src/com/google/dart/tools/core/internal/model/SystemLibraryManagerProvider.java (working copy)
@@ -15,31 +15,185 @@
import com.google.dart.compiler.SystemLibrary;
import com.google.dart.compiler.SystemLibraryManager;
+import com.google.dart.tools.core.DartCore;
+import com.google.dart.tools.core.DartCoreDebug;
+import org.eclipse.core.runtime.Platform;
+
+import java.io.File;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
/**
* The class <code>SystemLibraryManagerProvider</code> manages the {@link SystemLibraryManager
* system library managers} used by the tools.
*/
public class SystemLibraryManagerProvider {
+
/**
+ * Specialized {@link SystemLibraryManager} for accessing libraries bundled with the editor.
+ */
+ static abstract class EditorLibraryManager extends SystemLibraryManager {
+ private List<SystemLibrary> libraries;
+ private Map<URI, URI> longToShortUriMap;
+
+ /**
+ * Answer a collection of all bundled library URL specs (e.g. "dart:dom").
+ *
+ * @return a collection of specs (not <code>null</code>, contains no <code>null</code>s)
+ */
+ public Collection<String> getAllLibrarySpecs() {
+ Collection<String> result = new ArrayList<String>(libraries.size());
+ for (SystemLibrary lib : libraries) {
+ result.add("dart:" + lib.getShortName());
+ }
+ return result;
+ }
+
+ /**
+ * Scan the directory returned by {@link #getLibrariesDir()} looking for libraries of the form
+ * libraries/<name>/<name>.dart and libraries/<name>/<name>_impl.dart
+ */
+ @Override
+ protected SystemLibrary[] getDefaultLibraries() {
+ File librariesDir = getLibrariesDir();
+ libraries = new ArrayList<SystemLibrary>();
+ longToShortUriMap = new HashMap<URI, URI>();
+ if (librariesDir.isDirectory()) {
+ for (String name : librariesDir.list()) {
+ File dir = new File(librariesDir, name);
+ if (!dir.isDirectory()) {
+ if (DartCoreDebug.DARTLIB) {
+ DartCore.logInformation("Skipping " + dir);
+ }
+ continue;
+ }
+ if (!addLib(name, name, dir)) {
+
+ // Hack for core library because it does not follow the naming convention
+ if ("core".equals(name)) {
+ if (addLib(name, name, dir, "corelib.dart")) {
+ addLib(name, name + "_impl", dir, "corelib_impl.dart");
+ continue;
+ }
+ }
+
+ DartCore.logInformation("Expected " + name + ".dart in " + dir);
+ continue;
+ }
+ if (!addLib(name, name + "_impl", dir)) {
+ continue;
+ }
+ }
+ }
+ return libraries.toArray(new SystemLibrary[libraries.size()]);
+ }
+
+ abstract File getLibrariesDir();
+
+ /**
+ * Answer the original "dart:<libname>" URI for the specified resolved URI or <code>null</code>
+ * if it does not map to a short URI.
+ */
+ URI getShortUri(URI uri) {
+ return longToShortUriMap.get(uri);
+ }
+
+ private boolean addLib(String host, String name, File dir) {
+ return addLib(host, name, dir, name + ".dart");
+ }
+
+ private boolean addLib(String host, String name, File dir, String libFileName)
+ throws AssertionError {
+ File libFile = new File(dir, libFileName);
+ if (!libFile.isFile()) {
+ return false;
+ }
+ if (DartCoreDebug.DARTLIB) {
+ DartCore.logInformation("Found dart:" + name + " in " + dir);
+ }
+ SystemLibrary lib = new SystemLibrary(name, host, libFileName, dir);
+ libraries.add(lib);
+ String libSpec = "dart:" + name;
+ URI libUri;
+ URI expandedUri;
+ try {
+ libUri = new URI(libSpec);
+ expandedUri = new URI("dart://" + host + "/" + libFileName);
+ } catch (URISyntaxException e) {
+ throw new AssertionError(e);
+ }
+ URI resolvedUri = lib.translateUri(expandedUri);
+ longToShortUriMap.put(resolvedUri, libUri);
+ longToShortUriMap.put(expandedUri, libUri);
+ return true;
+ }
+ }
+
+ /**
* The single system library manager currently being managed.
*/
- private static SystemLibraryManager MANAGER;
+ private static EditorLibraryManager MANAGER;
/**
+ * Answer a collection of all bundled library URL specs (e.g. "dart:dom").
+ *
+ * @return a collection of specs (not <code>null</code>, contains no <code>null</code>s)
+ */
+ public static Collection<String> getAllLibrarySpecs() {
+ initManager();
+ return MANAGER.getAllLibrarySpecs();
+ }
+
+ /**
+ * Answer the original "dart:<libname>" URI for the specified resolved URI or <code>null</code> if
+ * it does not map to a short URI.
+ */
+ public static URI getShortUri(URI uri) {
+ initManager();
+ return MANAGER.getShortUri(uri);
+ }
+
+ /**
* Return the single system library manager currently being managed.
*
* @return the single system library manager currently being managed
*/
public static SystemLibraryManager getSystemLibraryManager() {
+ initManager();
+ return MANAGER;
+ }
+
+ /**
+ * Locate the libraries directory
+ */
+ private static File findLibraries() {
+ File installDir = new File(Platform.getInstallLocation().getURL().getFile());
+ File libDir = new File(installDir, "libraries");
+ if (!libDir.exists()) {
+ DartCore.logError("Missing libraries directory: " + libDir);
+ }
+ if (DartCoreDebug.DARTLIB) {
+ DartCore.logInformation("Reading bundled libraries from " + libDir);
+ }
+ return libDir;
+ }
+
+ private static void initManager() {
if (MANAGER == null) {
- MANAGER = new SystemLibraryManager() {
+ MANAGER = new EditorLibraryManager() {
+
@Override
- protected SystemLibrary[] getDefaultLibraries() {
- return BundledSystemLibraryManager.getAllLibraries();
+ File getLibrariesDir() {
+ return findLibraries();
}
+
};
}
- return MANAGER;
}
}

Powered by Google App Engine
This is Rietveld 408576698