summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authormikaelpeltier <mikaelpeltier@google.com>2014-11-12 16:14:54 +0100
committermikaelpeltier <mikaelpeltier@google.com>2014-11-13 11:31:15 +0100
commit94b5b6226322a6228b9f8f24ac80e82ac9be5e45 (patch)
tree9ae1d1774292e8da1e50fee05f81c4c6e8cac715
parenta70a9bbdfdb13b91596e76a58ffff1d5234de462 (diff)
downloadtoolchain_jack-94b5b6226322a6228b9f8f24ac80e82ac9be5e45.zip
toolchain_jack-94b5b6226322a6228b9f8f24ac80e82ac9be5e45.tar.gz
toolchain_jack-94b5b6226322a6228b9f8f24ac80e82ac9be5e45.tar.bz2
Add usage of InputOutputVDir into output library
- Rename several properties from jayce to library since they are related to library. Change-Id: Ic6ca21f60b7dd2396ffc7b08d7e2b1a2d3b46f49
-rw-r--r--jack-tests/Android.mk3
-rw-r--r--jack/src/com/android/jack/Jack.java18
-rw-r--r--jack/src/com/android/jack/Options.java78
-rw-r--r--jack/src/com/android/jack/backend/ResourceWriter.java8
-rw-r--r--jack/src/com/android/jack/backend/dex/DexWritingTool.java1
-rw-r--r--jack/src/com/android/jack/backend/dex/SingleDexWritingTool.java17
-rw-r--r--jack/src/com/android/jack/experimental/incremental/JackIncremental.java6
-rw-r--r--jack/src/com/android/jack/library/CommonJackLibrary.java51
-rw-r--r--jack/src/com/android/jack/library/InputJackLibrary.java32
-rw-r--r--jack/src/com/android/jack/library/JackLibraryFactory.java4
-rw-r--r--jack/src/com/android/jack/library/OutputLibrary.java8
-rw-r--r--jack/src/com/android/jack/library/v0000/InputJackLibraryImpl.java16
-rw-r--r--jack/src/com/android/jack/library/v0000/OutputJackLibraryImpl.java19
-rw-r--r--jack/src/com/android/jack/library/v0001/InputJackLibraryImpl.java17
-rw-r--r--jack/src/com/android/jack/library/v0001/OutputJackLibraryImpl.java20
-rw-r--r--jack/tests/com/android/jack/ImportTest.java4
-rw-r--r--jack/tests/com/android/jack/TestTools.java14
-rw-r--r--jack/tests/com/android/jack/compile/androidtree/core/CoreCompilationTest.java6
-rw-r--r--sched/src/com/android/sched/vfs/InputOutputZipVDir.java1
19 files changed, 178 insertions, 145 deletions
diff --git a/jack-tests/Android.mk b/jack-tests/Android.mk
index a12120e..0d2b8f3 100644
--- a/jack-tests/Android.mk
+++ b/jack-tests/Android.mk
@@ -41,8 +41,7 @@ test-jack-incremental: $(JACK_JAR)
$(hide) $(eval TEMPDIR_DEX_FROM_JAVA := $(shell mktemp -d))
$(hide) $(eval TEMPDIR_DEX_FROM_JACK := $(shell mktemp -d))
$(hide) $(call call-jack,$(PRIVATE_JACK_VM),$(PRIVATE_JACK_VM_ARGS),$(PRIVATE_JACK_EXTRA_ARGS)) \
- -D jack.jackfile.generate=true -D jack.jackfile.output.container=dir \
- -D jack.jackfile.output.dir=$(TEMPDIR_DEX_FROM_JAVA)/jackIncrementalOutput --output-dex \
+ --output-jack-dir $(TEMPDIR_DEX_FROM_JAVA)/jackIncrementalOutput --output-dex \
$(TEMPDIR_DEX_FROM_JAVA) \
@$(ANDROID_BUILD_TOP)/out/target/common/obj/JAVA_LIBRARIES/core-libart_intermediates/jayces.java-source-list
$(hide) $(call call-jack,$(PRIVATE_JACK_VM),$(PRIVATE_JACK_VM_ARGS),$(PRIVATE_JACK_EXTRA_ARGS)) \
diff --git a/jack/src/com/android/jack/Jack.java b/jack/src/com/android/jack/Jack.java
index 1b5ce13..7641c28 100644
--- a/jack/src/com/android/jack/Jack.java
+++ b/jack/src/com/android/jack/Jack.java
@@ -273,9 +273,9 @@ import com.android.sched.util.log.Tracer;
import com.android.sched.util.log.TracerFactory;
import com.android.sched.vfs.Container;
import com.android.sched.vfs.DirectDir;
+import com.android.sched.vfs.InputOutputVDir;
import com.android.sched.vfs.InputRootVDir;
import com.android.sched.vfs.InputZipRootVDir;
-import com.android.sched.vfs.OutputVDir;
import org.antlr.runtime.RecognitionException;
@@ -431,13 +431,13 @@ public abstract class Jack {
JSession session = buildSession(options, hooks);
- if (ThreadConfig.get(Options.GENERATE_JAYCE_FILE).booleanValue()) {
- Container containerType = ThreadConfig.get(Options.JAYCE_OUTPUT_CONTAINER_TYPE);
- OutputVDir outputDir;
+ if (ThreadConfig.get(Options.GENERATE_JACK_LIBRARY).booleanValue()) {
+ Container containerType = ThreadConfig.get(Options.LIBRARY_OUTPUT_CONTAINER_TYPE);
+ InputOutputVDir outputDir;
if (containerType == Container.DIR) {
- outputDir = ThreadConfig.get(Options.JAYCE_FILE_OUTPUT_DIR);
+ outputDir = ThreadConfig.get(Options.LIBRARY_OUTPUT_DIR);
} else {
- outputDir = ThreadConfig.get(Options.JAYCE_FILE_OUTPUT_ZIP);
+ outputDir = ThreadConfig.get(Options.LIBRARY_OUTPUT_ZIP);
}
session.setJackOutputLibrary(JackLibraryFactory.getOutputLibrary(outputDir,
Jack.getEmitterId(), Jack.getVersionString()));
@@ -521,7 +521,7 @@ public abstract class Jack {
request.addFeature(MultiDexLegacy.class);
}
- if (config.get(Options.GENERATE_JAYCE_FILE).booleanValue()) {
+ if (config.get(Options.GENERATE_JACK_LIBRARY).booleanValue()) {
request.addFeature(JayceFileOutput.class);
}
@@ -529,7 +529,7 @@ public abstract class Jack {
request.addInitialTagsOrMarkers(getJackFormatInitialTagSet());
} else {
request.addInitialTagsOrMarkers(getJavaSourceInitialTagSet());
- if (config.get(Options.GENERATE_JAYCE_FILE).booleanValue()) {
+ if (config.get(Options.GENERATE_JACK_LIBRARY).booleanValue()) {
request.addInitialTagsOrMarkers(getJackFormatInitialTagSet());
request.addProduction(JayceFormatProduct.class);
}
@@ -543,7 +543,7 @@ public abstract class Jack {
request.addProduction(DexFileProduct.class);
session.addGeneratedFileType(FileType.DEX);
} else {
- assert options.jayceOutDir != null || options.jayceOutZip != null;
+ assert options.libraryOutDir != null || options.libraryOutZip != null;
request.addProduction(JayceFormatProduct.class);
if (ThreadConfig.get(Options.GENERATE_INTERMEDIATE_DEX).booleanValue()) {
request.addProduction(IntermediateDexProduct.class);
diff --git a/jack/src/com/android/jack/Options.java b/jack/src/com/android/jack/Options.java
index 1269332..14312a5 100644
--- a/jack/src/com/android/jack/Options.java
+++ b/jack/src/com/android/jack/Options.java
@@ -40,6 +40,7 @@ import com.android.jack.util.filter.Filter;
import com.android.sched.util.RunnableHooks;
import com.android.sched.util.codec.DirectDirInputOutputVDirCodec;
import com.android.sched.util.codec.DirectDirOutputVDirCodec;
+import com.android.sched.util.codec.ZipInputOutputVDirCodec;
import com.android.sched.util.codec.ZipOutputVDirCodec;
import com.android.sched.util.config.Config;
import com.android.sched.util.config.ConfigPrinterFactory;
@@ -108,8 +109,8 @@ public class Options {
.addDefaultValue(Boolean.FALSE);
@Nonnull
- public static final BooleanPropertyId GENERATE_JAYCE_FILE = BooleanPropertyId.create(
- "jack.jackfile.generate", "Generate jayce files").addDefaultValue(Boolean.FALSE);
+ public static final BooleanPropertyId GENERATE_JACK_LIBRARY = BooleanPropertyId.create(
+ "jack.library.generate", "Generate jack library").addDefaultValue(Boolean.FALSE);
@Nonnull
public static final EnumPropertyId<Container> DEX_OUTPUT_CONTAINER_TYPE = EnumPropertyId.create(
@@ -117,21 +118,21 @@ public class Options {
.ignoreCase().requiredIf(GENERATE_DEX_FILE.getValue().isTrue());
@Nonnull
- public static final EnumPropertyId<Container> JAYCE_OUTPUT_CONTAINER_TYPE = EnumPropertyId.create(
- "jack.jackfile.output.container", "Output container type", Container.values())
- .ignoreCase().requiredIf(GENERATE_JAYCE_FILE.getValue().isTrue());
+ public static final EnumPropertyId<Container> LIBRARY_OUTPUT_CONTAINER_TYPE = EnumPropertyId
+ .create("jack.library.output.container", "Library output container type", Container.values())
+ .ignoreCase().requiredIf(GENERATE_JACK_LIBRARY.getValue().isTrue());
@Nonnull
- public static final PropertyId<OutputVDir> JAYCE_FILE_OUTPUT_ZIP = PropertyId.create(
- "jack.jackfile.output.zip", "Output zip archive for jayce files",
- new ZipOutputVDirCodec(Existence.MAY_EXIST)).requiredIf(
- GENERATE_JAYCE_FILE.getValue().isTrue().and(JAYCE_OUTPUT_CONTAINER_TYPE.is(Container.ZIP)));
+ public static final PropertyId<InputOutputVDir> LIBRARY_OUTPUT_ZIP = PropertyId.create(
+ "jack.library.output.zip", "Output zip archive for library",
+ new ZipInputOutputVDirCodec(Existence.MAY_EXIST)).requiredIf(GENERATE_JACK_LIBRARY.getValue()
+ .isTrue().and(LIBRARY_OUTPUT_CONTAINER_TYPE.is(Container.ZIP)));
@Nonnull
- public static final PropertyId<OutputVDir> JAYCE_FILE_OUTPUT_DIR = PropertyId.create(
- "jack.jackfile.output.dir", "Output folder for jayce files",
- new DirectDirOutputVDirCodec(Existence.MAY_EXIST)).requiredIf(
- GENERATE_JAYCE_FILE.getValue().isTrue().and(JAYCE_OUTPUT_CONTAINER_TYPE.is(Container.DIR)));
+ public static final PropertyId<InputOutputVDir> LIBRARY_OUTPUT_DIR = PropertyId.create(
+ "jack.library.output.dir", "Output folder for library",
+ new DirectDirInputOutputVDirCodec(Existence.MAY_EXIST)).requiredIf(GENERATE_JACK_LIBRARY
+ .getValue().isTrue().and(LIBRARY_OUTPUT_CONTAINER_TYPE.is(Container.DIR)));
@Nonnull
public static final PropertyId<InputOutputVDir> INTERMEDIATE_DEX_DIR = PropertyId.create(
@@ -209,12 +210,12 @@ public class Options {
@Option(name = "--output-dex-zip", usage = "output to this zip file", metaVar = "FILE")
protected File outZip = null;
- @Option(name = "--output-jack-dir", usage = "output jayce files to this folder",
+ @Option(name = "--output-jack-dir", usage = "output jack library to this folder",
metaVar = "DIRECTORY")
- protected File jayceOutDir = null;
+ protected File libraryOutDir = null;
@Option(name = "--output-jack", usage = "output jack library file", metaVar = "FILE")
- protected File jayceOutZip = null;
+ protected File libraryOutZip = null;
@Option(name = "--generate-intermediate-dexes",
usage = "generate intermediate dex files per types along with jayce files")
@@ -587,14 +588,18 @@ public class Options {
configBuilder.set(
CodeItemBuilder.EMIT_SYNTHETIC_LOCAL_DEBUG_INFO, emitSyntheticDebugInfo);
- if (jayceOutZip != null) {
- configBuilder.setString(JAYCE_FILE_OUTPUT_ZIP, jayceOutZip.getAbsolutePath());
- configBuilder.set(JAYCE_OUTPUT_CONTAINER_TYPE, Container.ZIP);
- configBuilder.set(GENERATE_JAYCE_FILE, true);
- } else if (jayceOutDir != null) {
- configBuilder.setString(JAYCE_FILE_OUTPUT_DIR, jayceOutDir.getAbsolutePath());
- configBuilder.set(JAYCE_OUTPUT_CONTAINER_TYPE, Container.DIR);
- configBuilder.set(GENERATE_JAYCE_FILE, true);
+ if (libraryOutZip != null) {
+ configBuilder.setString(LIBRARY_OUTPUT_ZIP, libraryOutZip.getAbsolutePath());
+ configBuilder.set(LIBRARY_OUTPUT_CONTAINER_TYPE, Container.ZIP);
+ configBuilder.set(GENERATE_JACK_LIBRARY, true);
+ if (generateIntermediateDex) {
+ configBuilder.set(GENERATE_INTERMEDIATE_DEX, true);
+ configBuilder.set(INTERMEDIATE_DEX_DIR, null);
+ }
+ } else if (libraryOutDir != null) {
+ configBuilder.setString(LIBRARY_OUTPUT_DIR, libraryOutDir.getAbsolutePath());
+ configBuilder.set(LIBRARY_OUTPUT_CONTAINER_TYPE, Container.DIR);
+ configBuilder.set(GENERATE_JACK_LIBRARY, true);
if (generateIntermediateDex) {
configBuilder.set(GENERATE_INTERMEDIATE_DEX, true);
configBuilder.set(INTERMEDIATE_DEX_DIR, null);
@@ -697,25 +702,20 @@ public class Options {
}
// Check Jack arguments
- if (generateIntermediateDex && (out != null || outZip != null || jayceOutZip != null)) {
- throw new IllegalOptionsException(
- "--generate-intermediate-dex must be use only with --output-jack-dir");
- }
-
if (emitSyntheticDebugInfo && !emitLocalDebugInfo) {
throw new IllegalOptionsException(
"Impossible to emit synthetic debug info when not emitting debug info");
}
- if (jayceOutDir != null) {
- if (!jayceOutDir.exists()) {
+ if (libraryOutDir != null) {
+ if (!libraryOutDir.exists()) {
throw new IllegalOptionsException("The specified output folder '"
- + jayceOutDir.getAbsolutePath() + "' for jayce files does not exist.");
+ + libraryOutDir.getAbsolutePath() + "' for jayce files does not exist.");
}
- if (!jayceOutDir.canWrite()) {
+ if (!libraryOutDir.canWrite()) {
throw new IllegalOptionsException("The specified output folder '"
- + jayceOutDir.getAbsolutePath() + "' for jayce files cannot be written to.");
+ + libraryOutDir.getAbsolutePath() + "' for jayce files cannot be written to.");
}
}
@@ -733,11 +733,11 @@ public class Options {
}
public void setJayceOutputDir(@Nonnull File outputDir) {
- jayceOutDir = outputDir;
+ libraryOutDir = outputDir;
}
public void setJayceOutputZip(@Nonnull File outputZip) {
- jayceOutZip = outputZip;
+ libraryOutZip = outputZip;
}
public void setJayceImports(@Nonnull List<File> imports) {
@@ -745,7 +745,7 @@ public class Options {
}
public boolean outputToZip() {
- return outZip != null || jayceOutZip != null;
+ return outZip != null || libraryOutZip != null;
}
@CheckForNull
@@ -768,9 +768,9 @@ public class Options {
if (outJars.size() > 0) {
File outJar = outJars.get(0);
if (outJar.isDirectory()) {
- jayceOutDir = outJar;
+ libraryOutDir = outJar;
} else {
- jayceOutZip = outJar;
+ libraryOutZip = outJar;
}
}
String libraryJars = flags.getLibraryJars();
diff --git a/jack/src/com/android/jack/backend/ResourceWriter.java b/jack/src/com/android/jack/backend/ResourceWriter.java
index 2156852..921e704 100644
--- a/jack/src/com/android/jack/backend/ResourceWriter.java
+++ b/jack/src/com/android/jack/backend/ResourceWriter.java
@@ -50,12 +50,12 @@ public class ResourceWriter implements RunnableSchedulable<JSession> {
private final OutputVDir outputVDir;
{
- if (ThreadConfig.get(Options.GENERATE_JAYCE_FILE).booleanValue()) {
- Container containerType = ThreadConfig.get(Options.JAYCE_OUTPUT_CONTAINER_TYPE);
+ if (ThreadConfig.get(Options.GENERATE_JACK_LIBRARY).booleanValue()) {
+ Container containerType = ThreadConfig.get(Options.LIBRARY_OUTPUT_CONTAINER_TYPE);
if (containerType == Container.DIR) {
- outputVDir = ThreadConfig.get(Options.JAYCE_FILE_OUTPUT_DIR);
+ outputVDir = ThreadConfig.get(Options.LIBRARY_OUTPUT_DIR);
} else {
- outputVDir = ThreadConfig.get(Options.JAYCE_FILE_OUTPUT_ZIP);
+ outputVDir = ThreadConfig.get(Options.LIBRARY_OUTPUT_ZIP);
}
} else {
assert ThreadConfig.get(Options.GENERATE_DEX_FILE).booleanValue();
diff --git a/jack/src/com/android/jack/backend/dex/DexWritingTool.java b/jack/src/com/android/jack/backend/dex/DexWritingTool.java
index 0f7042c..e614a92 100644
--- a/jack/src/com/android/jack/backend/dex/DexWritingTool.java
+++ b/jack/src/com/android/jack/backend/dex/DexWritingTool.java
@@ -75,7 +75,6 @@ public abstract class DexWritingTool {
@Nonnull
protected InputRootVDir getIntermediateDexDir() {
-
return (InputRootVDir) ThreadConfig.get(Options.INTERMEDIATE_DEX_DIR);
}
diff --git a/jack/src/com/android/jack/backend/dex/SingleDexWritingTool.java b/jack/src/com/android/jack/backend/dex/SingleDexWritingTool.java
index 5652c05..da31d4f 100644
--- a/jack/src/com/android/jack/backend/dex/SingleDexWritingTool.java
+++ b/jack/src/com/android/jack/backend/dex/SingleDexWritingTool.java
@@ -22,6 +22,7 @@ import com.android.jack.Jack;
import com.android.jack.ir.ast.JDefinedClassOrInterface;
import com.android.jack.library.FileType;
import com.android.jack.library.InputLibrary;
+import com.android.jack.library.OutputJackLibrary;
import com.android.jack.library.TypeInInputLibraryLocation;
import com.android.jack.tools.merger.JackMerger;
import com.android.jack.tools.merger.MergingOverflowException;
@@ -52,9 +53,19 @@ public class SingleDexWritingTool extends DexWritingTool {
public void write(@Nonnull OutputVDir outputVDir) throws DexWritingException {
JackMerger merger = new JackMerger(createDexFile());
OutputVFile outputDex = getOutputDex(outputVDir);
- List<InputVFile> dexList = new ArrayList<InputVFile>();
- getAllDexFilesFromDir(getIntermediateDexDir(), dexList);
- Iterator<InputVFile> inputVFileIt = getAllDexFilesFromLib(dexList.iterator());
+ Iterator<InputVFile> inputVFileIt;
+
+ // Intermediate dex files can be located into the intermediate dex dir or into a library
+ OutputJackLibrary jackOutputLibrary = Jack.getSession().getJackOutputLibrary();
+ if (jackOutputLibrary != null && jackOutputLibrary.containsFileType(FileType.DEX)) {
+ inputVFileIt = jackOutputLibrary.iterator(FileType.DEX);
+ } else {
+ List<InputVFile> dexList = new ArrayList<InputVFile>();
+ getAllDexFilesFromDir(getIntermediateDexDir(), dexList);
+ inputVFileIt = dexList.iterator();
+ }
+
+ inputVFileIt = getAllDexFilesFromLib(inputVFileIt);
while (inputVFileIt.hasNext()) {
try {
mergeDex(merger, inputVFileIt.next());
diff --git a/jack/src/com/android/jack/experimental/incremental/JackIncremental.java b/jack/src/com/android/jack/experimental/incremental/JackIncremental.java
index 75b13ea..ff3f82c 100644
--- a/jack/src/com/android/jack/experimental/incremental/JackIncremental.java
+++ b/jack/src/com/android/jack/experimental/incremental/JackIncremental.java
@@ -176,10 +176,10 @@ public class JackIncremental extends CommandLine {
// Add options to control incremental support
assert dexFilesFolder != null;
options.addProperty(Options.INTERMEDIATE_DEX_DIR.getName(), dexFilesFolder.getPath());
- options.addProperty(Options.GENERATE_JAYCE_FILE.getName(), "true");
- options.addProperty(Options.JAYCE_OUTPUT_CONTAINER_TYPE.getName(), "dir");
+ options.addProperty(Options.GENERATE_JACK_LIBRARY.getName(), "true");
+ options.addProperty(Options.LIBRARY_OUTPUT_CONTAINER_TYPE.getName(), "dir");
assert jackFilesFolder != null;
- options.addProperty(Options.JAYCE_FILE_OUTPUT_DIR.getName(), jackFilesFolder.getPath());
+ options.addProperty(Options.LIBRARY_OUTPUT_DIR.getName(), jackFilesFolder.getPath());
compilerState = new CompilerState(incrementalFolder);
diff --git a/jack/src/com/android/jack/library/CommonJackLibrary.java b/jack/src/com/android/jack/library/CommonJackLibrary.java
index 1fb6151..1c48508 100644
--- a/jack/src/com/android/jack/library/CommonJackLibrary.java
+++ b/jack/src/com/android/jack/library/CommonJackLibrary.java
@@ -16,9 +16,17 @@
package com.android.jack.library;
+import com.android.jack.Jack;
import com.android.sched.util.log.LoggerFactory;
+import com.android.sched.vfs.InputVDir;
+import com.android.sched.vfs.InputVElement;
+import com.android.sched.vfs.InputVFile;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.List;
import java.util.Properties;
+import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -35,6 +43,9 @@ public abstract class CommonJackLibrary implements JackLibrary {
@Nonnull
protected final Properties libraryProperties;
+ @Nonnull
+ private final Set<FileType> fileTypes = new HashSet<FileType>(2);
+
public CommonJackLibrary(@Nonnull Properties libraryProperties) {
this.libraryProperties = libraryProperties;
}
@@ -59,4 +70,44 @@ public abstract class CommonJackLibrary implements JackLibrary {
public void putProperty(@Nonnull String key, @Nonnull String value) {
libraryProperties.put(key, value);
}
+
+ @Nonnull
+ public Collection<FileType> getFileTypes() {
+ return Jack.getUnmodifiableCollections().getUnmodifiableCollection(fileTypes);
+ }
+
+ public boolean containsFileType(@Nonnull FileType fileType) {
+ return fileTypes.contains(fileType);
+ }
+
+ protected void addFileType(@Nonnull FileType ft) {
+ fileTypes.add(ft);
+ }
+
+ protected void fillFileTypes() {
+ for (FileType ft : FileType.values()) {
+ try {
+ String propertyName = ft.getPropertyName();
+ if (containsProperty(propertyName) && Boolean.parseBoolean(getProperty(propertyName))) {
+ fileTypes.add(ft);
+ }
+ } catch (LibraryFormatException e) {
+ throw new AssertionError();
+ }
+ }
+ }
+
+ protected void fillFiles(@Nonnull InputVDir vDir, @Nonnull FileType fileType,
+ @Nonnull List<InputVFile> files) {
+ for (InputVElement subFile : vDir.list()) {
+ if (subFile.isVDir()) {
+ fillFiles((InputVDir) subFile, fileType, files);
+ } else {
+ InputVFile vFile = (InputVFile) subFile;
+ if (fileType.isOfType(vFile)) {
+ files.add(vFile);
+ }
+ }
+ }
+ }
}
diff --git a/jack/src/com/android/jack/library/InputJackLibrary.java b/jack/src/com/android/jack/library/InputJackLibrary.java
index 176ea74..d62e26b 100644
--- a/jack/src/com/android/jack/library/InputJackLibrary.java
+++ b/jack/src/com/android/jack/library/InputJackLibrary.java
@@ -18,10 +18,7 @@ package com.android.jack.library;
import com.android.jack.Jack;
-import java.util.Collection;
-import java.util.HashSet;
import java.util.Properties;
-import java.util.Set;
import java.util.logging.Level;
import javax.annotation.Nonnull;
@@ -32,37 +29,10 @@ import javax.annotation.Nonnull;
*/
public abstract class InputJackLibrary extends CommonJackLibrary implements InputLibrary {
- @Nonnull
- private final Set<FileType> fileTypes = new HashSet<FileType>(2);
-
- public InputJackLibrary(@Nonnull Properties libraryProperties) {
+ public InputJackLibrary(@Nonnull Properties libraryProperties) {
super(libraryProperties);
}
- @Override
- @Nonnull
- public Collection<FileType> getFileTypes() {
- return Jack.getUnmodifiableCollections().getUnmodifiableCollection(fileTypes);
- }
-
- @Override
- public boolean containsFileType(@Nonnull FileType fileType) {
- return fileTypes.contains(fileType);
- }
-
- protected void fillFileTypes() {
- for (FileType ft : FileType.values()) {
- try {
- String propertyName = ft.getPropertyName();
- if (containsProperty(propertyName) && Boolean.parseBoolean(getProperty(propertyName))) {
- fileTypes.add(ft);
- }
- } catch (LibraryFormatException e) {
- throw new AssertionError();
- }
- }
- }
-
protected void check() throws LibraryVersionException, LibraryFormatException {
getProperty(JackLibrary.KEY_LIB_EMITTER);
getProperty(JackLibrary.KEY_LIB_EMITTER_VERSION);
diff --git a/jack/src/com/android/jack/library/JackLibraryFactory.java b/jack/src/com/android/jack/library/JackLibraryFactory.java
index 04b66b5..962c0e4 100644
--- a/jack/src/com/android/jack/library/JackLibraryFactory.java
+++ b/jack/src/com/android/jack/library/JackLibraryFactory.java
@@ -18,9 +18,9 @@ package com.android.jack.library;
import com.android.jack.library.v0001.OutputJackLibraryImpl;
import com.android.sched.util.log.LoggerFactory;
+import com.android.sched.vfs.InputOutputVDir;
import com.android.sched.vfs.InputRootVDir;
import com.android.sched.vfs.InputVFile;
-import com.android.sched.vfs.OutputVDir;
import java.io.IOException;
import java.lang.reflect.Constructor;
@@ -65,7 +65,7 @@ public abstract class JackLibraryFactory {
}
@Nonnull
- public static OutputJackLibrary getOutputLibrary(@Nonnull OutputVDir vdir,
+ public static OutputJackLibrary getOutputLibrary(@Nonnull InputOutputVDir vdir,
@Nonnull String emitterId, @Nonnull String emitterVersion) {
return new OutputJackLibraryImpl(vdir, emitterId, emitterVersion);
}
diff --git a/jack/src/com/android/jack/library/OutputLibrary.java b/jack/src/com/android/jack/library/OutputLibrary.java
index 84b9c0a..9741b4d 100644
--- a/jack/src/com/android/jack/library/OutputLibrary.java
+++ b/jack/src/com/android/jack/library/OutputLibrary.java
@@ -17,9 +17,12 @@
package com.android.jack.library;
import com.android.sched.util.file.CannotCreateFileException;
+import com.android.sched.vfs.InputVFile;
import com.android.sched.vfs.OutputVFile;
import com.android.sched.vfs.VPath;
+import java.util.Iterator;
+
import javax.annotation.Nonnull;
/**
@@ -37,4 +40,9 @@ public interface OutputLibrary extends Library {
@Override
@Nonnull
public OutputLibraryLocation getLocation();
+
+ public boolean containsFileType(@Nonnull FileType fileType);
+
+ @Nonnull
+ public Iterator<InputVFile> iterator(@Nonnull FileType fileType);
}
diff --git a/jack/src/com/android/jack/library/v0000/InputJackLibraryImpl.java b/jack/src/com/android/jack/library/v0000/InputJackLibraryImpl.java
index d8fb7ca..506c5bd 100644
--- a/jack/src/com/android/jack/library/v0000/InputJackLibraryImpl.java
+++ b/jack/src/com/android/jack/library/v0000/InputJackLibraryImpl.java
@@ -26,8 +26,6 @@ import com.android.jack.library.LibraryVersionException;
import com.android.sched.util.file.NotFileOrDirectoryException;
import com.android.sched.util.log.LoggerFactory;
import com.android.sched.vfs.InputRootVDir;
-import com.android.sched.vfs.InputVDir;
-import com.android.sched.vfs.InputVElement;
import com.android.sched.vfs.InputVFile;
import com.android.sched.vfs.VPath;
@@ -119,20 +117,6 @@ public class InputJackLibraryImpl extends InputJackLibrary {
return libraryVDir;
}
- private void fillFiles(@Nonnull InputVDir vDir, @Nonnull FileType fileType,
- @Nonnull List<InputVFile> binaries) {
- for (InputVElement subFile : vDir.list()) {
- if (subFile.isVDir()) {
- fillFiles((InputVDir) subFile, fileType, binaries);
- } else {
- InputVFile vFile = (InputVFile) subFile;
- if (fileType.isOfType(vFile)) {
- binaries.add(vFile);
- }
- }
- }
- }
-
@Override
public int getMinorVersion() throws LibraryFormatException {
int minor;
diff --git a/jack/src/com/android/jack/library/v0000/OutputJackLibraryImpl.java b/jack/src/com/android/jack/library/v0000/OutputJackLibraryImpl.java
index 31df262..2e8cc4f 100644
--- a/jack/src/com/android/jack/library/v0000/OutputJackLibraryImpl.java
+++ b/jack/src/com/android/jack/library/v0000/OutputJackLibraryImpl.java
@@ -22,12 +22,16 @@ import com.android.jack.library.OutputJackLibrary;
import com.android.jack.library.OutputLibrary;
import com.android.jack.library.OutputLibraryLocation;
import com.android.sched.util.file.CannotCreateFileException;
-import com.android.sched.vfs.OutputVDir;
+import com.android.sched.vfs.InputOutputVDir;
+import com.android.sched.vfs.InputVFile;
import com.android.sched.vfs.OutputVFile;
import com.android.sched.vfs.SequentialOutputVDir;
import com.android.sched.vfs.VPath;
import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
import java.util.Properties;
import javax.annotation.Nonnull;
@@ -38,7 +42,7 @@ import javax.annotation.Nonnull;
public class OutputJackLibraryImpl extends OutputJackLibrary {
@Nonnull
- private final OutputVDir outputVDir;
+ private final InputOutputVDir outputVDir;
@Nonnull
private final OutputLibraryLocation location = new OutputLibraryLocation() {
@@ -66,7 +70,7 @@ public class OutputJackLibraryImpl extends OutputJackLibrary {
}
};
- public OutputJackLibraryImpl(@Nonnull OutputVDir outputVDir, @Nonnull String emitterId,
+ public OutputJackLibraryImpl(@Nonnull InputOutputVDir outputVDir, @Nonnull String emitterId,
@Nonnull String emitterVersion) {
super(new Properties());
this.outputVDir = outputVDir;
@@ -81,6 +85,7 @@ public class OutputJackLibraryImpl extends OutputJackLibrary {
public OutputVFile createFile(@Nonnull FileType fileType, @Nonnull VPath typePath)
throws CannotCreateFileException {
putProperty(fileType.getPropertyName(), String.valueOf(true));
+ addFileType(fileType);
typePath.addSuffix(fileType.getFileExtension());
return outputVDir.createOutputVFile(typePath);
}
@@ -117,4 +122,12 @@ public class OutputJackLibraryImpl extends OutputJackLibrary {
public int getMajorVersion() {
return Version.MAJOR;
}
+
+ @Override
+ @Nonnull
+ public Iterator<InputVFile> iterator(@Nonnull FileType fileType) {
+ List<InputVFile> inputVFiles = new ArrayList<InputVFile>();
+ fillFiles(outputVDir, fileType, inputVFiles);
+ return inputVFiles.listIterator();
+ }
}
diff --git a/jack/src/com/android/jack/library/v0001/InputJackLibraryImpl.java b/jack/src/com/android/jack/library/v0001/InputJackLibraryImpl.java
index 27742c7..3d56e9b 100644
--- a/jack/src/com/android/jack/library/v0001/InputJackLibraryImpl.java
+++ b/jack/src/com/android/jack/library/v0001/InputJackLibraryImpl.java
@@ -26,8 +26,6 @@ import com.android.jack.library.LibraryVersionException;
import com.android.sched.util.file.NotFileOrDirectoryException;
import com.android.sched.util.log.LoggerFactory;
import com.android.sched.vfs.InputRootVDir;
-import com.android.sched.vfs.InputVDir;
-import com.android.sched.vfs.InputVElement;
import com.android.sched.vfs.InputVFile;
import com.android.sched.vfs.VPath;
@@ -119,21 +117,6 @@ public class InputJackLibraryImpl extends InputJackLibrary {
return libraryVDir;
}
-
- private void fillFiles(@Nonnull InputVDir vDir, @Nonnull FileType fileType,
- @Nonnull List<InputVFile> binaries) {
- for (InputVElement subFile : vDir.list()) {
- if (subFile.isVDir()) {
- fillFiles((InputVDir) subFile, fileType, binaries);
- } else {
- InputVFile vFile = (InputVFile) subFile;
- if (fileType.isOfType(vFile)) {
- binaries.add(vFile);
- }
- }
- }
- }
-
@Override
public int getMinorVersion() throws LibraryFormatException {
int minor;
diff --git a/jack/src/com/android/jack/library/v0001/OutputJackLibraryImpl.java b/jack/src/com/android/jack/library/v0001/OutputJackLibraryImpl.java
index 30b12a4..a16f76a 100644
--- a/jack/src/com/android/jack/library/v0001/OutputJackLibraryImpl.java
+++ b/jack/src/com/android/jack/library/v0001/OutputJackLibraryImpl.java
@@ -22,13 +22,17 @@ import com.android.jack.library.OutputJackLibrary;
import com.android.jack.library.OutputLibrary;
import com.android.jack.library.OutputLibraryLocation;
import com.android.sched.util.file.CannotCreateFileException;
-import com.android.sched.vfs.OutputVDir;
+import com.android.sched.vfs.InputOutputVDir;
+import com.android.sched.vfs.InputVFile;
import com.android.sched.vfs.OutputVFile;
import com.android.sched.vfs.SequentialOutputVDir;
import com.android.sched.vfs.VPath;
import java.io.IOException;
import java.io.OutputStream;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
import java.util.Properties;
import javax.annotation.Nonnull;
@@ -39,7 +43,7 @@ import javax.annotation.Nonnull;
public class OutputJackLibraryImpl extends OutputJackLibrary {
@Nonnull
- private final OutputVDir outputVDir;
+ private final InputOutputVDir outputVDir;
@Nonnull
private final OutputLibraryLocation location = new OutputLibraryLocation() {
@@ -67,7 +71,7 @@ public class OutputJackLibraryImpl extends OutputJackLibrary {
}
};
- public OutputJackLibraryImpl(@Nonnull OutputVDir outputVDir, @Nonnull String emitterId,
+ public OutputJackLibraryImpl(@Nonnull InputOutputVDir outputVDir, @Nonnull String emitterId,
@Nonnull String emitterVersion) {
super(new Properties());
this.outputVDir = outputVDir;
@@ -82,9 +86,11 @@ public class OutputJackLibraryImpl extends OutputJackLibrary {
public OutputVFile createFile(@Nonnull FileType fileType, @Nonnull VPath typePath)
throws CannotCreateFileException {
putProperty(fileType.getPropertyName(), String.valueOf(true));
+ addFileType(fileType);
typePath.addSuffix(fileType.getFileExtension());
return outputVDir.createOutputVFile(typePath);
}
+
@Override
public boolean needsSequentialWriting() {
return outputVDir instanceof SequentialOutputVDir;
@@ -127,4 +133,12 @@ public class OutputJackLibraryImpl extends OutputJackLibrary {
public int getMajorVersion() {
return Version.MAJOR;
}
+
+ @Override
+ @Nonnull
+ public Iterator<InputVFile> iterator(@Nonnull FileType fileType) {
+ List<InputVFile> inputVFiles = new ArrayList<InputVFile>();
+ fillFiles(outputVDir, fileType, inputVFiles);
+ return inputVFiles.listIterator();
+ }
}
diff --git a/jack/tests/com/android/jack/ImportTest.java b/jack/tests/com/android/jack/ImportTest.java
index 0d94c85..ca93858 100644
--- a/jack/tests/com/android/jack/ImportTest.java
+++ b/jack/tests/com/android/jack/ImportTest.java
@@ -39,7 +39,7 @@ public class ImportTest {
File jackOut = TestTools.createTempDir("importtest", "dir");
Options options =
TestTools.buildCommandLineArgs(TestTools.getJackTestsWithJackFolder("fibonacci"));
- options.jayceOutDir = jackOut;
+ options.libraryOutDir = jackOut;
TestTools.runCompilation(options);
Options importOptions =
@@ -53,7 +53,7 @@ public class ImportTest {
File jackOut = TestTools.createTempDir("importtest", "dir");
Options options =
TestTools.buildCommandLineArgs(TestTools.getJackTestsWithJackFolder("fibonacci"));
- options.jayceOutDir = jackOut;
+ options.libraryOutDir = jackOut;
TestTools.runCompilation(options);
Options conflictOptions =
diff --git a/jack/tests/com/android/jack/TestTools.java b/jack/tests/com/android/jack/TestTools.java
index 5b2ccc8..e3643bd 100644
--- a/jack/tests/com/android/jack/TestTools.java
+++ b/jack/tests/com/android/jack/TestTools.java
@@ -226,9 +226,9 @@ public class TestTools {
boolean withDebugInfos) throws Exception {
options.classpath = classpath;
if (zip) {
- options.jayceOutZip = out;
+ options.libraryOutZip = out;
} else {
- options.jayceOutDir = out;
+ options.libraryOutDir = out;
}
options.ecjArguments = buildEcjArgs();
addFile(sourceFolderOrSourceList, options.ecjArguments);
@@ -258,9 +258,9 @@ public class TestTools {
options.jayceImport.add(in);
options.classpath = classpath;
if (zip) {
- options.jayceOutZip = out;
+ options.libraryOutZip = out;
} else {
- options.jayceOutDir = out;
+ options.libraryOutDir = out;
}
options.proguardFlagsFiles = new ArrayList<File>();
for (ProguardFlags flagFile : flagFiles) {
@@ -321,9 +321,9 @@ public class TestTools {
options.jayceImport.add(in);
options.classpath = classpath;
if (zip) {
- options.jayceOutZip = out;
+ options.libraryOutZip = out;
} else {
- options.jayceOutDir = out;
+ options.libraryOutDir = out;
}
options.jarjarRulesFile = jarjarRules;
Jack.run(options);
@@ -547,7 +547,7 @@ public class TestTools {
Request request = Jack.createInitialRequest();
request.addInitialTagsOrMarkers(Jack.getJavaSourceInitialTagSet());
request.addProduction(IntermediateDexProduct.class);
- if (ThreadConfig.get(Options.GENERATE_JAYCE_FILE).booleanValue()) {
+ if (ThreadConfig.get(Options.GENERATE_JACK_LIBRARY).booleanValue()) {
request.addProduction(JayceFormatProduct.class);
}
diff --git a/jack/tests/com/android/jack/compile/androidtree/core/CoreCompilationTest.java b/jack/tests/com/android/jack/compile/androidtree/core/CoreCompilationTest.java
index b868d1e..91755f0 100644
--- a/jack/tests/com/android/jack/compile/androidtree/core/CoreCompilationTest.java
+++ b/jack/tests/com/android/jack/compile/androidtree/core/CoreCompilationTest.java
@@ -79,13 +79,13 @@ public class CoreCompilationTest {
File coreDexFromJava = new File(coreDexFolderFromJava, DexFileWriter.DEX_FILENAME);
Options options = new Options();
- options.addProperty(Options.GENERATE_JAYCE_FILE.getName(), "true");
+ options.addProperty(Options.GENERATE_JACK_LIBRARY.getName(), "true");
File outputFile = new File("/tmp/jackIncrementalOutput");
options.addProperty(
Options.DEX_OUTPUT_CONTAINER_TYPE.getName(), Container.DIR.toString());
- options.addProperty(Options.JAYCE_FILE_OUTPUT_DIR.getName(), outputFile.getAbsolutePath());
+ options.addProperty(Options.LIBRARY_OUTPUT_DIR.getName(), outputFile.getAbsolutePath());
options.addProperty(
- Options.JAYCE_OUTPUT_CONTAINER_TYPE.getName(), Container.DIR.toString());
+ Options.LIBRARY_OUTPUT_CONTAINER_TYPE.getName(), Container.DIR.toString());
options.addProperty(Options.JAVA_SOURCE_VERSION.getName(), JavaVersion.JAVA_7.toString());
TestTools.compileSourceToDex(options, SOURCELIST, null, coreDexFolderFromJava, false);
diff --git a/sched/src/com/android/sched/vfs/InputOutputZipVDir.java b/sched/src/com/android/sched/vfs/InputOutputZipVDir.java
index 36498c4..1ad4cff 100644
--- a/sched/src/com/android/sched/vfs/InputOutputZipVDir.java
+++ b/sched/src/com/android/sched/vfs/InputOutputZipVDir.java
@@ -71,6 +71,7 @@ class InputOutputZipVDir extends AbstractVElement implements InputOutputVDir {
if (subs.length == 0) {
return Collections.emptyList();
}
+
ArrayList<InputVElement> items = new ArrayList<InputVElement>(subs.length);
for (File sub : subs) {
String zipEntryName = zipEntry.getName();