Merge "Consider declared member descriptors as direct ref" into nyc-dev
diff --git a/dx/src/com/android/dx/Version.java b/dx/src/com/android/dx/Version.java
index 1e15d55..0e77941 100644
--- a/dx/src/com/android/dx/Version.java
+++ b/dx/src/com/android/dx/Version.java
@@ -21,5 +21,5 @@
  */
 public class Version {
     /** {@code non-null;} version string */
-    public static final String VERSION = "1.11";
+    public static final String VERSION = "1.12";
 }
diff --git a/dx/src/com/android/dx/command/dexer/Main.java b/dx/src/com/android/dx/command/dexer/Main.java
index e7c63b8..e42eb54 100644
--- a/dx/src/com/android/dx/command/dexer/Main.java
+++ b/dx/src/com/android/dx/command/dexer/Main.java
@@ -753,6 +753,9 @@
         try {
             new DirectClassFileConsumer(name, bytes, null).call(
                     new ClassParserTask(name, bytes).call());
+        } catch (ParseException ex) {
+            // handled in FileBytesConsumer
+            throw ex;
         } catch(Exception ex) {
             throw new RuntimeException("Exception parsing classes", ex);
         }
@@ -1658,6 +1661,14 @@
                 DxConsole.err.println("\nEXCEPTION FROM SIMULATION:");
                 DxConsole.err.println(ex.getMessage() + "\n");
                 DxConsole.err.println(((SimException) ex).getContext());
+            } else if (ex instanceof ParseException) {
+                DxConsole.err.println("\nPARSE ERROR:");
+                ParseException parseException = (ParseException) ex;
+                if (args.debug) {
+                    parseException.printStackTrace(DxConsole.err);
+                } else {
+                    parseException.printContext(DxConsole.err);
+                }
             } else {
                 DxConsole.err.println("\nUNEXPECTED TOP-LEVEL EXCEPTION:");
                 ex.printStackTrace(DxConsole.err);