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

Unified Diff: dart/compiler/java/com/google/dart/compiler/DefaultDartArtifactProvider.java

Issue 20722006: Removed compiler/ directory from repository (Closed) Base URL: http://dart.googlecode.com/svn/branches/bleeding_edge
Patch Set: Created 7 years, 5 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/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;
- }
- }
-}

Powered by Google App Engine
This is Rietveld 408576698