diff options
author | mikaelpeltier <mikaelpeltier@google.com> | 2014-11-12 16:14:54 +0100 |
---|---|---|
committer | mikaelpeltier <mikaelpeltier@google.com> | 2014-11-13 11:31:15 +0100 |
commit | 94b5b6226322a6228b9f8f24ac80e82ac9be5e45 (patch) | |
tree | 9ae1d1774292e8da1e50fee05f81c4c6e8cac715 | |
parent | a70a9bbdfdb13b91596e76a58ffff1d5234de462 (diff) | |
download | toolchain_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
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(); |