Index: dart/compiler/java/com/google/dart/compiler/LibraryDeps.java |
diff --git a/dart/compiler/java/com/google/dart/compiler/LibraryDeps.java b/dart/compiler/java/com/google/dart/compiler/LibraryDeps.java |
deleted file mode 100644 |
index bcdf2e46aca1c26af89ef7adbbf6246b8df24f68..0000000000000000000000000000000000000000 |
--- a/dart/compiler/java/com/google/dart/compiler/LibraryDeps.java |
+++ /dev/null |
@@ -1,313 +0,0 @@ |
-// Copyright (c) 2011, 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 com.google.common.base.Objects; |
-import com.google.common.base.Splitter; |
-import com.google.common.base.Strings; |
-import com.google.common.collect.Iterables; |
-import com.google.common.collect.Maps; |
-import com.google.common.collect.Sets; |
-import com.google.dart.compiler.ast.DartUnit; |
- |
-import java.io.BufferedReader; |
-import java.io.IOException; |
-import java.io.Reader; |
-import java.io.Writer; |
-import java.net.URI; |
-import java.util.List; |
-import java.util.Map; |
-import java.util.Map.Entry; |
-import java.util.Set; |
- |
-/** |
- * Represents a library's dependencies artifact. |
- */ |
-public class LibraryDeps { |
- private static final String VERSION = "v00001"; |
- |
- /** |
- * Each dependency record contains the library in which it was found, name of the unit in this |
- * library and last-modified timestamp. Any change in the timestamp of the target dependency will |
- * force a recompile of the associated compilation unit. |
- */ |
- public static class Dependency { |
- private final URI libUri; |
- private final String unitName; |
- private final long lastModified; |
- |
- public Dependency(URI libUri, String unitName, long lastModified) { |
- this.libUri = libUri; |
- this.unitName = unitName; |
- this.lastModified = lastModified; |
- } |
- |
- @Override |
- public boolean equals(Object obj) { |
- if (obj instanceof Dependency) { |
- Dependency dep = (Dependency) obj; |
- return Objects.equal(libUri, dep.libUri) && Objects.equal(unitName, dep.unitName); |
- } |
- return false; |
- } |
- |
- @Override |
- public int hashCode() { |
- return Objects.hashCode(libUri, unitName); |
- } |
- |
- public URI getLibUri() { |
- return libUri; |
- } |
- |
- public String getUnitName() { |
- return unitName; |
- } |
- |
- public long getLastModified() { |
- return lastModified; |
- } |
- } |
- |
- public static class Source { |
- private final Set<Dependency> deps = Sets.newHashSet(); |
- private final Set<String> topSymbols = Sets.newHashSet(); |
- private final Set<String> allSymbols = Sets.newHashSet(); |
- private final Set<String> holes = Sets.newHashSet(); |
- private boolean shouldRecompileOnAnyTopLevelChange = false; |
- |
- /** |
- * @return the {@link Set} of {@link Dependency}s. |
- */ |
- public Set<Dependency> getDeps() { |
- return deps; |
- } |
- |
- /** |
- * @return the names of top-level elements, such as methods and classes. |
- */ |
- public Set<String> getTopSymbols() { |
- return topSymbols; |
- } |
- |
- /** |
- * @return the names of all elements in unit, such as names of local variables, fields, etc. |
- */ |
- public Set<String> getAllSymbols() { |
- return allSymbols; |
- } |
- |
- /** |
- * @return the names of functions, which are invoked without qualifier. So, declaration or |
- * removing function with such name on top-level should cause recompiling. |
- */ |
- public Set<String> getHoles() { |
- return holes; |
- } |
- |
- /** |
- * @return <code>true</code> if this unit should be recompiled on any change in the set of |
- * top-level symbols. Typically unit has compilation errors, which potentially may be |
- * fixed, so we should recompile this unit. |
- */ |
- public boolean shouldRecompileOnAnyTopLevelChange() { |
- return shouldRecompileOnAnyTopLevelChange; |
- } |
- |
- /** |
- * Adds new {@link Dependency}. |
- */ |
- public void addDep(Dependency dep) { |
- deps.add(dep); |
- } |
- |
- /** |
- * Adds symbol to the {@link Set} of top symbols. |
- */ |
- public void addTopSymbol(String symbol) { |
- if (!Strings.isNullOrEmpty(symbol)) { |
- topSymbols.add(symbol); |
- } |
- } |
- |
- /** |
- * Adds symbol to the {@link Set} of all symbols. |
- */ |
- public void addAllSymbol(String symbol) { |
- allSymbols.add(symbol); |
- } |
- |
- /** |
- * Adds new hole for {@link #getHoles()}. |
- */ |
- public void addHole(String hole) { |
- holes.add(hole); |
- } |
- } |
- |
- public static LibraryDeps fromReader(Reader reader) { |
- try { |
- return fromReaderEx(reader); |
- } catch (Throwable e) { |
- return null; |
- } |
- } |
- |
- private static LibraryDeps fromReaderEx(Reader reader) throws Exception { |
- LibraryDeps deps = new LibraryDeps(); |
- BufferedReader buf = new BufferedReader(reader); |
- // Check version. |
- { |
- String line = buf.readLine(); |
- if (!Objects.equal(line, VERSION)) { |
- return deps; |
- } |
- } |
- // Read units dependencies. |
- String relPath; |
- while (null != (relPath = buf.readLine())) { |
- Source source = new Source(); |
- // Read flags. |
- source.shouldRecompileOnAnyTopLevelChange = Boolean.parseBoolean(buf.readLine()); |
- // Read top symbols. |
- { |
- String line = buf.readLine(); |
- Iterable<String> topSymbols = Splitter.on(' ').omitEmptyStrings().split(line); |
- Iterables.addAll(source.topSymbols, topSymbols); |
- } |
- // Read all symbols. |
- { |
- String line = buf.readLine(); |
- Iterable<String> allSymbols = Splitter.on(' ').omitEmptyStrings().split(line); |
- Iterables.addAll(source.allSymbols, allSymbols); |
- } |
- // Read holes. |
- { |
- String line = buf.readLine(); |
- Iterable<String> holes = Splitter.on(' ').omitEmptyStrings().split(line); |
- Iterables.addAll(source.holes, holes); |
- } |
- // Read dependencies. |
- while (true) { |
- String line = buf.readLine(); |
- // Blank line: next unit. |
- if (line.length() == 0) { |
- break; |
- } |
- // Parse line. |
- String[] parts = line.split(" "); |
- source.deps.add(new Dependency(new URI(parts[0]), parts[1], Long.parseLong(parts[2]))); |
- } |
- // Remember dependencies for current unit. |
- deps.sources.put(relPath, source); |
- } |
- return deps; |
- } |
- |
- private final Map<String, Source> sources = Maps.newHashMap(); |
- |
- public LibraryDeps() { |
- } |
- |
- /** |
- * @return the relative paths of all units with remembered dependencies. |
- */ |
- public Set<String> getUnitPaths() { |
- return sources.keySet(); |
- } |
- |
- /** |
- * @return all {@link Source} descriptions for all units in this library. |
- */ |
- public Iterable<Source> getSources() { |
- return sources.values(); |
- } |
- |
- /** |
- * @return the {@link Source} description of the unit with given path. |
- */ |
- public Source getSource(String relPath) { |
- return sources.get(relPath); |
- } |
- |
- /** |
- * Remembers {@link Dependency}s of the unit with given path. |
- */ |
- public void putSource(String relPath, Source source) { |
- sources.put(relPath, source); |
- } |
- |
- /** |
- * Update the library dependencies to reflect this unit's classes. |
- */ |
- public void update(DartCompilerMainContext context, DartUnit unit) { |
- Source source = new Source(); |
- DartSource unitSource = (DartSource) unit.getSourceInfo().getSource(); |
- String relPath = unitSource.getRelativePath(); |
- putSource(relPath, source); |
- // Remember dependencies. |
- LibraryDepsVisitor.exec(unit, source); |
- // Fill Source with symbols. |
- for (String name : unit.getDeclarationNames()) { |
- source.addAllSymbol(name); |
- } |
- for (String name : unit.getTopDeclarationNames()) { |
- source.addTopSymbol(name); |
- } |
- // Analyze errors and see if any of them should force recompilation. |
- List<DartCompilationError> sourceErrors = context.getSourceErrors(unitSource); |
- for (DartCompilationError error : sourceErrors) { |
- if (error.getErrorCode().needsRecompilation()) { |
- source.shouldRecompileOnAnyTopLevelChange = true; |
- break; |
- } |
- } |
- } |
- |
- public void write(Writer writer) throws IOException { |
- // Write version. |
- writer.write(VERSION); |
- writer.write('\n'); |
- // Write entries. |
- for (Entry<String, Source> entry : sources.entrySet()) { |
- String relPath = entry.getKey(); |
- Source source = entry.getValue(); |
- // Unit name. |
- writer.write(relPath); |
- writer.write('\n'); |
- // Flags. |
- writer.write(Boolean.toString(source.shouldRecompileOnAnyTopLevelChange)); |
- writer.write('\n'); |
- // Write top symbols. |
- for (String symbol : source.topSymbols) { |
- writer.write(symbol); |
- writer.write(' '); |
- } |
- writer.write('\n'); |
- // Write all symbols. |
- for (String symbol : source.allSymbols) { |
- writer.write(symbol); |
- writer.write(' '); |
- } |
- writer.write('\n'); |
- // Write holes. |
- for (String hole : source.holes) { |
- writer.write(hole); |
- writer.write(' '); |
- } |
- writer.write('\n'); |
- // Write dependencies. |
- for (Dependency dep : source.deps) { |
- writer.write(dep.libUri.toString()); |
- writer.write(' '); |
- writer.write(dep.unitName); |
- writer.write(' '); |
- writer.write(Long.toString(dep.lastModified)); |
- writer.write('\n'); |
- } |
- // Empty line after each unit. |
- writer.write('\n'); |
- } |
- } |
-} |