Index: dart/compiler/java/com/google/dart/compiler/UrlSource.java |
diff --git a/dart/compiler/java/com/google/dart/compiler/UrlSource.java b/dart/compiler/java/com/google/dart/compiler/UrlSource.java |
deleted file mode 100644 |
index 890df68bc09df91d1fc2f2301f8197cb2c352bf8..0000000000000000000000000000000000000000 |
--- a/dart/compiler/java/com/google/dart/compiler/UrlSource.java |
+++ /dev/null |
@@ -1,205 +0,0 @@ |
-// Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
-// for details. All rights reserved. Use of this source code is governed by a |
-// BSD-style license that can be found in the LICENSE file. |
- |
-package com.google.dart.compiler; |
- |
-import java.io.File; |
-import java.io.FileInputStream; |
-import java.io.FileNotFoundException; |
-import java.io.IOException; |
-import java.io.InputStream; |
-import java.io.InputStreamReader; |
-import java.io.Reader; |
-import java.net.JarURLConnection; |
-import java.net.URI; |
-import java.net.URL; |
-import java.nio.charset.Charset; |
-import java.util.jar.JarEntry; |
- |
-/** |
- * A {@link Source} backed by a URL (or optionally by a file). |
- */ |
-public abstract class UrlSource implements Source { |
- |
- private final static String FILE_PROTOCOL = "file"; |
- private final static String JAR_PROTOCOL = "jar"; |
- private final static URI CURRENT_DIR = new File(".").toURI().normalize(); |
- private final static Charset UTF8 = Charset.forName("UTF8"); |
- private final static URI BASE_URI = CURRENT_DIR; |
- |
- private final URI uri; |
- private final URI absoluteUri; |
- private final URI translatedUri; |
- private final boolean shouldCareAboutLastModified; |
- private volatile boolean exists = false; |
- private volatile long lastModified = -1; |
- private volatile boolean propertiesInitialized = false; |
- |
- // generally, one or the other of these will be non-null after properties are initialized |
- private volatile File sourceFile = null; |
- private volatile JarURLConnection jarConn = null; |
- |
- protected final PackageLibraryManager packageLibraryManager; |
- |
- protected UrlSource(URI uri) { |
- this(uri,null); |
- } |
- |
- protected UrlSource(URI uri, PackageLibraryManager slm) { |
- URI expanded = slm != null ? slm.expandRelativeDartUri(uri) : uri; |
- if (expanded == null) { |
- // import("dart:typo") case |
- expanded = uri; |
- } |
- this.uri = BASE_URI.relativize(expanded.normalize()); |
- this.absoluteUri = BASE_URI.resolve(expanded); |
- this.packageLibraryManager = slm; |
- if (PackageLibraryManager.isDartUri(this.uri) || PackageLibraryManager.isPackageUri(this.uri)) { |
- assert slm != null; |
- this.shouldCareAboutLastModified = false; |
- this.translatedUri = slm.resolveDartUri(this.absoluteUri); |
- } else { |
- this.shouldCareAboutLastModified = true; |
- this.translatedUri = this.absoluteUri; |
- } |
- } |
- |
- protected UrlSource(File file) { |
- URI uri = file.toURI().normalize(); |
- if (!file.exists()) { |
- // TODO(jgw): This is a bit ugly, but some of the test infrastructure depends upon |
- // non-existant relative files being looked up as classpath resources. This was |
- // previously embedded in DartSourceFile.getSourceReader(). |
- URL url = getClass().getClassLoader().getResource(file.getPath()); |
- if (url != null) { |
- uri = URI.create(url.toString()); |
- } |
- } |
- |
- this.uri = BASE_URI.relativize(uri); |
- this.translatedUri = this.absoluteUri = BASE_URI.resolve(uri); |
- this.packageLibraryManager = null; |
- this.shouldCareAboutLastModified = true; |
- } |
- |
- @Override |
- public boolean exists() { |
- initProperties(); |
- return exists; |
- } |
- |
- @Override |
- public long getLastModified() { |
- initProperties(); |
- return lastModified; |
- } |
- |
- @Override |
- public Reader getSourceReader() throws IOException { |
- initProperties(); |
- if (sourceFile != null) { |
- return new InputStreamReader(new FileInputStream(sourceFile), UTF8); |
- } else if (jarConn != null) { |
- return new InputStreamReader(jarConn.getInputStream(), UTF8); |
- } |
- // fall back case |
- if (translatedUri != null) { |
- InputStream stream = translatedUri.toURL().openStream(); |
- if (stream != null) { |
- return new InputStreamReader(stream, UTF8); |
- } |
- } |
- throw new FileNotFoundException(getName()); |
- } |
- |
- @Override |
- public String getUniqueIdentifier() { |
- return absoluteUri.toString(); |
- } |
- |
- /** |
- * Get the translated URI for this source. |
- * |
- * @return the translated URI |
- */ |
- public URI getTranslatedUri() { |
- return translatedUri; |
- } |
- |
- @Override |
- public URI getUri() { |
- return absoluteUri; |
- } |
- |
- private void initProperties() { |
- synchronized (this) { |
- if (!propertiesInitialized) { |
- try { |
- initPropertiesEx(); |
- } catch (Throwable e) { |
- } finally { |
- propertiesInitialized = true; |
- } |
- } |
- } |
- } |
- |
- /** |
- * Implementation of {@link #initProperties()} which can throw exceptions. |
- */ |
- private void initPropertiesEx() throws Exception { |
- URI resolvedUri = BASE_URI.resolve(translatedUri); |
- String scheme = resolvedUri.getScheme(); |
- if (scheme == null || FILE_PROTOCOL.equals(scheme)) { |
- File file = new File(resolvedUri); |
- lastModified = file.lastModified(); |
- exists = file.exists(); |
- sourceFile = file; |
- } else { |
- URL url = translatedUri.toURL(); |
- if (JAR_PROTOCOL.equals(url.getProtocol())) { |
- getJarEntryProperties(url); |
- } else { |
- /* |
- * TODO(jbrosenberg): Flesh out the support for other |
- * protocols, like http, etc. Note, calling |
- * URLConnection.getLastModified() can be dangerous, some |
- * URLConnection sub-classes don't have a way to close a |
- * connection opened by this call. Return 0 for now. |
- */ |
- lastModified = 0; |
- // Default this to true for now. |
- exists = true; |
- } |
- } |
- } |
- |
- private void getJarEntryProperties(URL url) { |
- try { |
- jarConn = (JarURLConnection) url.openConnection(); |
- // useCaches is usually set to true by default, but make sure here |
- jarConn.setUseCaches(true); |
- // See if our entry exists |
- JarEntry jarEntry = jarConn.getJarEntry(); |
- if (jarEntry != null) { |
- exists = true; |
- if (!shouldCareAboutLastModified) { |
- lastModified = 0; |
- return; |
- } |
- // TODO(jbrosenberg): Note the time field for a jarEntry can be |
- // unreliable, and is not always required in a jar file. Consider using |
- // the timestamp on the jar file itself. |
- lastModified = jarEntry.getTime(); |
- } |
- if (!exists) { |
- lastModified = -1; |
- return; |
- } |
- } catch (IOException e) { |
- exists = false; |
- lastModified = -1; |
- } |
- } |
-} |