summaryrefslogtreecommitdiffstats
path: root/jack/src/com
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 /jack/src/com
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)
Diffstat (limited to 'jack/src/com')
-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
3 files changed, 35 insertions, 59 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;
- }
}