diff options
author | mikaelpeltier <mikaelpeltier@google.com> | 2015-05-28 14:39:03 +0200 |
---|---|---|
committer | Mikael Peltier <mikaelpeltier@google.com> | 2015-06-05 09:13:37 +0000 |
commit | 59f50017709af1cfa1bcc6d3bd5e409f9436ede2 (patch) | |
tree | 10f49ca7a08a17f4f119642ccd65e7fb298e257b /jack | |
parent | 921976d63c203e129f74b022a1fc13cddb5f8a3d (diff) | |
download | toolchain_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')
4 files changed, 35 insertions, 71 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"; |