summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--dx/src/com/android/dx/cf/direct/ClassPathOpener.java34
-rw-r--r--dx/src/com/android/dx/command/DxConsole.java13
-rw-r--r--dx/src/com/android/dx/command/Main.java2
-rw-r--r--dx/src/com/android/dx/command/dexer/Main.java12
4 files changed, 42 insertions, 19 deletions
diff --git a/dx/src/com/android/dx/cf/direct/ClassPathOpener.java b/dx/src/com/android/dx/cf/direct/ClassPathOpener.java
index c9fe275cd..26fbca029 100644
--- a/dx/src/com/android/dx/cf/direct/ClassPathOpener.java
+++ b/dx/src/com/android/dx/cf/direct/ClassPathOpener.java
@@ -242,9 +242,6 @@ public class ClassPathOpener {
*/
private boolean processArchive(File file) throws IOException {
ZipFile zip = new ZipFile(file);
- ByteArrayOutputStream baos = new ByteArrayOutputStream(40000);
- byte[] buf = new byte[20000];
- boolean any = false;
ArrayList<? extends java.util.zip.ZipEntry> entriesList
= Collections.list(zip.entries());
@@ -259,28 +256,31 @@ public class ClassPathOpener {
consumer.onProcessArchiveStart(file);
+ ByteArrayOutputStream baos = new ByteArrayOutputStream(40000);
+ byte[] buf = new byte[20000];
+ boolean any = false;
+
for (ZipEntry one : entriesList) {
- if (one.isDirectory()) {
- continue;
- }
+ final boolean isDirectory = one.isDirectory();
String path = one.getName();
if (filter.accept(path)) {
- InputStream in = zip.getInputStream(one);
-
- baos.reset();
- for (;;) {
- int amt = in.read(buf);
- if (amt < 0) {
- break;
+ final byte[] bytes;
+ if (!isDirectory) {
+ InputStream in = zip.getInputStream(one);
+
+ baos.reset();
+ int read;
+ while ((read = in.read(buf)) != -1) {
+ baos.write(buf, 0, read);
}
- baos.write(buf, 0, amt);
+ in.close();
+ bytes = baos.toByteArray();
+ } else {
+ bytes = new byte[0];
}
- in.close();
-
- byte[] bytes = baos.toByteArray();
any |= consumer.processFileBytes(path, one.getTime(), bytes);
}
}
diff --git a/dx/src/com/android/dx/command/DxConsole.java b/dx/src/com/android/dx/command/DxConsole.java
index 9ce9836ef..919de8c80 100644
--- a/dx/src/com/android/dx/command/DxConsole.java
+++ b/dx/src/com/android/dx/command/DxConsole.java
@@ -16,6 +16,8 @@
package com.android.dx.command;
+import java.io.IOException;
+import java.io.OutputStream;
import java.io.PrintStream;
/**
@@ -34,4 +36,15 @@ public class DxConsole {
* Error output stream. Links to {@code System.err} by default.
*/
public static PrintStream err = System.err;
+
+ /**
+ * Output stream which prints to nowhere.
+ */
+ public static final PrintStream noop = new PrintStream(new OutputStream() {
+
+ @Override
+ public void write(int b) throws IOException {
+ // noop
+ }
+ });
}
diff --git a/dx/src/com/android/dx/command/Main.java b/dx/src/com/android/dx/command/Main.java
index 9834987e5..a0be5bd51 100644
--- a/dx/src/com/android/dx/command/Main.java
+++ b/dx/src/com/android/dx/command/Main.java
@@ -33,7 +33,7 @@ public class Main {
"[--dump-width=<n>]\n" +
" [--dump-method=<name>[*]] [--verbose-dump] [--no-files] " +
"[--core-library]\n" +
- " [--num-threads=<n>] [--incremental] [--force-jumbo]\n" +
+ " [--num-threads=<n>] [--incremental] [--force-jumbo] [--no-warning]\n" +
" [--multi-dex [--main-dex-list=<file> [--minimal-main-dex]]\n" +
" [--input-list=<file>]\n" +
" [<file>.class | <file>.{zip,jar,apk} | <directory>] ...\n" +
diff --git a/dx/src/com/android/dx/command/dexer/Main.java b/dx/src/com/android/dx/command/dexer/Main.java
index 84baa935b..06ffcedef 100644
--- a/dx/src/com/android/dx/command/dexer/Main.java
+++ b/dx/src/com/android/dx/command/dexer/Main.java
@@ -1204,6 +1204,9 @@ public class Main {
/** whether to run in debug mode */
public boolean debug = false;
+ /** whether to emit warning messages */
+ public boolean warnings = true;
+
/** whether to emit high-level verbose human-oriented output */
public boolean verbose = false;
@@ -1414,6 +1417,8 @@ public class Main {
while(parser.getNext()) {
if (parser.isArg("--debug")) {
debug = true;
+ } else if (parser.isArg("--no-warning")) {
+ warnings = false;
} else if (parser.isArg("--verbose")) {
verbose = true;
} else if (parser.isArg("--verbose-dump")) {
@@ -1585,7 +1590,12 @@ public class Main {
cfOptions.optimizeListFile = optimizeListFile;
cfOptions.dontOptimizeListFile = dontOptimizeListFile;
cfOptions.statistics = statistics;
- cfOptions.warn = DxConsole.err;
+
+ if (warnings) {
+ cfOptions.warn = DxConsole.err;
+ } else {
+ cfOptions.warn = DxConsole.noop;
+ }
dexOptions = new DexOptions();
dexOptions.forceJumbo = forceJumbo;