summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormikaelpeltier <mikaelpeltier@google.com>2015-05-28 14:39:03 +0200
committerMikael Peltier <mikaelpeltier@google.com>2015-06-05 09:13:37 +0000
commit59f50017709af1cfa1bcc6d3bd5e409f9436ede2 (patch)
tree10f49ca7a08a17f4f119642ccd65e7fb298e257b
parent921976d63c203e129f74b022a1fc13cddb5f8a3d (diff)
downloadtoolchain_jack-59f50017709af1cfa1bcc6d3bd5e409f9436ede2.zip
toolchain_jack-59f50017709af1cfa1bcc6d3bd5e409f9436ede2.tar.gz
toolchain_jack-59f50017709af1cfa1bcc6d3bd5e409f9436ede2.tar.bz2
Fix bugs when using incremental with --output-jack
- When --output-jack is used, incremental folder contains all dex files and jayces files of imported libraries, thus Jack must remove imported libraries and import only incremental folder when --output-jack is used to avoid type conflict. It seems more performant than using collision policy. - Since ReadWriteZipFS and VFStoVSTWrapper is used incremental support with --output-jack was broken because input jack library has the location of incremental folder and output jack library has the location of the target jack file. Thus comparing location to avoid to copy dex file from a library to the same library does not work. I clean library usages to always used ReadWriteZipFS when it is required and to be able to properly skip dex copy when source and target library are the same library. Bug: 21600202 Change-Id: I0c5e899e12033f608d43cae9baecc1227ea158c9 (cherry picked from commit f524ed6445145988a8a7c4fc6ff5573c3cc882cd)
-rw-r--r--jack/src/com/android/jack/incremental/CommonFilter.java40
-rw-r--r--jack/src/com/android/jack/incremental/IncrementalInputFilter.java42
-rw-r--r--jack/src/com/android/jack/incremental/NoInputFilter.java12
-rw-r--r--jack/tests/com/android/jack/frontend/OrderedInputFilter.java12
-rw-r--r--sched/src/com/android/sched/vfs/ReadWriteZipFS.java2
-rw-r--r--sched/src/com/android/sched/vfs/VFSToVFSWrapper.java2
6 files changed, 37 insertions, 73 deletions
diff --git a/jack/src/com/android/jack/incremental/CommonFilter.java b/jack/src/com/android/jack/incremental/CommonFilter.java
index 381f6e3..ff1c192 100644
--- a/jack/src/com/android/jack/incremental/CommonFilter.java
+++ b/jack/src/com/android/jack/incremental/CommonFilter.java
@@ -52,6 +52,7 @@ import com.android.sched.util.location.FileLocation;
import com.android.sched.util.log.LoggerFactory;
import com.android.sched.vfs.Container;
import com.android.sched.vfs.PrefixedFS;
+import com.android.sched.vfs.ReadWriteZipFS;
import com.android.sched.vfs.ReadZipFS;
import com.android.sched.vfs.VFS;
import com.android.sched.vfs.VPath;
@@ -136,7 +137,27 @@ public abstract class CommonFilter {
@Nonnull
private static final Logger logger = LoggerFactory.getLogger();
+ @Nonnull
+ protected final VFS incrementalVfs;
+
+ @Nonnull
+ private final OutputJackLibrary outputJackLibrary;
+
public CommonFilter() {
+ if (ThreadConfig.get(Options.GENERATE_LIBRARY_FROM_INCREMENTAL_FOLDER).booleanValue()) {
+ VFS dirVFS = ThreadConfig.get(Options.LIBRARY_OUTPUT_DIR);
+ incrementalVfs = ThreadConfig.get(Options.LIBRARY_OUTPUT_ZIP);
+ ((ReadWriteZipFS) incrementalVfs).setWorkVFS(dirVFS);
+ } else {
+ if (ThreadConfig.get(Options.LIBRARY_OUTPUT_CONTAINER_TYPE) == Container.DIR) {
+ incrementalVfs = ThreadConfig.get(Options.LIBRARY_OUTPUT_DIR);
+ } else {
+ incrementalVfs = ThreadConfig.get(Options.LIBRARY_OUTPUT_ZIP);
+ }
+ }
+
+ outputJackLibrary = JackLibraryFactory.getOutputLibrary(incrementalVfs,
+ Jack.getEmitterId(), Jack.getVersion().getVerboseVersion());
}
@Nonnull
@@ -177,21 +198,6 @@ public abstract class CommonFilter {
}
}
- @Nonnull
- protected OutputJackLibrary getOutputJackLibraryFromVfs() {
- VFS vfs;
- Container containerType = ThreadConfig.get(Options.LIBRARY_OUTPUT_CONTAINER_TYPE);
-
- if (containerType == Container.DIR) {
- vfs = ThreadConfig.get(Options.LIBRARY_OUTPUT_DIR);
- } else {
- vfs = ThreadConfig.get(Options.LIBRARY_OUTPUT_ZIP);
- }
-
- return (JackLibraryFactory.getOutputLibrary(vfs, Jack.getEmitterId(), Jack.getVersion()
- .getVerboseVersion()));
- }
-
@SuppressWarnings("unused")
@Nonnull
protected List<InputLibrary> getInputLibrariesFromFiles(
@@ -293,4 +299,8 @@ public abstract class CommonFilter {
}
}
+ @Nonnull
+ public OutputJackLibrary getOutputJackLibrary() {
+ return outputJackLibrary;
+ }
}
diff --git a/jack/src/com/android/jack/incremental/IncrementalInputFilter.java b/jack/src/com/android/jack/incremental/IncrementalInputFilter.java
index 98eb61c..c45e1fa 100644
--- a/jack/src/com/android/jack/incremental/IncrementalInputFilter.java
+++ b/jack/src/com/android/jack/incremental/IncrementalInputFilter.java
@@ -53,8 +53,6 @@ import com.android.sched.util.log.stats.Counter;
import com.android.sched.util.log.stats.CounterImpl;
import com.android.sched.util.log.stats.StatisticId;
import com.android.sched.vfs.InputVFile;
-import com.android.sched.vfs.ReadWriteZipFS;
-import com.android.sched.vfs.VFS;
import com.android.sched.vfs.VPath;
import java.io.File;
@@ -153,11 +151,9 @@ public class IncrementalInputFilter extends CommonFilter implements InputFilter
@Nonnull
private final File incrementalFolder;
- @Nonnull
- private final OutputJackLibrary outputJackLibrary;
-
public IncrementalInputFilter(@Nonnull Options options) {
Config config = ThreadConfig.getConfig();
+
incrementalFolder = new File(config.get(Options.LIBRARY_OUTPUT_DIR).getPath());
this.options = options;
@@ -199,8 +195,6 @@ public class IncrementalInputFilter extends CommonFilter implements InputFilter
session.getLibraryDependencies().addLibrariesOnClasspath(librariesOnClasspathFromCommandLine);
filesToRecompile = getInternalFileNamesToCompile();
- outputJackLibrary = createOutputJackLibrary();
-
if (config.get(INCREMENTAL_LOG).booleanValue()) {
IncrementalLogWriter incLog;
try {
@@ -357,7 +351,7 @@ public class IncrementalInputFilter extends CommonFilter implements InputFilter
@CheckForNull
private InputJackLibrary getIncrementalInternalLibrary() {
try {
- return JackLibraryFactory.getInputLibrary(ThreadConfig.get(Options.LIBRARY_OUTPUT_DIR));
+ return JackLibraryFactory.getInputLibrary(incrementalVfs);
} catch (NotJackLibraryException e) {
// No incremental internal library, it is the first compilation
} catch (LibraryVersionException e) {
@@ -463,33 +457,17 @@ public class IncrementalInputFilter extends CommonFilter implements InputFilter
throw new JackAbortException(e);
}
- inputLibraries.add(0, incrementalInputLibrary);
-
- return inputLibraries;
- }
-
- @Nonnull
- private OutputJackLibrary createOutputJackLibrary() {
-
if (ThreadConfig.get(Options.GENERATE_LIBRARY_FROM_INCREMENTAL_FOLDER).booleanValue()) {
- VFS dirVFS = ThreadConfig.get(Options.LIBRARY_OUTPUT_DIR);
- ReadWriteZipFS zipVFS = (ReadWriteZipFS) ThreadConfig.get(Options.LIBRARY_OUTPUT_ZIP);
- zipVFS.setWorkVFS(dirVFS);
- return JackLibraryFactory.getOutputLibrary(zipVFS, Jack.getEmitterId(),
- Jack.getVersion().getVerboseVersion());
+ // Incremental folder already contains dex files of imported libraries, thus import only
+ // incremental folder.
+ inputLibraries.clear();
+ inputLibraries.add(incrementalInputLibrary);
+ return inputLibraries;
} else {
- if (incrementalInputLibrary == null) {
- return getOutputJackLibraryFromVfs();
- } else {
- return (JackLibraryFactory.getOutputLibrary(ThreadConfig.get(Options.LIBRARY_OUTPUT_DIR),
- Jack.getEmitterId(), Jack.getVersion().getVerboseVersion()));
- }
+ // Incremental folder does not contains dex files, thus add it into imported libraries
+ inputLibraries.add(0, incrementalInputLibrary);
}
- }
- @Override
- @Nonnull
- public OutputJackLibrary getOutputJackLibrary() {
- return outputJackLibrary;
+ return inputLibraries;
}
}
diff --git a/jack/src/com/android/jack/incremental/NoInputFilter.java b/jack/src/com/android/jack/incremental/NoInputFilter.java
index 3813e89..284123e 100644
--- a/jack/src/com/android/jack/incremental/NoInputFilter.java
+++ b/jack/src/com/android/jack/incremental/NoInputFilter.java
@@ -23,7 +23,6 @@ import com.android.jack.analysis.dependency.library.LibraryDependencies;
import com.android.jack.analysis.dependency.type.TypeDependencies;
import com.android.jack.ir.ast.JSession;
import com.android.jack.library.InputLibrary;
-import com.android.jack.library.OutputJackLibrary;
import com.android.sched.util.codec.ImplementationName;
import com.android.sched.util.config.ThreadConfig;
@@ -50,9 +49,6 @@ public class NoInputFilter extends CommonFilter implements InputFilter {
@Nonnull
private final List<? extends InputLibrary> librariesOnClasspathFromCommandLine;
- @Nonnull
- private final OutputJackLibrary outputJackLibrary;
-
public NoInputFilter(@Nonnull Options options) {
this.options = options;
this.fileNamesToCompile = getJavaFileNamesSpecifiedOnCommandLine(options);
@@ -67,8 +63,6 @@ public class NoInputFilter extends CommonFilter implements InputFilter {
LibraryDependencies libraryDependencies = session.getLibraryDependencies();
libraryDependencies.addImportedLibraries(importedLibrariesFromCommandLine);
libraryDependencies.addLibrariesOnClasspath(librariesOnClasspathFromCommandLine);
-
- outputJackLibrary = getOutputJackLibraryFromVfs();
}
@Override
@@ -88,10 +82,4 @@ public class NoInputFilter extends CommonFilter implements InputFilter {
public List<? extends InputLibrary> getImportedLibrary() {
return importedLibrariesFromCommandLine;
}
-
- @Override
- @Nonnull
- public OutputJackLibrary getOutputJackLibrary() {
- return outputJackLibrary;
- }
}
diff --git a/jack/tests/com/android/jack/frontend/OrderedInputFilter.java b/jack/tests/com/android/jack/frontend/OrderedInputFilter.java
index 9b3ee59..51564d4 100644
--- a/jack/tests/com/android/jack/frontend/OrderedInputFilter.java
+++ b/jack/tests/com/android/jack/frontend/OrderedInputFilter.java
@@ -25,7 +25,6 @@ import com.android.jack.incremental.CommonFilter;
import com.android.jack.incremental.InputFilter;
import com.android.jack.ir.ast.JSession;
import com.android.jack.library.InputLibrary;
-import com.android.jack.library.OutputJackLibrary;
import com.android.sched.util.codec.ImplementationName;
import com.android.sched.util.config.Config;
import com.android.sched.util.config.ThreadConfig;
@@ -56,9 +55,6 @@ public class OrderedInputFilter extends CommonFilter implements InputFilter {
@Nonnull
private final List<? extends InputLibrary> librariesOnClasspathFromCommandLine;
- @Nonnull
- private final OutputJackLibrary outputJackLibrary;
-
public OrderedInputFilter(@Nonnull Options options) {
this.options = options;
this.fileNamesToCompile = getJavaFileNamesSpecifiedOnCommandLine(options);
@@ -73,8 +69,6 @@ public class OrderedInputFilter extends CommonFilter implements InputFilter {
LibraryDependencies libraryDependencies = session.getLibraryDependencies();
libraryDependencies.addImportedLibraries(importedLibrariesFromCommandLine);
libraryDependencies.addLibrariesOnClasspath(librariesOnClasspathFromCommandLine);
-
- outputJackLibrary = getOutputJackLibraryFromVfs();
}
@Override
@@ -97,12 +91,6 @@ public class OrderedInputFilter extends CommonFilter implements InputFilter {
@Override
@Nonnull
- public OutputJackLibrary getOutputJackLibrary() {
- return outputJackLibrary;
- }
-
- @Override
- @Nonnull
protected Set<String> getJavaFileNamesSpecifiedOnCommandLine(@Nonnull Options options) {
Config config = options.getConfig();
final String extension = ".java";
diff --git a/sched/src/com/android/sched/vfs/ReadWriteZipFS.java b/sched/src/com/android/sched/vfs/ReadWriteZipFS.java
index 228e7f2..56159c7 100644
--- a/sched/src/com/android/sched/vfs/ReadWriteZipFS.java
+++ b/sched/src/com/android/sched/vfs/ReadWriteZipFS.java
@@ -175,7 +175,7 @@ public class ReadWriteZipFS extends BaseVFS<BaseVDir, BaseVFile> implements VFS
@Override
long getLastModified(@Nonnull BaseVFile file) {
- throw new UnsupportedOperationException();
+ return vfs.getLastModified(file);
}
@Override
diff --git a/sched/src/com/android/sched/vfs/VFSToVFSWrapper.java b/sched/src/com/android/sched/vfs/VFSToVFSWrapper.java
index b0a61f1..b54050d 100644
--- a/sched/src/com/android/sched/vfs/VFSToVFSWrapper.java
+++ b/sched/src/com/android/sched/vfs/VFSToVFSWrapper.java
@@ -226,7 +226,7 @@ public class VFSToVFSWrapper extends BaseVFS<BaseVDir, BaseVFile> implements VFS
@Override
long getLastModified(@Nonnull BaseVFile file) {
- throw new UnsupportedOperationException();
+ return workVFS.getLastModified(file);
}
@Override