summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--jack/src/com/android/jack/Jack.java60
-rw-r--r--jack/src/com/android/jack/Options.java16
-rw-r--r--jack/src/com/android/jack/meta/MetaImporter.java10
-rw-r--r--jack/src/com/android/jack/resource/ResourceImporter.java8
-rw-r--r--sched/src/com/android/sched/util/codec/DirectoryInputVFSCodec.java62
-rw-r--r--sched/src/com/android/sched/util/codec/InputVFSCodec.java2
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