summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYohann Roussel <yroussel@google.com>2015-02-26 12:12:29 +0100
committerYohann Roussel <yroussel@google.com>2015-03-09 11:51:13 +0100
commit20ef3af418a5acd49b202a5b9441127689a79508 (patch)
tree04559091d8f59dfe21ec3bf526e11bc85c4b124e
parent333ae04259121a4e8de25236509a658a347071ab (diff)
downloadtoolchain_jack-20ef3af418a5acd49b202a5b9441127689a79508.zip
toolchain_jack-20ef3af418a5acd49b202a5b9441127689a79508.tar.gz
toolchain_jack-20ef3af418a5acd49b202a5b9441127689a79508.tar.bz2
Handle input sources as a property
Change-Id: I91e3c26270f821741fa79f3d972e5b1454b00b0e
-rw-r--r--jack-tests/tests/com/android/jack/error/FileAccessErrorTest.java2
-rw-r--r--jack/src/com/android/jack/Jack.java11
-rw-r--r--jack/src/com/android/jack/Options.java24
-rw-r--r--jack/src/com/android/jack/frontend/java/JackBatchCompiler.java3
-rw-r--r--jack/src/com/android/jack/incremental/CommonFilter.java11
-rw-r--r--sched/src/com/android/sched/util/codec/DirectFSCodec.java2
-rw-r--r--sched/src/com/android/sched/util/codec/DirectoryCodec.java3
-rw-r--r--sched/src/com/android/sched/util/codec/FileOrDirCodec.java4
-rw-r--r--sched/src/com/android/sched/util/codec/InputOutputVFSCodec.java3
-rw-r--r--sched/src/com/android/sched/util/codec/InputStreamCodec.java3
-rw-r--r--sched/src/com/android/sched/util/codec/InputStreamOrDirectoryCodec.java40
-rw-r--r--sched/src/com/android/sched/util/codec/InputVFSCodec.java3
-rw-r--r--sched/src/com/android/sched/util/codec/OutputStreamCodec.java3
-rw-r--r--sched/src/com/android/sched/util/codec/OutputVFSCodec.java2
-rw-r--r--sched/src/com/android/sched/util/codec/StreamCodec.java3
-rw-r--r--sched/src/com/android/sched/util/codec/ZipFSCodec.java2
16 files changed, 82 insertions, 37 deletions
diff --git a/jack-tests/tests/com/android/jack/error/FileAccessErrorTest.java b/jack-tests/tests/com/android/jack/error/FileAccessErrorTest.java
index 7f8a360..1d52052 100644
--- a/jack-tests/tests/com/android/jack/error/FileAccessErrorTest.java
+++ b/jack-tests/tests/com/android/jack/error/FileAccessErrorTest.java
@@ -226,7 +226,7 @@ public class FileAccessErrorTest {
new File(te.getSourceFolder(), "A.java"));
Assert.fail();
- } catch (JackUserException e) {
+ } catch (PropertyIdException e) {
// Failure is ok since source file is not readable
Assert.assertTrue(e.getMessage().contains("A.java"));
Assert.assertTrue(e.getMessage().contains("does not exist"));
diff --git a/jack/src/com/android/jack/Jack.java b/jack/src/com/android/jack/Jack.java
index 963e6b9..70ef653 100644
--- a/jack/src/com/android/jack/Jack.java
+++ b/jack/src/com/android/jack/Jack.java
@@ -275,6 +275,7 @@ import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
+import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -712,14 +713,18 @@ public abstract class Jack {
}
}
-
- if (options.inputSources != null) {
+ Set<String> fileNamesToCompile = session.getInputFilter().getFileNamesToCompile();
+ if (!fileNamesToCompile.isEmpty()) {
JackBatchCompiler jbc = new JackBatchCompiler(session);
Event event = tracer.start(JackEventType.ECJ_COMPILATION);
- List<String> ecjArguments = options.getEcjArguments();
+ List<String> ecjExtraArguments = options.getEcjExtraArguments();
+ List<String> ecjArguments = new ArrayList<String>(
+ ecjExtraArguments.size() + fileNamesToCompile.size());
+ ecjArguments.addAll(ecjExtraArguments);
+ ecjArguments.addAll(fileNamesToCompile);
try {
if (!jbc.compile(ecjArguments.toArray(new String[ecjArguments.size()]))) {
diff --git a/jack/src/com/android/jack/Options.java b/jack/src/com/android/jack/Options.java
index 1d8cc01..5ed5104 100644
--- a/jack/src/com/android/jack/Options.java
+++ b/jack/src/com/android/jack/Options.java
@@ -44,6 +44,7 @@ import com.android.jack.util.filter.Filter;
import com.android.sched.util.RunnableHooks;
import com.android.sched.util.codec.DirectDirOutputVFSCodec;
import com.android.sched.util.codec.DirectFSCodec;
+import com.android.sched.util.codec.InputStreamOrDirectoryCodec;
import com.android.sched.util.codec.ZipFSCodec;
import com.android.sched.util.codec.ZipOutputVFSCodec;
import com.android.sched.util.config.Config;
@@ -60,6 +61,7 @@ import com.android.sched.util.config.id.ObjectId;
import com.android.sched.util.config.id.PropertyId;
import com.android.sched.util.config.id.ReflectFactoryPropertyId;
import com.android.sched.util.file.Directory;
+import com.android.sched.util.file.FileOrDirectory;
import com.android.sched.util.file.FileOrDirectory.ChangePermission;
import com.android.sched.util.file.FileOrDirectory.Existence;
import com.android.sched.util.file.FileOrDirectory.Permission;
@@ -309,6 +311,12 @@ public class Options {
protected List<File> inputSources;
@Nonnull
+ public static final ListPropertyId<FileOrDirectory> SOURCES = ListPropertyId.create(
+ "jack.source", "Sources to compile", "file-or-dir", new InputStreamOrDirectoryCodec())
+ .on(File.pathSeparator)
+ .addDefaultValue(Collections.<FileOrDirectory>emptyList());
+
+ @Nonnull
private List<String> ecjExtraArguments = new ArrayList<String>();
@Option(name = "-g", usage = "emit debug infos")
@@ -523,6 +531,10 @@ public class Options {
Joiner.on(File.pathSeparator).join(metaImport));
}
+ if (inputSources != null && !inputSources.isEmpty()) {
+ configBuilder.setString(SOURCES, Joiner.on(File.pathSeparator).join(inputSources));
+ }
+
configBuilder.pushDefaultLocation(new StringLocation("proguard flags"));
if (flags != null) {
@@ -835,16 +847,8 @@ public class Options {
}
@Nonnull
- public List<String> getEcjArguments() {
- if (inputSources == null) {
- return ecjExtraArguments;
- }
-
- ArrayList<String> list = new ArrayList<String>(ecjExtraArguments);
- for (File input : inputSources) {
- list.add(input.getPath());
- }
- return list;
+ List<String> getEcjExtraArguments() {
+ return ecjExtraArguments;
}
public void setProguardFlagsFile(@Nonnull List<File> proguardFlagsFiles) {
diff --git a/jack/src/com/android/jack/frontend/java/JackBatchCompiler.java b/jack/src/com/android/jack/frontend/java/JackBatchCompiler.java
index 0106851..424a7c3 100644
--- a/jack/src/com/android/jack/frontend/java/JackBatchCompiler.java
+++ b/jack/src/com/android/jack/frontend/java/JackBatchCompiler.java
@@ -40,7 +40,6 @@ import java.io.File;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Map;
-import java.util.Set;
import java.util.logging.Level;
import javax.annotation.Nonnull;
@@ -236,8 +235,6 @@ public class JackBatchCompiler extends Main {
super.configure(argv);
checkedClasspaths = new FileSystem.Classpath[] {
new JAstClasspath("<jack-logical-entry>", session.getLookup(), null)};
- Set<String> fileNamesToCompile = session.getInputFilter().getFileNamesToCompile();
- filenames = fileNamesToCompile.toArray(new String[fileNamesToCompile.size()]);
}
@SuppressWarnings("rawtypes")
diff --git a/jack/src/com/android/jack/incremental/CommonFilter.java b/jack/src/com/android/jack/incremental/CommonFilter.java
index 390ff76..f4145c2 100644
--- a/jack/src/com/android/jack/incremental/CommonFilter.java
+++ b/jack/src/com/android/jack/incremental/CommonFilter.java
@@ -28,8 +28,10 @@ import com.android.jack.reporting.Reportable;
import com.android.jack.reporting.ReportableException;
import com.android.jack.reporting.Reporter.Severity;
import com.android.sched.util.RunnableHooks;
+import com.android.sched.util.config.Config;
import com.android.sched.util.config.ThreadConfig;
import com.android.sched.util.file.Directory;
+import com.android.sched.util.file.FileOrDirectory;
import com.android.sched.util.file.FileOrDirectory.ChangePermission;
import com.android.sched.util.file.FileOrDirectory.Existence;
import com.android.sched.util.file.FileOrDirectory.Permission;
@@ -89,13 +91,14 @@ public abstract class CommonFilter {
@Nonnull
protected Set<String> getJavaFileNamesSpecifiedOnCommandLine(@Nonnull Options options) {
+ Config config = options.getConfig();
final String extension = ".java";
Set<String> javaFileNames = new HashSet<String>();
- for (File file : options.getInputSources()) {
- if (file.isDirectory()) {
- fillFiles(file, extension, javaFileNames);
- } else if (file.getName().endsWith(extension)) {
+ for (FileOrDirectory file : config.get(Options.SOURCES)) {
+ if (file instanceof Directory) {
+ fillFiles(new File(file.getPath()), extension, javaFileNames);
+ } else if (file.getPath().endsWith(extension)) {
javaFileNames.add(file.getPath());
}
}
diff --git a/sched/src/com/android/sched/util/codec/DirectFSCodec.java b/sched/src/com/android/sched/util/codec/DirectFSCodec.java
index 78a69a7..7b6ab63 100644
--- a/sched/src/com/android/sched/util/codec/DirectFSCodec.java
+++ b/sched/src/com/android/sched/util/codec/DirectFSCodec.java
@@ -33,7 +33,7 @@ import javax.annotation.Nonnull;
* This {@link StringCodec} is used to create an instance of {@link VFS} backed by a
* filesystem directory.
*/
-public class DirectFSCodec extends FileOrDirCodec implements StringCodec<VFS> {
+public class DirectFSCodec extends FileOrDirCodec<VFS> {
public DirectFSCodec() {
super(Existence.MUST_EXIST, Permission.READ | Permission.WRITE);
diff --git a/sched/src/com/android/sched/util/codec/DirectoryCodec.java b/sched/src/com/android/sched/util/codec/DirectoryCodec.java
index 0f48754..da7505e 100644
--- a/sched/src/com/android/sched/util/codec/DirectoryCodec.java
+++ b/sched/src/com/android/sched/util/codec/DirectoryCodec.java
@@ -30,8 +30,7 @@ import javax.annotation.Nonnull;
/**
* This {@link StringCodec} is used to create an instance of {@link Directory}.
*/
-public class DirectoryCodec extends FileOrDirCodec
- implements StringCodec<Directory> {
+public class DirectoryCodec extends FileOrDirCodec<Directory> {
public DirectoryCodec(@Nonnull Existence existence, int permissions) {
super(existence, permissions);
diff --git a/sched/src/com/android/sched/util/codec/FileOrDirCodec.java b/sched/src/com/android/sched/util/codec/FileOrDirCodec.java
index 84f8082..b1ce9c5 100644
--- a/sched/src/com/android/sched/util/codec/FileOrDirCodec.java
+++ b/sched/src/com/android/sched/util/codec/FileOrDirCodec.java
@@ -16,7 +16,6 @@
package com.android.sched.util.codec;
-import com.android.sched.util.codec.Parser.ValueDescription;
import com.android.sched.util.file.FileOrDirectory.ChangePermission;
import com.android.sched.util.file.FileOrDirectory.Existence;
import com.android.sched.util.file.FileOrDirectory.Permission;
@@ -29,7 +28,7 @@ import javax.annotation.Nonnull;
/**
* Abstract class for a File or Directory {@link StringCodec}.
*/
-public abstract class FileOrDirCodec {
+public abstract class FileOrDirCodec<T> implements StringCodec<T> {
@Nonnull
protected ChangePermission change = ChangePermission.NOCHANGE;
protected final int permissions;
@@ -102,6 +101,7 @@ public abstract class FileOrDirCodec {
return sb.toString();
}
+ @Override
@Nonnull
public List<ValueDescription> getValueDescriptions() {
return Collections.<ValueDescription> emptyList();
diff --git a/sched/src/com/android/sched/util/codec/InputOutputVFSCodec.java b/sched/src/com/android/sched/util/codec/InputOutputVFSCodec.java
index 2720ff3..d99a281 100644
--- a/sched/src/com/android/sched/util/codec/InputOutputVFSCodec.java
+++ b/sched/src/com/android/sched/util/codec/InputOutputVFSCodec.java
@@ -28,8 +28,7 @@ import javax.annotation.Nonnull;
/**
* This {@link StringCodec} is used to create an instance of {@link InputOutputVFS}.
*/
-abstract class InputOutputVFSCodec extends FileOrDirCodec
- implements StringCodec<InputOutputVFS> {
+abstract class InputOutputVFSCodec extends FileOrDirCodec<InputOutputVFS> {
public InputOutputVFSCodec(@Nonnull Existence existence) {
super(existence, Permission.READ | Permission.WRITE);
diff --git a/sched/src/com/android/sched/util/codec/InputStreamCodec.java b/sched/src/com/android/sched/util/codec/InputStreamCodec.java
index de5c3fc..d0159d2 100644
--- a/sched/src/com/android/sched/util/codec/InputStreamCodec.java
+++ b/sched/src/com/android/sched/util/codec/InputStreamCodec.java
@@ -30,8 +30,7 @@ import javax.annotation.Nonnull;
/**
* This {@link InputStreamCodec} is used to create an instance of {@link InputStreamFile}.
*/
-public class InputStreamCodec extends StreamCodec
- implements StringCodec<InputStreamFile> {
+public class InputStreamCodec extends StreamCodec<InputStreamFile> {
public InputStreamCodec() {
super(Existence.MUST_EXIST, Permission.READ);
}
diff --git a/sched/src/com/android/sched/util/codec/InputStreamOrDirectoryCodec.java b/sched/src/com/android/sched/util/codec/InputStreamOrDirectoryCodec.java
new file mode 100644
index 0000000..da77bb2
--- /dev/null
+++ b/sched/src/com/android/sched/util/codec/InputStreamOrDirectoryCodec.java
@@ -0,0 +1,40 @@
+/*
+ * 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.FileOrDirectory;
+import com.android.sched.util.file.FileOrDirectory.Existence;
+import com.android.sched.util.file.FileOrDirectory.Permission;
+
+import javax.annotation.Nonnull;
+
+/**
+ * This {@link StringCodec} is used to create an instance of {@link FileOrDirectory}.
+ * The file or directory must exists and be readable.
+ */
+public class InputStreamOrDirectoryCodec extends OrCodec<FileOrDirectory> {
+ @SuppressWarnings("unchecked")
+ public InputStreamOrDirectoryCodec() {
+ super(new InputStreamCodec(), new DirectoryCodec(Existence.MUST_EXIST, Permission.READ));
+ }
+
+ @Override
+ @Nonnull
+ public String formatValue(FileOrDirectory data) {
+ return data.getPath();
+ }
+} \ No newline at end of file
diff --git a/sched/src/com/android/sched/util/codec/InputVFSCodec.java b/sched/src/com/android/sched/util/codec/InputVFSCodec.java
index 4406450..4cb6fc1 100644
--- a/sched/src/com/android/sched/util/codec/InputVFSCodec.java
+++ b/sched/src/com/android/sched/util/codec/InputVFSCodec.java
@@ -40,8 +40,7 @@ import javax.annotation.Nonnull;
/**
* This {@link StringCodec} is used to create an instance of {@link InputVFS}.
*/
-public class InputVFSCodec extends FileOrDirCodec
- implements StringCodec<InputVFS> {
+public class InputVFSCodec extends FileOrDirCodec<InputVFS> {
@Nonnull
private final Logger logger = LoggerFactory.getLogger();
diff --git a/sched/src/com/android/sched/util/codec/OutputStreamCodec.java b/sched/src/com/android/sched/util/codec/OutputStreamCodec.java
index c642f7d..3a8a4a2 100644
--- a/sched/src/com/android/sched/util/codec/OutputStreamCodec.java
+++ b/sched/src/com/android/sched/util/codec/OutputStreamCodec.java
@@ -31,8 +31,7 @@ import javax.annotation.Nonnull;
/**
* This {@link OutputStreamCodec} is used to create an instance of {@link OutputStreamFile}.
*/
-public class OutputStreamCodec extends StreamCodec
- implements StringCodec<OutputStreamFile> {
+public class OutputStreamCodec extends StreamCodec<OutputStreamFile> {
private boolean append = false;
public OutputStreamCodec(@Nonnull Existence existence) {
diff --git a/sched/src/com/android/sched/util/codec/OutputVFSCodec.java b/sched/src/com/android/sched/util/codec/OutputVFSCodec.java
index 735170e..ab52156 100644
--- a/sched/src/com/android/sched/util/codec/OutputVFSCodec.java
+++ b/sched/src/com/android/sched/util/codec/OutputVFSCodec.java
@@ -28,7 +28,7 @@ import javax.annotation.Nonnull;
/**
* This {@link StringCodec} is used to create an instance of {@link OutputVFS}.
*/
-abstract class OutputVFSCodec extends FileOrDirCodec implements StringCodec<OutputVFS> {
+abstract class OutputVFSCodec extends FileOrDirCodec<OutputVFS> {
public OutputVFSCodec(@Nonnull Existence existence) {
super(existence, Permission.READ | Permission.WRITE);
diff --git a/sched/src/com/android/sched/util/codec/StreamCodec.java b/sched/src/com/android/sched/util/codec/StreamCodec.java
index 4708796..788fa48 100644
--- a/sched/src/com/android/sched/util/codec/StreamCodec.java
+++ b/sched/src/com/android/sched/util/codec/StreamCodec.java
@@ -26,7 +26,7 @@ import javax.annotation.Nonnull;
* This {@link StringCodec} is used to help the creation of an instance inherited from
* {@link StreamFile}.
*/
-public abstract class StreamCodec extends FileOrDirCodec {
+public abstract class StreamCodec<T> extends FileOrDirCodec<T> {
@Nonnull
protected static final String STANDARD_IO_NAME = "-";
@Nonnull
@@ -42,6 +42,7 @@ public abstract class StreamCodec extends FileOrDirCodec {
((permissions & Permission.WRITE) != 0);
}
+ @Override
@Nonnull
public String getUsage() {
StringBuilder sb = new StringBuilder();
diff --git a/sched/src/com/android/sched/util/codec/ZipFSCodec.java b/sched/src/com/android/sched/util/codec/ZipFSCodec.java
index 035a2e4..4aedfc3 100644
--- a/sched/src/com/android/sched/util/codec/ZipFSCodec.java
+++ b/sched/src/com/android/sched/util/codec/ZipFSCodec.java
@@ -34,7 +34,7 @@ import javax.annotation.Nonnull;
* This {@link StringCodec} is used to create an instance of {@link VFS} backed by a
* filesystem directory, which is then zipped when closed.
*/
-public class ZipFSCodec extends FileOrDirCodec implements StringCodec<VFS> {
+public class ZipFSCodec extends FileOrDirCodec<VFS> {
public ZipFSCodec(@Nonnull Existence existence) {
super(existence, Permission.READ | Permission.WRITE);