diff options
author | mikaelpeltier <mikaelpeltier@google.com> | 2015-06-04 10:51:26 +0200 |
---|---|---|
committer | mikaelpeltier <mikaelpeltier@google.com> | 2015-06-18 10:18:36 +0200 |
commit | a934fc4e32baa10238cc94c59eb5171be8624643 (patch) | |
tree | 5b1ba836e0a8c26bbf117649c6703b23199cd478 /jack | |
parent | 325b47a0195f7ee1a711f87bee42c8293523f558 (diff) | |
download | toolchain_jack-a934fc4e32baa10238cc94c59eb5171be8624643.zip toolchain_jack-a934fc4e32baa10238cc94c59eb5171be8624643.tar.gz toolchain_jack-a934fc4e32baa10238cc94c59eb5171be8624643.tar.bz2 |
Modify resource managment when Jack does an incremental build
- Delete all resources from the incremental folder, and load
resources into JSession from imported libraries before modifying
the list of imported libraries.
Bug: 21515528
Change-Id: I9b63ec46eaf4ed0473fdce56d7b4917ba16b264a
(cherry picked from commit 3dd4f30717a18c3d5143d67f197e34d834f3d152)
Diffstat (limited to 'jack')
4 files changed, 49 insertions, 8 deletions
diff --git a/jack/src/com/android/jack/Jack.java b/jack/src/com/android/jack/Jack.java index 15a91cf..86c79a7 100644 --- a/jack/src/com/android/jack/Jack.java +++ b/jack/src/com/android/jack/Jack.java @@ -744,7 +744,8 @@ public abstract class Jack { } try { - jayceImporter.doImport(session); + jayceImporter.doJayceImport(session); + jayceImporter.doResourceImport(session); } catch (LibraryReadingException e) { session.getReporter().report(Severity.FATAL, e); throw new JackAbortException(e); diff --git a/jack/src/com/android/jack/backend/jayce/JayceFileImporter.java b/jack/src/com/android/jack/backend/jayce/JayceFileImporter.java index 4c14ae6..796f760 100644 --- a/jack/src/com/android/jack/backend/jayce/JayceFileImporter.java +++ b/jack/src/com/android/jack/backend/jayce/JayceFileImporter.java @@ -117,11 +117,11 @@ public class JayceFileImporter { this.jackLibraries = jackLibraries; } - public void doImport(@Nonnull JSession session) throws LibraryReadingException { - + public void doJayceImport(@Nonnull JSession session) throws LibraryReadingException { for (InputJackLibrary jackLibrary : jackLibraries) { Reporter reporter = session.getReporter(); - logger.log(Level.FINE, "Importing {0}", jackLibrary.getLocation().getDescription()); + logger.log(Level.FINE, "Importing jayces from {0}", + jackLibrary.getLocation().getDescription()); Iterator<InputVFile> jayceFileIt = jackLibrary.iterator(FileType.JAYCE); while (jayceFileIt.hasNext()) { InputVFile jayceFile = jayceFileIt.next(); @@ -138,7 +138,14 @@ public class JayceFileImporter { } } } + } + } + public void doResourceImport(@Nonnull JSession session) throws LibraryReadingException { + for (InputJackLibrary jackLibrary : jackLibraries) { + Reporter reporter = session.getReporter(); + logger.log(Level.FINE, "Importing resources from {0}", + jackLibrary.getLocation().getDescription()); Iterator<InputVFile> rscFileIt = jackLibrary.iterator(FileType.RSC); while (rscFileIt.hasNext()) { InputVFile rscFile = rscFileIt.next(); diff --git a/jack/src/com/android/jack/incremental/IncrementalInputFilter.java b/jack/src/com/android/jack/incremental/IncrementalInputFilter.java index c45e1fa..d172284 100644 --- a/jack/src/com/android/jack/incremental/IncrementalInputFilter.java +++ b/jack/src/com/android/jack/incremental/IncrementalInputFilter.java @@ -26,6 +26,7 @@ import com.android.jack.analysis.dependency.library.LibraryDependencies; import com.android.jack.analysis.dependency.library.LibraryDependenciesInLibraryWriter; import com.android.jack.analysis.dependency.type.TypeDependencies; import com.android.jack.analysis.dependency.type.TypeDependenciesInLibraryWriter; +import com.android.jack.backend.jayce.JayceFileImporter; import com.android.jack.ir.ast.JSession; import com.android.jack.library.FileType; import com.android.jack.library.FileTypeDoesNotExistException; @@ -60,6 +61,7 @@ import java.io.IOException; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.HashSet; +import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.NoSuchElementException; @@ -158,6 +160,7 @@ public class IncrementalInputFilter extends CommonFilter implements InputFilter this.options = options; incrementalInputLibrary = getIncrementalInternalLibrary(); + fileNamesOnCmdLine = getJavaFileNamesSpecifiedOnCommandLine(options); tracer.getStatistic(IncrementalInputFilter.SOURCE_FILES).incValue(fileNamesOnCmdLine.size()); @@ -165,6 +168,8 @@ public class IncrementalInputFilter extends CommonFilter implements InputFilter JSession session = Jack.getSession(); if (incrementalInputLibrary != null) { try { + // Remove all resources, they are always recopied + deleteAllResources(); fillDependencies(incrementalInputLibrary, FileDependencies.vpath, fileDependencies); fillDependencies(incrementalInputLibrary, TypeDependencies.vpath, typeDependencies); fillDependencies(incrementalInputLibrary, LibraryDependencies.vpath, @@ -179,6 +184,11 @@ public class IncrementalInputFilter extends CommonFilter implements InputFilter new LibraryFormatException(incrementalInputLibrary.getLocation())); session.getReporter().report(Severity.FATAL, reportable); throw new JackAbortException(reportable); + } catch (CannotDeleteFileException e) { + LibraryReadingException reportable = new LibraryReadingException( + new LibraryFormatException(incrementalInputLibrary.getLocation())); + session.getReporter().report(Severity.FATAL, reportable); + throw new JackAbortException(reportable); } fillAddedFileNames(addedFileNames); @@ -223,6 +233,16 @@ public class IncrementalInputFilter extends CommonFilter implements InputFilter } } + private void deleteAllResources() throws CannotDeleteFileException, + FileTypeDoesNotExistException { + assert incrementalInputLibrary != null; + + Iterator<InputVFile> vFileIt = incrementalInputLibrary.iterator(FileType.RSC); + while (vFileIt.hasNext()) { + incrementalInputLibrary.delete(FileType.RSC, vFileIt.next().getPathFromRoot()); + } + } + @Override @Nonnull public List<? extends InputLibrary> getClasspath() { @@ -444,22 +464,36 @@ public class IncrementalInputFilter extends CommonFilter implements InputFilter List<InputLibrary> inputLibraries = new ArrayList<InputLibrary>(importedLibrariesFromCommandLine); + JSession session = Jack.getSession(); if (needFullBuild()) { - Jack.getSession().setFileDependencies(new FileDependencies()); - Jack.getSession().setTypeDependencies(new TypeDependencies()); + session.setFileDependencies(new FileDependencies()); + session.setTypeDependencies(new TypeDependencies()); return inputLibraries; } try { updateIncrementalState(); } catch (IncrementalException e) { - Jack.getSession().getReporter().report(Severity.FATAL, e); + session.getReporter().report(Severity.FATAL, e); throw new JackAbortException(e); } if (ThreadConfig.get(Options.GENERATE_LIBRARY_FROM_INCREMENTAL_FOLDER).booleanValue()) { // Incremental folder already contains dex files of imported libraries, thus import only // incremental folder. + // Import resources of Jack libraries that are remove from the imported list + List<InputJackLibrary> inputJackLibraries = new ArrayList<InputJackLibrary>(); + for (InputLibrary library : inputLibraries) { + if (library instanceof InputJackLibrary) { + inputJackLibraries.add((InputJackLibrary) library); + } + } + try { + new JayceFileImporter(inputJackLibraries).doResourceImport(session); + } catch (LibraryReadingException e) { + session.getReporter().report(Severity.FATAL, e); + throw new JackAbortException(e); + } inputLibraries.clear(); inputLibraries.add(incrementalInputLibrary); return inputLibraries; diff --git a/jack/tests/com/android/jack/TestTools.java b/jack/tests/com/android/jack/TestTools.java index 05fcf28..eb2dc4d 100644 --- a/jack/tests/com/android/jack/TestTools.java +++ b/jack/tests/com/android/jack/TestTools.java @@ -58,7 +58,6 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; -import java.util.Collections; import java.util.List; import javax.annotation.CheckForNull; |