summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormikaelpeltier <mikaelpeltier@google.com>2015-06-04 10:51:26 +0200
committermikaelpeltier <mikaelpeltier@google.com>2015-06-18 10:18:36 +0200
commita934fc4e32baa10238cc94c59eb5171be8624643 (patch)
tree5b1ba836e0a8c26bbf117649c6703b23199cd478
parent325b47a0195f7ee1a711f87bee42c8293523f558 (diff)
downloadtoolchain_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)
-rw-r--r--jack/src/com/android/jack/Jack.java3
-rw-r--r--jack/src/com/android/jack/backend/jayce/JayceFileImporter.java13
-rw-r--r--jack/src/com/android/jack/incremental/IncrementalInputFilter.java40
-rw-r--r--jack/tests/com/android/jack/TestTools.java1
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;