diff options
author | Yohann Roussel <yroussel@google.com> | 2015-02-26 18:08:43 +0100 |
---|---|---|
committer | Yohann Roussel <yroussel@google.com> | 2015-03-03 11:22:27 +0100 |
commit | 82dbcafa8a9071d54fb1fc49469f160fab0a3f61 (patch) | |
tree | ef872659fc3aebc86fcbd8a43d00733f50fac3b5 | |
parent | 4f8680254dd1ecee7baeb9a6efb2803410473468 (diff) | |
download | toolchain_jack-82dbcafa8a9071d54fb1fc49469f160fab0a3f61.tar.gz toolchain_jack-82dbcafa8a9071d54fb1fc49469f160fab0a3f61.tar.bz2 toolchain_jack-82dbcafa8a9071d54fb1fc49469f160fab0a3f61.zip |
Import meta and resources are now properties
Change-Id: I2f9795a826046ccfbeee5207597f31e633663958
-rw-r--r-- | jack/src/com/android/jack/Jack.java | 60 | ||||
-rw-r--r-- | jack/src/com/android/jack/Options.java | 16 | ||||
-rw-r--r-- | jack/src/com/android/jack/meta/MetaImporter.java | 10 | ||||
-rw-r--r-- | jack/src/com/android/jack/resource/ResourceImporter.java | 8 | ||||
-rw-r--r-- | sched/src/com/android/sched/util/codec/DirectoryInputVFSCodec.java | 62 | ||||
-rw-r--r-- | sched/src/com/android/sched/util/codec/InputVFSCodec.java | 2 |
6 files changed, 103 insertions, 55 deletions
diff --git a/jack/src/com/android/jack/Jack.java b/jack/src/com/android/jack/Jack.java index 5a394013..cbf96097 100644 --- a/jack/src/com/android/jack/Jack.java +++ b/jack/src/com/android/jack/Jack.java @@ -95,7 +95,6 @@ import com.android.jack.lookup.CommonTypes; import com.android.jack.lookup.JPhantomLookup; import com.android.jack.meta.LibraryMetaWriter; import com.android.jack.meta.MetaImporter; -import com.android.jack.meta.MetaReadingException; import com.android.jack.optimizations.ConstantRefinerAndVariableRemover; import com.android.jack.optimizations.DefUsesChainsSimplifier; import com.android.jack.optimizations.ExpressionSimplifier; @@ -260,18 +259,11 @@ import com.android.sched.util.config.ThreadConfig; import com.android.sched.util.config.id.BooleanPropertyId; import com.android.sched.util.config.id.ObjectId; import com.android.sched.util.config.id.ReflectFactoryPropertyId; -import com.android.sched.util.file.Directory; -import com.android.sched.util.file.FileOrDirectory.ChangePermission; -import com.android.sched.util.file.FileOrDirectory.Existence; -import com.android.sched.util.file.FileOrDirectory.Permission; import com.android.sched.util.log.Event; import com.android.sched.util.log.LoggerFactory; 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.DirectFS; -import com.android.sched.vfs.GenericInputVFS; -import com.android.sched.vfs.InputVFS; import com.android.sched.vfs.VFS; import com.android.sched.vfs.VFSToVFSWrapper; @@ -671,8 +663,11 @@ public abstract class Jack { Tracer tracer = TracerFactory.getTracer(); JSession session = getSession(); + + Config config = ThreadConfig.getConfig(); + try { - session.setInputFilter(ThreadConfig.get(Options.INPUT_FILTER).create(options, hooks)); + session.setInputFilter(config.get(Options.INPUT_FILTER).create(options, hooks)); } catch (RuntimeException e) { Throwable cause = e.getCause(); if (cause instanceof JackAbortException) { @@ -682,17 +677,12 @@ public abstract class Jack { } } - try { - getMetaImporter(options.metaImport, hooks).doImport(session); - } catch (MetaReadingException e) { - session.getReporter().report(Severity.FATAL, e); - throw new JackAbortException(e); - } + new MetaImporter(config.get(MetaImporter.IMPORTED_META)).doImport(session); List<InputJackLibrary> inputJackLibraries = new ArrayList<InputJackLibrary>(); for (InputLibrary library : session.getInputFilter().getImportedLibrary()) { if (library instanceof InputJackLibrary) { - addPackageLoaderForLibrary(session, ThreadConfig.get(IMPORT_POLICY), + addPackageLoaderForLibrary(session, config.get(IMPORT_POLICY), (InputJackLibrary) library); inputJackLibraries.add((InputJackLibrary) library); session.addImportedLibrary(library); @@ -702,7 +692,7 @@ public abstract class Jack { for (InputLibrary library : session.getInputFilter().getClasspath()) { if (library instanceof InputJackLibrary) { - addPackageLoaderForLibrary(session, ThreadConfig.get(CLASSPATH_POLICY), + addPackageLoaderForLibrary(session, config.get(CLASSPATH_POLICY), (InputJackLibrary) library); session.addLibraryOnClasspath(library); } @@ -731,7 +721,7 @@ public abstract class Jack { } try { - getResourceImporter(options.resImport, hooks).doImport(session); + new ResourceImporter(config.get(ResourceImporter.IMPORTED_RESOURCES)).doImport(session); } catch (ResourceReadingException e) { session.getReporter().report(Severity.FATAL, e); throw new JackAbortException(e); @@ -768,40 +758,6 @@ public abstract class Jack { return session; } - @Nonnull - private static ResourceImporter getResourceImporter(@Nonnull List<File> importedResources, - @Nonnull RunnableHooks hooks) throws ResourceReadingException { - List<InputVFS> resourceVDirs = new ArrayList<InputVFS>(); - for (File resourceDir : importedResources) { - try { - // Let's assume all of these are directories for now - InputVFS dir = new GenericInputVFS(new DirectFS(new Directory(resourceDir.getPath(), hooks, - Existence.MUST_EXIST, Permission.READ, ChangePermission.NOCHANGE), Permission.READ)); - resourceVDirs.add(dir); - } catch (IOException ioException) { - throw new ResourceReadingException(ioException); - } - } - return new ResourceImporter(resourceVDirs); - } - - @Nonnull - private static MetaImporter getMetaImporter(@Nonnull List<File> importedMetas, - @Nonnull RunnableHooks hooks) throws MetaReadingException { - List<InputVFS> metaVDirs = new ArrayList<InputVFS>(); - for (File metaDir : importedMetas) { - try { - // Let's assume all of these are directories for now - InputVFS dir = new GenericInputVFS(new DirectFS(new Directory(metaDir.getPath(), hooks, - Existence.MUST_EXIST, Permission.READ, ChangePermission.NOCHANGE), Permission.READ)); - metaVDirs.add(dir); - } catch (IOException ioException) { - throw new MetaReadingException(ioException); - } - } - return new MetaImporter(metaVDirs); - } - private static void addPackageLoaderForLibrary(JSession session, ReflectFactory<JaycePackageLoader> factory, InputJackLibrary inputJackLibrary) { if (inputJackLibrary.containsFileType(FileType.JAYCE)) { diff --git a/jack/src/com/android/jack/Options.java b/jack/src/com/android/jack/Options.java index 8298168b..5035f317 100644 --- a/jack/src/com/android/jack/Options.java +++ b/jack/src/com/android/jack/Options.java @@ -30,6 +30,8 @@ import com.android.jack.incremental.InputFilter; import com.android.jack.ir.ast.JMethod; import com.android.jack.library.InputJackLibrary; import com.android.jack.library.InputJackLibraryCodec; +import com.android.jack.meta.MetaImporter; +import com.android.jack.resource.ResourceImporter; import com.android.jack.shrob.obfuscation.MappingPrinter; import com.android.jack.shrob.obfuscation.NameProviderFactory; import com.android.jack.shrob.obfuscation.Renamer; @@ -267,12 +269,12 @@ public class Options { @Option(name = "--import-resource", usage = "import the given directory into the output as resource files (repeatable)", metaVar = "<DIRECTORY>") - protected List<File> resImport = new ArrayList<File>(); + private final List<File> resImport = new ArrayList<File>(); @Option(name = "--import-meta", usage = "import the given directory into the output as meta-files (repeatable)", metaVar = "<DIRECTORY>") - protected List<File> metaImport = new ArrayList<File>(); + private final List<File> metaImport = new ArrayList<File>(); /** * Keep generation close to dx. @@ -528,6 +530,16 @@ public class Options { configBuilder.setString(PackageRenamer.JARJAR_FILE, jarjarRulesFile.getPath()); } + if (!resImport.isEmpty()) { + configBuilder.setString(ResourceImporter.IMPORTED_RESOURCES, + Joiner.on(File.pathSeparator).join(resImport)); + } + + if (!metaImport.isEmpty()) { + configBuilder.setString(MetaImporter.IMPORTED_META, + Joiner.on(File.pathSeparator).join(metaImport)); + } + configBuilder.pushDefaultLocation(new StringLocation("proguard flags")); if (flags != null) { diff --git a/jack/src/com/android/jack/meta/MetaImporter.java b/jack/src/com/android/jack/meta/MetaImporter.java index fbcaae7e..da6eaf47 100644 --- a/jack/src/com/android/jack/meta/MetaImporter.java +++ b/jack/src/com/android/jack/meta/MetaImporter.java @@ -19,10 +19,14 @@ package com.android.jack.meta; import com.android.jack.ir.ast.JSession; import com.android.jack.resource.ResourceOrMetaImporter; import com.android.jack.resource.ResourceReadingException; +import com.android.sched.util.codec.DirectoryInputVFSCodec; +import com.android.sched.util.config.HasKeyId; +import com.android.sched.util.config.id.ListPropertyId; import com.android.sched.vfs.InputVFS; import com.android.sched.vfs.InputVFile; import com.android.sched.vfs.VPath; +import java.util.Collections; import java.util.List; import javax.annotation.Nonnull; @@ -30,8 +34,14 @@ import javax.annotation.Nonnull; /** * Imports metas. */ +@HasKeyId public class MetaImporter extends ResourceOrMetaImporter { + @Nonnull + public static final ListPropertyId<InputVFS> IMPORTED_META = ListPropertyId.create( + "jack.import.meta", "Meta to import", "dir", + new DirectoryInputVFSCodec()).addDefaultValue(Collections.<InputVFS>emptyList()); + public MetaImporter(@Nonnull List<InputVFS> metaDirs) { super(metaDirs); } diff --git a/jack/src/com/android/jack/resource/ResourceImporter.java b/jack/src/com/android/jack/resource/ResourceImporter.java index df91104b..a44efb7b 100644 --- a/jack/src/com/android/jack/resource/ResourceImporter.java +++ b/jack/src/com/android/jack/resource/ResourceImporter.java @@ -20,14 +20,17 @@ import com.android.jack.backend.jayce.JayceFileImporter.CollisionPolicy; import com.android.jack.config.id.Arzon; import com.android.jack.ir.ast.JSession; import com.android.jack.ir.ast.Resource; +import com.android.sched.util.codec.DirectoryInputVFSCodec; import com.android.sched.util.codec.EnumCodec; import com.android.sched.util.config.HasKeyId; import com.android.sched.util.config.ThreadConfig; +import com.android.sched.util.config.id.ListPropertyId; import com.android.sched.util.config.id.PropertyId; import com.android.sched.vfs.InputVFS; import com.android.sched.vfs.InputVFile; import com.android.sched.vfs.VPath; +import java.util.Collections; import java.util.List; import java.util.logging.Level; @@ -47,6 +50,11 @@ public class ResourceImporter extends ResourceOrMetaImporter { .addDefaultValue(CollisionPolicy.FAIL).withCategory(Arzon.get()); @Nonnull + public static final ListPropertyId<InputVFS> IMPORTED_RESOURCES = ListPropertyId.create( + "jack.import.resource", "Resources to import", "dir", + new DirectoryInputVFSCodec()).addDefaultValue(Collections.<InputVFS>emptyList()); + + @Nonnull private final CollisionPolicy resourceCollisionPolicy = ThreadConfig.get(RESOURCE_COLLISION_POLICY); diff --git a/sched/src/com/android/sched/util/codec/DirectoryInputVFSCodec.java b/sched/src/com/android/sched/util/codec/DirectoryInputVFSCodec.java new file mode 100644 index 00000000..e2904485 --- /dev/null +++ b/sched/src/com/android/sched/util/codec/DirectoryInputVFSCodec.java @@ -0,0 +1,62 @@ +/* + * Copyright (C) 2015 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.sched.util.codec; + + +import com.android.sched.util.file.Directory; +import com.android.sched.util.file.FileOrDirectory.Existence; +import com.android.sched.util.file.FileOrDirectory.Permission; +import com.android.sched.util.log.LoggerFactory; +import com.android.sched.vfs.DirectFS; +import com.android.sched.vfs.GenericInputVFS; +import com.android.sched.vfs.InputVFS; +import com.android.sched.vfs.VFS; + +import java.io.IOException; +import java.util.logging.Logger; + +import javax.annotation.Nonnull; + +/** + * This {@link StringCodec} is used to create an instance of {@link InputVFS} + * to directories. + */ +public class DirectoryInputVFSCodec extends InputVFSCodec + implements StringCodec<InputVFS> { + + @Nonnull + private final Logger logger = LoggerFactory.getLogger(); + + @Override + @Nonnull + public String getUsage() { + return "a path to a directory (" + getUsageDetails() + ")"; + } + + @Override + @Nonnull + public InputVFS checkString(@Nonnull CodecContext context, @Nonnull final String string) + throws ParsingException { + try { + VFS vfs = new DirectFS(new Directory(string, context.getRunnableHooks(), + Existence.MUST_EXIST, Permission.READ, change), Permission.READ); + return new GenericInputVFS(vfs); + } catch (IOException e) { + throw new ParsingException(e.getMessage(), e); + } + } +} diff --git a/sched/src/com/android/sched/util/codec/InputVFSCodec.java b/sched/src/com/android/sched/util/codec/InputVFSCodec.java index f0588d09..4406450b 100644 --- a/sched/src/com/android/sched/util/codec/InputVFSCodec.java +++ b/sched/src/com/android/sched/util/codec/InputVFSCodec.java @@ -69,7 +69,7 @@ public class InputVFSCodec extends FileOrDirCodec @Override @Nonnull public String getUsage() { - return "a path to an input directory or zip archive (" + getUsageDetails() + ")"; + return "a path to a directory or zip archive (" + getUsageDetails() + ")"; } @Override |