| Index: dart/compiler/java/com/google/dart/compiler/DefaultDartArtifactProvider.java
|
| diff --git a/dart/compiler/java/com/google/dart/compiler/DefaultDartArtifactProvider.java b/dart/compiler/java/com/google/dart/compiler/DefaultDartArtifactProvider.java
|
| deleted file mode 100644
|
| index 5874051127d9372977c1f8faac9b7d7cb97849ad..0000000000000000000000000000000000000000
|
| --- a/dart/compiler/java/com/google/dart/compiler/DefaultDartArtifactProvider.java
|
| +++ /dev/null
|
| @@ -1,235 +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.BufferedReader;
|
| -import java.io.BufferedWriter;
|
| -import java.io.File;
|
| -import java.io.FileNotFoundException;
|
| -import java.io.FileReader;
|
| -import java.io.FileWriter;
|
| -import java.io.IOException;
|
| -import java.io.Reader;
|
| -import java.io.Writer;
|
| -import java.net.URI;
|
| -import java.net.URISyntaxException;
|
| -
|
| -/**
|
| - * A default implementation of {@link DartArtifactProvider} specifying
|
| - * generated files be placed in the same directory as source files.
|
| - */
|
| -public class DefaultDartArtifactProvider extends DartArtifactProvider {
|
| -
|
| - private final File outputDirectory;
|
| -
|
| - public DefaultDartArtifactProvider() {
|
| - this(new File("out"));
|
| - }
|
| -
|
| - public DefaultDartArtifactProvider(File outputDirectory) {
|
| - this.outputDirectory = outputDirectory;
|
| - }
|
| -
|
| - @Override
|
| - public Reader getArtifactReader(Source source, String part, String extension)
|
| - throws IOException {
|
| - if (PackageLibraryManager.isDartUri(source.getUri())) {
|
| - DartSource bundledSource = getBundledArtifact(source, source, part, extension);
|
| - if (bundledSource != null) {
|
| - Reader reader = null;
|
| - try {
|
| - reader = bundledSource.getSourceReader();
|
| - } catch (FileNotFoundException e) {
|
| - /* thrown if file doesn't exist, which is fine */
|
| - }
|
| - if (reader != null) {
|
| - return new BufferedReader(reader);
|
| - }
|
| - }
|
| - }
|
| - File file = getArtifactFile(source, part, extension);
|
| - if (!file.exists()) {
|
| - return null;
|
| - }
|
| - return new BufferedReader(new FileReader(file));
|
| - }
|
| -
|
| - @Override
|
| - public URI getArtifactUri(Source source, String part, String extension) {
|
| - try {
|
| - return new URI("file", getArtifactFile(source, part, extension).getPath(), null);
|
| - } catch (URISyntaxException e) {
|
| - throw new IllegalArgumentException(e);
|
| - }
|
| - }
|
| -
|
| - @Override
|
| - public Writer getArtifactWriter(Source source, String part, String extension) throws IOException {
|
| - return new BufferedWriter(new FileWriter(makeDirectories(getArtifactFile(source, part,
|
| - extension))));
|
| - }
|
| -
|
| - @Override
|
| - public boolean isOutOfDate(Source source, Source base, String extension) {
|
| - if (PackageLibraryManager.isDartUri(base.getUri())) {
|
| - Source bundledSource = getBundledArtifact(source, base, "", extension);
|
| - if (bundledSource != null && bundledSource.exists()) {
|
| - // Note: Artifacts bundled with sources are always up to date
|
| - return false;
|
| - }
|
| - }
|
| - File artifactFile = getArtifactFile(base, "", extension);
|
| - return !artifactFile.exists() || artifactFile.lastModified() < source.getLastModified();
|
| - }
|
| -
|
| - // TODO(jbrosenberg): remove 'source' argument from this method, it's not used
|
| - protected DartSource getBundledArtifact(Source source, Source base, String part, String extension) {
|
| - LibrarySource library;
|
| - URI relativeUri;
|
| - if (base instanceof LibrarySource) {
|
| - library = (LibrarySource) base;
|
| - relativeUri = library.getUri().resolve(".").normalize().relativize(base.getUri());
|
| - } else if (base instanceof DartSource){
|
| - library = ((DartSource) base).getLibrary();
|
| - String name = base.getName();
|
| - URI nameUri = URI.create(name).normalize();
|
| - relativeUri = library.getUri().resolve(".").normalize().relativize(nameUri);
|
| - } else {
|
| - throw new AssertionError(base.getClass().getName());
|
| - }
|
| -
|
| - DartSource bundledSource;
|
| - if (!relativeUri.isAbsolute()) {
|
| - bundledSource = library.getSourceFor(fullname(relativeUri.getPath(), part, extension));
|
| - } else {
|
| - bundledSource = null;
|
| - }
|
| - return bundledSource;
|
| - }
|
| -
|
| - /**
|
| - * Answer the artifact file associated with the specified source. Only one
|
| - * artifact may be associated with the given extension.
|
| - *
|
| - * @param source the source file (not <code>null</code>)
|
| - * @param part a component of the source file to get a reader for (may be empty).
|
| - * @param extension the file extension for this artifact (not
|
| - * <code>null</code>, not empty)
|
| - * @return the artifact file (not <code>null</code>)
|
| - */
|
| - protected File getArtifactFile(Source source, String part, String extension) {
|
| - String name = source.getName();
|
| - name = URI.create(name).normalize().toString();
|
| - name = normalizeArtifactName(name);
|
| - File file = new File(outputDirectory, fullname(name, part, extension));
|
| - return file;
|
| - }
|
| -
|
| - /*
|
| - * Removes extraneous punctuation and file path syntax.
|
| - */
|
| - private String normalizeArtifactName(String name) {
|
| - /**
|
| - * For efficiency, String operations are replaced with a single pass over
|
| - * the character array data.
|
| - *
|
| - * Note: This is a refactor of a previous version which used repeated calls
|
| - * to String.replace(), which turns out to be unnecessarily expensive. This
|
| - * particular method has been identified as being called a large number of
|
| - * times, thus the need for the micro-optimization here.
|
| - *
|
| - * This is the original logic being implemented here:
|
| - *
|
| - * <code>
|
| - * name = name.replace("//", File.separator);
|
| - * name = name.replace(":", "");
|
| - * name = name.replace("!", "");
|
| - * name = name.replace("..", "_");
|
| - * </code>
|
| - *
|
| - * Please update the above if the logic being implemented ever changes.
|
| - *
|
| - * TODO(jbrosenberg): Figure out a better way such that this normalization
|
| - * is no longer needed in the first place. Source objects could be built
|
| - * from pre-normalized prefixes, etc. Or if it can be called less often,
|
| - * then use pre-compiled Patterns and Matchers instead.
|
| - */
|
| - boolean lastCharWasSlash = false;
|
| - boolean lastCharWasPeriod = false;
|
| - boolean madeChanges = false;
|
| - int nameLen = name.length();
|
| - char[] newName = new char[nameLen];
|
| - int idx = 0;
|
| - for (char ch : name.toCharArray()) {
|
| - if (lastCharWasPeriod && ch != '.') {
|
| - // didn't get a second period, so append the one we did get
|
| - newName[idx++] = '.';
|
| - lastCharWasPeriod = false;
|
| - } else if (lastCharWasSlash && ch != '/') {
|
| - // didn't get a second slash, so append the one we did get
|
| - newName[idx++] = '/';
|
| - lastCharWasSlash = false;
|
| - }
|
| -
|
| - switch (ch) {
|
| - case ':':
|
| - case '!':
|
| - // replace ':'s and '!'s with empty string
|
| - madeChanges = true;
|
| - break;
|
| - case '/':
|
| - if (lastCharWasSlash) {
|
| - // got a second slash, replace with File.separatorChar
|
| - madeChanges = true;
|
| - newName[idx++] = File.separatorChar;
|
| - lastCharWasSlash = false;
|
| - } else {
|
| - lastCharWasSlash = true;
|
| - }
|
| - break;
|
| - case '.':
|
| - if (lastCharWasPeriod) {
|
| - // got a second period, replace with a '_'
|
| - madeChanges = true;
|
| - newName[idx++] = ('_');
|
| - lastCharWasPeriod = false;
|
| - } else {
|
| - lastCharWasPeriod = true;
|
| - }
|
| - break;
|
| - default:
|
| - newName[idx++] = ch;
|
| - lastCharWasSlash = false;
|
| - lastCharWasPeriod = false;
|
| - }
|
| - }
|
| - if (lastCharWasPeriod) {
|
| - // didn't get a final second period, so append the one we did get
|
| - newName[idx++] = '.';
|
| - } else if (lastCharWasSlash) {
|
| - // didn't get a final second slash, so append the one we did get
|
| - newName[idx++] = '/';
|
| - }
|
| -
|
| - if (madeChanges) {
|
| - name = new String(newName, 0, idx);
|
| - }
|
| -
|
| - return name;
|
| - }
|
| -
|
| - private File makeDirectories(File file) {
|
| - file.getParentFile().mkdirs();
|
| - return file;
|
| - }
|
| -
|
| - private String fullname(String name, String part, String extension) {
|
| - if (part.isEmpty()) {
|
| - return name + "." + extension;
|
| - } else {
|
| - return name + "$" + part + "." + extension;
|
| - }
|
| - }
|
| -}
|
|
|