diff --git a/build/Android.common.mk b/build/Android.common.mk
index 28ac65b..8191b43 100644
--- a/build/Android.common.mk
+++ b/build/Android.common.mk
@@ -145,7 +145,6 @@
 	src/java_lang_reflect_Method.cc \
 	src/java_lang_reflect_Proxy.cc \
 	src/java_util_concurrent_atomic_AtomicLong.cc \
-	src/jdwp/jdwp_constants.cc \
 	src/jdwp/jdwp_event.cc \
 	src/jdwp/jdwp_expand_buf.cc \
 	src/jdwp/jdwp_handler.cc \
@@ -268,9 +267,12 @@
 endif # HOST_ARCH != x86
 
 LIBART_ENUM_OPERATOR_OUT_HEADER_FILES := \
+	src/dex_verifier.h \
 	src/indirect_reference_table.h \
 	src/instruction_set.h \
 	src/invoke_type.h \
+	src/jdwp/jdwp.h \
+	src/jdwp/jdwp_constants.h \
 	src/mutex.h
 
 LIBARTTEST_COMMON_SRC_FILES := \
diff --git a/jdwpspy/Android.mk b/jdwpspy/Android.mk
index 60ccb38..a6c2f64 100644
--- a/jdwpspy/Android.mk
+++ b/jdwpspy/Android.mk
@@ -5,8 +5,7 @@
 
 LOCAL_SRC_FILES:= \
 	Main.cpp \
-	Net.cpp \
-	find_JdwpConstants.cpp
+	Net.cpp
 
 LOCAL_C_INCLUDES += \
 	art/src
@@ -14,4 +13,3 @@
 LOCAL_MODULE := jdwpspy
 
 include $(BUILD_HOST_EXECUTABLE)
-
diff --git a/jdwpspy/Net.cpp b/jdwpspy/Net.cpp
index abcae21..55515f1 100644
--- a/jdwpspy/Net.cpp
+++ b/jdwpspy/Net.cpp
@@ -510,7 +510,7 @@
         printf("%s   --> %s\n", prefix, getCommandName(cmdSet, cmd));
     } else {
         std::ostringstream ss;
-        ss << error;
+        ss << "TODO"; // get access to the operator<<, or regenerate it for jdwpspy?
         printf("%s REPLY   dataLen=%-5u id=0x%08x flags=0x%02x err=%d (%s) [%02d:%02d]\n",
             prefix, dataLen, id, flags, error, ss.str().c_str(), min,sec);
     }
diff --git a/jdwpspy/find_JdwpConstants.cpp b/jdwpspy/find_JdwpConstants.cpp
deleted file mode 100644
index d035d2e..0000000
--- a/jdwpspy/find_JdwpConstants.cpp
+++ /dev/null
@@ -1 +0,0 @@
-#include "jdwp/jdwp_constants.cc"
diff --git a/src/dex_verifier.cc b/src/dex_verifier.cc
index 987777c..f02379c 100644
--- a/src/dex_verifier.cc
+++ b/src/dex_verifier.cc
@@ -43,26 +43,6 @@
 
 static const bool gDebugVerify = false;
 
-std::ostream& operator<<(std::ostream& os, const VerifyError& rhs) {
-  switch (rhs) {
-  case VERIFY_ERROR_NONE: os << "VERIFY_ERROR_NONE"; break;
-  case VERIFY_ERROR_BAD_CLASS_HARD: os << "VERIFY_ERROR_BAD_CLASS_HARD"; break;
-  case VERIFY_ERROR_BAD_CLASS_SOFT: os << "VERIFY_ERROR_BAD_CLASS_SOFT"; break;
-  case VERIFY_ERROR_NO_CLASS: os << "VERIFY_ERROR_NO_CLASS"; break;
-  case VERIFY_ERROR_NO_FIELD: os << "VERIFY_ERROR_NO_FIELD"; break;
-  case VERIFY_ERROR_NO_METHOD: os << "VERIFY_ERROR_NO_METHOD"; break;
-  case VERIFY_ERROR_ACCESS_CLASS: os << "VERIFY_ERROR_ACCESS_CLASS"; break;
-  case VERIFY_ERROR_ACCESS_FIELD: os << "VERIFY_ERROR_ACCESS_FIELD"; break;
-  case VERIFY_ERROR_ACCESS_METHOD: os << "VERIFY_ERROR_ACCESS_METHOD"; break;
-  case VERIFY_ERROR_CLASS_CHANGE: os << "VERIFY_ERROR_CLASS_CHANGE"; break;
-  case VERIFY_ERROR_INSTANTIATION: os << "VERIFY_ERROR_INSTANTIATION"; break;
-  default:
-    os << "VerifyError[" << static_cast<int>(rhs) << "]";
-    break;
-  }
-  return os;
-}
-
 static const char* type_strings[] = {
     "Unknown",
     "Conflict",
@@ -1681,8 +1661,7 @@
                  << " insns_size=" << insns_size << ")";
   }
   /* Create and initialize table holding register status */
-  reg_table_.Init(PcToRegisterLineTable::kTrackRegsGcPoints, insn_flags_.get(), insns_size,
-                  registers_size, this);
+  reg_table_.Init(kTrackRegsGcPoints, insn_flags_.get(), insns_size, registers_size, this);
 
   work_line_.reset(new RegisterLine(registers_size, this));
   saved_line_.reset(new RegisterLine(registers_size, this));
diff --git a/src/dex_verifier.h b/src/dex_verifier.h
index ee36f53..ce6963d 100644
--- a/src/dex_verifier.h
+++ b/src/dex_verifier.h
@@ -39,7 +39,7 @@
 #if defined(ART_USE_LLVM_COMPILER)
 namespace compiler_llvm {
   class InferredRegCategoryMap;
-}
+}  // namespace compiler_llvm
 #endif
 
 namespace verifier {
@@ -61,31 +61,31 @@
 class RegType {
  public:
   enum Type {
-    kRegTypeUnknown = 0,    /* initial state */
-    kRegTypeConflict,       /* merge clash makes this reg's type unknowable */
-    kRegTypeBoolean,        /* Z */
+    kRegTypeUnknown = 0,    // Initial state.
+    kRegTypeConflict,       // Merge clash makes this reg's type unknowable.
+    kRegTypeBoolean,        // Z.
     kRegType1nrSTART = kRegTypeBoolean,
     kRegTypeIntegralSTART = kRegTypeBoolean,
-    kRegTypeByte,           /* B */
-    kRegTypeShort,          /* S */
-    kRegTypeChar,           /* C */
-    kRegTypeInteger,        /* I */
+    kRegTypeByte,           // B.
+    kRegTypeShort,          // S.
+    kRegTypeChar,           // C.
+    kRegTypeInteger,        // I.
     kRegTypeIntegralEND = kRegTypeInteger,
-    kRegTypeFloat,          /* F */
+    kRegTypeFloat,          // F.
     kRegType1nrEND = kRegTypeFloat,
-    kRegTypeLongLo,         /* J - lower-numbered register; endian-independent */
+    kRegTypeLongLo,         // J - lower-numbered register; endian-independent.
     kRegTypeLongHi,
-    kRegTypeDoubleLo,       /* D */
+    kRegTypeDoubleLo,       // D.
     kRegTypeDoubleHi,
-    kRegTypeConstLo,        /* const derived wide, lower half - could be long or double */
-    kRegTypeConstHi,        /* const derived wide, upper half - could be long or double */
+    kRegTypeConstLo,        // Const derived wide, lower half - could be long or double.
+    kRegTypeConstHi,        // Const derived wide, upper half - could be long or double.
     kRegTypeLastFixedLocation = kRegTypeConstHi,
-    kRegTypeConst,          /* 32-bit constant derived value - could be float or int */
-    kRegTypeUnresolvedReference,        // Reference type that couldn't be resolved
-    kRegTypeUninitializedReference,     // Freshly allocated reference type
-    kRegTypeUninitializedThisReference, // Freshly allocated reference passed as "this"
-    kRegTypeUnresolvedAndUninitializedReference, // Freshly allocated unresolved reference type
-    kRegTypeReference,                  // Reference type
+    kRegTypeConst,          // 32-bit constant derived value - could be float or int.
+    kRegTypeUnresolvedReference,        // Reference type that couldn't be resolved.
+    kRegTypeUninitializedReference,     // Freshly allocated reference type.
+    kRegTypeUninitializedThisReference, // Freshly allocated reference passed as "this".
+    kRegTypeUnresolvedAndUninitializedReference, // Freshly allocated unresolved reference type.
+    kRegTypeReference,                  // Reference type.
   };
 
   Type GetType() const {
@@ -422,53 +422,53 @@
   }
 
   void SetInTry() {
-    flags_ |= 1 << kInsnFlagInTry;
+    flags_ |= 1 << kInTry;
   }
   void ClearInTry() {
-    flags_ &= ~(1 << kInsnFlagInTry);
+    flags_ &= ~(1 << kInTry);
   }
   bool IsInTry() const {
-    return (flags_ & (1 << kInsnFlagInTry)) != 0;
+    return (flags_ & (1 << kInTry)) != 0;
   }
 
   void SetBranchTarget() {
-    flags_ |= 1 << kInsnFlagBranchTarget;
+    flags_ |= 1 << kBranchTarget;
   }
   void ClearBranchTarget() {
-    flags_ &= ~(1 << kInsnFlagBranchTarget);
+    flags_ &= ~(1 << kBranchTarget);
   }
   bool IsBranchTarget() const {
-    return (flags_ & (1 << kInsnFlagBranchTarget)) != 0;
+    return (flags_ & (1 << kBranchTarget)) != 0;
   }
 
   void SetGcPoint() {
-    flags_ |= 1 << kInsnFlagGcPoint;
+    flags_ |= 1 << kGcPoint;
   }
   void ClearGcPoint() {
-    flags_ &= ~(1 << kInsnFlagGcPoint);
+    flags_ &= ~(1 << kGcPoint);
   }
   bool IsGcPoint() const {
-    return (flags_ & (1 << kInsnFlagGcPoint)) != 0;
+    return (flags_ & (1 << kGcPoint)) != 0;
   }
 
   void SetVisited() {
-    flags_ |= 1 << kInsnFlagVisited;
+    flags_ |= 1 << kVisited;
   }
   void ClearVisited() {
-    flags_ &= ~(1 << kInsnFlagVisited);
+    flags_ &= ~(1 << kVisited);
   }
   bool IsVisited() const {
-    return (flags_ & (1 << kInsnFlagVisited)) != 0;
+    return (flags_ & (1 << kVisited)) != 0;
   }
 
   void SetChanged() {
-    flags_ |= 1 << kInsnFlagChanged;
+    flags_ |= 1 << kChanged;
   }
   void ClearChanged() {
-    flags_ &= ~(1 << kInsnFlagChanged);
+    flags_ &= ~(1 << kChanged);
   }
   bool IsChanged() const {
-    return (flags_ & (1 << kInsnFlagChanged)) != 0;
+    return (flags_ & (1 << kChanged)) != 0;
   }
 
   bool IsVisitedOrChanged() const {
@@ -481,21 +481,21 @@
       strncpy(encoding, "XXXXX", sizeof(encoding));
     } else {
       strncpy(encoding, "-----", sizeof(encoding));
-      if (IsInTry())        encoding[kInsnFlagInTry] = 'T';
-      if (IsBranchTarget()) encoding[kInsnFlagBranchTarget] = 'B';
-      if (IsGcPoint())      encoding[kInsnFlagGcPoint] = 'G';
-      if (IsVisited())      encoding[kInsnFlagVisited] = 'V';
-      if (IsChanged())      encoding[kInsnFlagChanged] = 'C';
+      if (IsInTry())        encoding[kInTry] = 'T';
+      if (IsBranchTarget()) encoding[kBranchTarget] = 'B';
+      if (IsGcPoint())      encoding[kGcPoint] = 'G';
+      if (IsVisited())      encoding[kVisited] = 'V';
+      if (IsChanged())      encoding[kChanged] = 'C';
     }
     return std::string(encoding);
   }
  private:
-  enum InsnFlag {
-    kInsnFlagInTry,
-    kInsnFlagBranchTarget,
-    kInsnFlagGcPoint,
-    kInsnFlagVisited,
-    kInsnFlagChanged,
+  enum {
+    kInTry,
+    kBranchTarget,
+    kGcPoint,
+    kVisited,
+    kChanged,
   };
 
   // Size of instruction in code units
@@ -547,18 +547,18 @@
  * to be rewritten to fail at runtime.
  */
 enum VerifyError {
-  VERIFY_ERROR_NONE = 0,       /* no error; must be zero */
-  VERIFY_ERROR_BAD_CLASS_HARD, /* VerifyError; hard error that skips compilation */
-  VERIFY_ERROR_BAD_CLASS_SOFT, /* VerifyError; soft error that verifies again at runtime */
+  VERIFY_ERROR_NONE = 0,       // No error; must be zero.
+  VERIFY_ERROR_BAD_CLASS_HARD, // VerifyError; hard error that skips compilation.
+  VERIFY_ERROR_BAD_CLASS_SOFT, // VerifyError; soft error that verifies again at runtime.
 
-  VERIFY_ERROR_NO_CLASS,       /* NoClassDefFoundError */
-  VERIFY_ERROR_NO_FIELD,       /* NoSuchFieldError */
-  VERIFY_ERROR_NO_METHOD,      /* NoSuchMethodError */
-  VERIFY_ERROR_ACCESS_CLASS,   /* IllegalAccessError */
-  VERIFY_ERROR_ACCESS_FIELD,   /* IllegalAccessError */
-  VERIFY_ERROR_ACCESS_METHOD,  /* IllegalAccessError */
-  VERIFY_ERROR_CLASS_CHANGE,   /* IncompatibleClassChangeError */
-  VERIFY_ERROR_INSTANTIATION,  /* InstantiationError */
+  VERIFY_ERROR_NO_CLASS,       // NoClassDefFoundError.
+  VERIFY_ERROR_NO_FIELD,       // NoSuchFieldError.
+  VERIFY_ERROR_NO_METHOD,      // NoSuchMethodError.
+  VERIFY_ERROR_ACCESS_CLASS,   // IllegalAccessError.
+  VERIFY_ERROR_ACCESS_FIELD,   // IllegalAccessError.
+  VERIFY_ERROR_ACCESS_METHOD,  // IllegalAccessError.
+  VERIFY_ERROR_CLASS_CHANGE,   // IncompatibleClassChangeError.
+  VERIFY_ERROR_INSTANTIATION,  // InstantiationError.
 };
 std::ostream& operator<<(std::ostream& os, const VerifyError& rhs);
 
@@ -580,9 +580,9 @@
  */
 enum RegisterMapFormat {
   kRegMapFormatUnknown = 0,
-  kRegMapFormatNone = 1,      /* indicates no map data follows */
-  kRegMapFormatCompact8 = 2,  /* compact layout, 8-bit addresses */
-  kRegMapFormatCompact16 = 3, /* compact layout, 16-bit addresses */
+  kRegMapFormatNone = 1,      // Indicates no map data follows.
+  kRegMapFormatCompact8 = 2,  // Compact layout, 8-bit addresses.
+  kRegMapFormatCompact16 = 3, // Compact layout, 16-bit addresses.
 };
 const int kRegMapFormatShift = 5;
 const uint8_t kRegMapFormatMask = 0x7;
@@ -838,16 +838,17 @@
 };
 std::ostream& operator<<(std::ostream& os, const RegisterLine& rhs);
 
+// We don't need to store the register data for many instructions, because we either only need
+// it at branch points (for verification) or GC points and branches (for verification +
+// type-precise register analysis).
+enum RegisterTrackingMode {
+  kTrackRegsBranches,
+  kTrackRegsGcPoints,
+  kTrackRegsAll,
+};
+
 class PcToRegisterLineTable {
  public:
-  // We don't need to store the register data for many instructions, because we either only need
-  // it at branch points (for verification) or GC points and branches (for verification +
-  // type-precise register analysis).
-  enum RegisterTrackingMode {
-    kTrackRegsBranches,
-    kTrackRegsGcPoints,
-    kTrackRegsAll,
-  };
   PcToRegisterLineTable() {}
   ~PcToRegisterLineTable() {
     STLDeleteValues(&pc_to_register_line_);
diff --git a/src/jdwp/jdwp_constants.cc b/src/jdwp/jdwp_constants.cc
deleted file mode 100644
index 15057ea..0000000
--- a/src/jdwp/jdwp_constants.cc
+++ /dev/null
@@ -1,210 +0,0 @@
-/*
- * Copyright (C) 2008 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.
- */
-/*
- * String constants to go along with enumerated values.  (Pity we don't
- * have enumerated constant reflection in C.)  These are only needed for
- * making the output human-readable.
- */
-#include "jdwp/jdwp_constants.h"
-
-#include <iostream>
-
-namespace art {
-
-namespace JDWP {
-
-std::ostream& operator<<(std::ostream& os, const JdwpError& rhs) {
-  switch (rhs) {
-  case ERR_NONE: os << "NONE"; break;
-  case ERR_INVALID_THREAD: os << "INVALID_THREAD"; break;
-  case ERR_INVALID_THREAD_GROUP: os << "INVALID_THREAD_GROUP"; break;
-  case ERR_INVALID_PRIORITY: os << "INVALID_PRIORITY"; break;
-  case ERR_THREAD_NOT_SUSPENDED: os << "THREAD_NOT_SUSPENDED"; break;
-  case ERR_THREAD_SUSPENDED: os << "THREAD_SUSPENDED"; break;
-  case ERR_THREAD_NOT_ALIVE: os << "THREAD_NOT_ALIVE"; break;
-  case ERR_INVALID_OBJECT: os << "INVALID_OBJEC"; break;
-  case ERR_INVALID_CLASS: os << "INVALID_CLASS"; break;
-  case ERR_CLASS_NOT_PREPARED: os << "CLASS_NOT_PREPARED"; break;
-  case ERR_INVALID_METHODID: os << "INVALID_METHODID"; break;
-  case ERR_INVALID_LOCATION: os << "INVALID_LOCATION"; break;
-  case ERR_INVALID_FIELDID: os << "INVALID_FIELDID"; break;
-  case ERR_INVALID_FRAMEID: os << "INVALID_FRAMEID"; break;
-  case ERR_NO_MORE_FRAMES: os << "NO_MORE_FRAMES"; break;
-  case ERR_OPAQUE_FRAME: os << "OPAQUE_FRAME"; break;
-  case ERR_NOT_CURRENT_FRAME: os << "NOT_CURRENT_FRAME"; break;
-  case ERR_TYPE_MISMATCH: os << "TYPE_MISMATCH"; break;
-  case ERR_INVALID_SLOT: os << "INVALID_SLOT"; break;
-  case ERR_DUPLICATE: os << "DUPLICATE"; break;
-  case ERR_NOT_FOUND: os << "NOT_FOUND"; break;
-  case ERR_INVALID_MONITOR: os << "INVALID_MONITOR"; break;
-  case ERR_NOT_MONITOR_OWNER: os << "NOT_MONITOR_OWNER"; break;
-  case ERR_INTERRUPT: os << "INTERRUPT"; break;
-  case ERR_INVALID_CLASS_FORMAT: os << "INVALID_CLASS_FORMAT"; break;
-  case ERR_CIRCULAR_CLASS_DEFINITION: os << "CIRCULAR_CLASS_DEFINITION"; break;
-  case ERR_FAILS_VERIFICATION: os << "FAILS_VERIFICATION"; break;
-  case ERR_ADD_METHOD_NOT_IMPLEMENTED: os << "ADD_METHOD_NOT_IMPLEMENTED"; break;
-  case ERR_SCHEMA_CHANGE_NOT_IMPLEMENTED: os << "SCHEMA_CHANGE_NOT_IMPLEMENTED"; break;
-  case ERR_INVALID_TYPESTATE: os << "INVALID_TYPESTATE"; break;
-  case ERR_HIERARCHY_CHANGE_NOT_IMPLEMENTED: os << "HIERARCHY_CHANGE_NOT_IMPLEMENTED"; break;
-  case ERR_DELETE_METHOD_NOT_IMPLEMENTED: os << "DELETE_METHOD_NOT_IMPLEMENTED"; break;
-  case ERR_UNSUPPORTED_VERSION: os << "UNSUPPORTED_VERSION"; break;
-  case ERR_NAMES_DONT_MATCH: os << "NAMES_DONT_MATCH"; break;
-  case ERR_CLASS_MODIFIERS_CHANGE_NOT_IMPLEMENTED: os << "CLASS_MODIFIERS_CHANGE_NOT_IMPLEMENTED"; break;
-  case ERR_METHOD_MODIFIERS_CHANGE_NOT_IMPLEMENTED: os << "METHOD_MODIFIERS_CHANGE_NOT_IMPLEMENTED"; break;
-  case ERR_NOT_IMPLEMENTED: os << "NOT_IMPLEMENTED"; break;
-  case ERR_NULL_POINTER: os << "NULL_POINTER"; break;
-  case ERR_ABSENT_INFORMATION: os << "ABSENT_INFORMATION"; break;
-  case ERR_INVALID_EVENT_TYPE: os << "INVALID_EVENT_TYPE"; break;
-  case ERR_ILLEGAL_ARGUMENT: os << "ILLEGAL_ARGUMENT"; break;
-  case ERR_OUT_OF_MEMORY: os << "OUT_OF_MEMORY"; break;
-  case ERR_ACCESS_DENIED: os << "ACCESS_DENIED"; break;
-  case ERR_VM_DEAD: os << "VM_DEAD"; break;
-  case ERR_INTERNAL: os << "INTERNAL"; break;
-  case ERR_UNATTACHED_THREAD: os << "UNATTACHED_THREAD"; break;
-  case ERR_INVALID_TAG: os << "INVALID_TAG"; break;
-  case ERR_ALREADY_INVOKING: os << "ALREADY_INVOKING"; break;
-  case ERR_INVALID_INDEX: os << "INVALID_INDEX"; break;
-  case ERR_INVALID_LENGTH: os << "INVALID_LENGTH"; break;
-  case ERR_INVALID_STRING: os << "INVALID_STRING"; break;
-  case ERR_INVALID_CLASS_LOADER: os << "INVALID_CLASS_LOADER"; break;
-  case ERR_INVALID_ARRAY: os << "INVALID_ARRAY"; break;
-  case ERR_TRANSPORT_LOAD: os << "TRANSPORT_LOAD"; break;
-  case ERR_TRANSPORT_INIT: os << "TRANSPORT_INIT"; break;
-  case ERR_NATIVE_METHOD: os << "NATIVE_METHOD"; break;
-  case ERR_INVALID_COUNT: os << "INVALID_COUNT"; break;
-  default:
-    os << "JdwpError[" << static_cast<int>(rhs) << "]";
-    break;
-  }
-  return os;
-}
-
-std::ostream& operator<<(std::ostream& os, const JdwpEventKind& rhs) {
-  switch (rhs) {
-  case EK_SINGLE_STEP: os << "SINGLE_STEP"; break;
-  case EK_BREAKPOINT: os << "BREAKPOINT"; break;
-  case EK_FRAME_POP: os << "FRAME_POP"; break;
-  case EK_EXCEPTION: os << "EXCEPTION"; break;
-  case EK_USER_DEFINED: os << "USER_DEFINED"; break;
-  case EK_THREAD_START: os << "THREAD_START"; break;
-  case EK_THREAD_DEATH: os << "THREAD_DEATH"; break;
-  case EK_CLASS_PREPARE: os << "CLASS_PREPARE"; break;
-  case EK_CLASS_UNLOAD: os << "CLASS_UNLOAD"; break;
-  case EK_CLASS_LOAD: os << "CLASS_LOAD"; break;
-  case EK_FIELD_ACCESS: os << "FIELD_ACCESS"; break;
-  case EK_FIELD_MODIFICATION: os << "FIELD_MODIFICATION"; break;
-  case EK_EXCEPTION_CATCH: os << "EXCEPTION_CATCH"; break;
-  case EK_METHOD_ENTRY: os << "METHOD_ENTRY"; break;
-  case EK_METHOD_EXIT: os << "METHOD_EXIT"; break;
-  case EK_METHOD_EXIT_WITH_RETURN_VALUE: os << "METHOD_EXIT_WITH_RETURN_VALUE"; break;
-  case EK_MONITOR_CONTENDED_ENTER: os << "MONITOR_CONTENDED_ENTER"; break;
-  case EK_MONITOR_CONTENDED_ENTERED: os << "MONITOR_CONTENDED_ENTERED"; break;
-  case EK_MONITOR_WAIT: os << "MONITOR_WAIT"; break;
-  case EK_MONITOR_WAITED: os << "MONITOR_WAITED"; break;
-  case EK_VM_START: os << "VM_START"; break;
-  case EK_VM_DEATH: os << "VM_DEATH"; break;
-  case EK_VM_DISCONNECTED: os << "VM_DISCONNECTED"; break;
-  default:
-    os << "JdwpEventKind[" << static_cast<int>(rhs) << "]";
-    break;
-  }
-  return os;
-}
-
-std::ostream& operator<<(std::ostream& os, const JdwpModKind& rhs) {
-  switch (rhs) {
-  case MK_COUNT: os << "COUNT"; break;
-  case MK_CONDITIONAL: os << "CONDITIONAL"; break;
-  case MK_THREAD_ONLY: os << "THREAD_ONLY"; break;
-  case MK_CLASS_ONLY: os << "CLASS_ONLY"; break;
-  case MK_CLASS_MATCH: os << "CLASS_MATCH"; break;
-  case MK_CLASS_EXCLUDE: os << "CLASS_EXCLUDE"; break;
-  case MK_LOCATION_ONLY: os << "LOCATION_ONLY"; break;
-  case MK_EXCEPTION_ONLY: os << "EXCEPTION_ONLY"; break;
-  case MK_FIELD_ONLY: os << "FIELD_ONLY"; break;
-  case MK_STEP: os << "STEP"; break;
-  case MK_INSTANCE_ONLY: os << "INSTANCE_ONLY"; break;
-  case MK_SOURCE_NAME_MATCH: os << "SOURCE_NAME_MATCH"; break;
-  default:
-    os << "JdwpModKind[" << static_cast<int>(rhs) << "]";
-    break;
-  }
-  return os;
-}
-
-std::ostream& operator<<(std::ostream& os, const JdwpStepDepth& rhs) {
-  switch (rhs) {
-  case SD_INTO: os << "INTO"; break;
-  case SD_OVER: os << "OVER"; break;
-  case SD_OUT: os << "OUT"; break;
-  default:
-    os << "JdwpStepDepth[" << static_cast<int>(rhs) << "]";
-    break;
-  }
-  return os;
-}
-
-std::ostream& operator<<(std::ostream& os, const JdwpStepSize& rhs) {
-  switch (rhs) {
-  case SS_MIN: os << "MIN"; break;
-  case SS_LINE: os << "LINE"; break;
-  default:
-    os << "JdwpStepSize[" << static_cast<int>(rhs) << "]";
-    break;
-  }
-  return os;
-}
-
-std::ostream& operator<<(std::ostream& os, const JdwpSuspendPolicy& rhs) {
-  switch (rhs) {
-  case SP_NONE: os << "NONE"; break;
-  case SP_EVENT_THREAD: os << "EVENT_THREAD"; break;
-  case SP_ALL: os << "ALL"; break;
-  default:
-    os << "JdwpSuspendPolicy[" << static_cast<int>(rhs) << "]";
-    break;
-  }
-  return os;
-}
-
-std::ostream& operator<<(std::ostream& os, const JdwpSuspendStatus& rhs) {
-  switch (rhs) {
-  case SUSPEND_STATUS_NOT_SUSPENDED: os << "NOT SUSPENDED"; break;
-  case SUSPEND_STATUS_SUSPENDED: os << "SUSPENDED"; break;
-  default:
-    os << "JdwpSuspendStatus[" << static_cast<int>(rhs) << "]";
-    break;
-  }
-  return os;
-}
-
-std::ostream& operator<<(std::ostream& os, const JdwpThreadStatus& rhs) {
-  switch (rhs) {
-  case TS_ZOMBIE: os << "ZOMBIE"; break;
-  case TS_RUNNING: os << "RUNNING"; break;
-  case TS_SLEEPING: os << "SLEEPING"; break;
-  case TS_MONITOR: os << "MONITOR"; break;
-  case TS_WAIT: os << "WAIT"; break;
-  default:
-    os << "JdwpThreadStatus[" << static_cast<int>(rhs) << "]";
-    break;
-  }
-  return os;
-}
-
-}  // namespace JDWP
-
-}  // namespace art
diff --git a/src/jdwp/jdwp_constants.h b/src/jdwp/jdwp_constants.h
index 14dc6cf..ebc575b 100644
--- a/src/jdwp/jdwp_constants.h
+++ b/src/jdwp/jdwp_constants.h
@@ -163,9 +163,9 @@
  * StepDepth constants.
  */
 enum JdwpStepDepth {
-  SD_INTO                 = 0,    /* step into method calls */
-  SD_OVER                 = 1,    /* step over method calls */
-  SD_OUT                  = 2,    /* step out of current method */
+  SD_INTO                 = 0,    // Step into method calls.
+  SD_OVER                 = 1,    // Step over method calls.
+  SD_OUT                  = 2,    // Step out of current method.
 };
 std::ostream& operator<<(std::ostream& os, const JdwpStepDepth& value);
 
@@ -173,8 +173,8 @@
  * StepSize constants.
  */
 enum JdwpStepSize {
-  SS_MIN                  = 0,    /* step by minimum (e.g. 1 bytecode inst) */
-  SS_LINE                 = 1,    /* if possible, step to next line */
+  SS_MIN                  = 0,    // Step by minimum (for example, one bytecode).
+  SS_LINE                 = 1,    // If possible, step to next line.
 };
 std::ostream& operator<<(std::ostream& os, const JdwpStepSize& value);
 
@@ -182,9 +182,9 @@
  * SuspendPolicy constants.
  */
 enum JdwpSuspendPolicy {
-  SP_NONE                 = 0,    /* suspend no threads */
-  SP_EVENT_THREAD         = 1,    /* suspend event thread */
-  SP_ALL                  = 2,    /* suspend all threads */
+  SP_NONE                 = 0,    // Suspend no threads.
+  SP_EVENT_THREAD         = 1,    // Suspend event thread.
+  SP_ALL                  = 2,    // Suspend all threads.
 };
 std::ostream& operator<<(std::ostream& os, const JdwpSuspendPolicy& value);
 
diff --git a/src/jdwp/jdwp_main.cc b/src/jdwp/jdwp_main.cc
index ad2281f..ec85aa8 100644
--- a/src/jdwp/jdwp_main.cc
+++ b/src/jdwp/jdwp_main.cc
@@ -435,21 +435,6 @@
   return now - last;
 }
 
-static const char* kTransportNames[] = {
-  "Unknown",
-  "Socket",
-  "AndroidAdb",
-};
-std::ostream& operator<<(std::ostream& os, const JdwpTransportType& value) {
-  int32_t int_value = static_cast<int32_t>(value);
-  if (value >= kJdwpTransportUnknown && value <= kJdwpTransportAndroidAdb) {
-    os << kTransportNames[int_value];
-  } else {
-    os << "JdwpTransportType[" << int_value << "]";
-  }
-  return os;
-}
-
 std::ostream& operator<<(std::ostream& os, const JdwpLocation& rhs) {
   os << "JdwpLocation["
      << Dbg::GetClassName(rhs.classId) << "." << Dbg::GetMethodName(rhs.classId, rhs.methodId)
@@ -466,41 +451,6 @@
   return !(lhs == rhs);
 }
 
-std::ostream& operator<<(std::ostream& os, const JdwpTag& value) {
-  switch (value) {
-  case JT_ARRAY: os << "JT_ARRAY"; break;
-  case JT_BYTE: os << "JT_BYTE"; break;
-  case JT_CHAR: os << "JT_CHAR"; break;
-  case JT_OBJECT: os << "JT_OBJECT"; break;
-  case JT_FLOAT: os << "JT_FLOAT"; break;
-  case JT_DOUBLE: os << "JT_DOUBLE"; break;
-  case JT_INT: os << "JT_INT"; break;
-  case JT_LONG: os << "JT_LONG"; break;
-  case JT_SHORT: os << "JT_SHORT"; break;
-  case JT_VOID: os << "JT_VOID"; break;
-  case JT_BOOLEAN: os << "JT_BOOLEAN"; break;
-  case JT_STRING: os << "JT_STRING"; break;
-  case JT_THREAD: os << "JT_THREAD"; break;
-  case JT_THREAD_GROUP: os << "JT_THREAD_GROUP"; break;
-  case JT_CLASS_LOADER: os << "JT_CLASS_LOADER"; break;
-  case JT_CLASS_OBJECT: os << "JT_CLASS_OBJECT"; break;
-  default:
-    os << "JdwpTag[" << static_cast<int32_t>(value) << "]";
-  }
-  return os;
-}
-
-std::ostream& operator<<(std::ostream& os, const JdwpTypeTag& value) {
-  switch (value) {
-  case TT_CLASS: os << "TT_CLASS"; break;
-  case TT_INTERFACE: os << "TT_INTERFACE"; break;
-  case TT_ARRAY: os << "TT_ARRAY"; break;
-  default:
-    os << "JdwpTypeTag[" << static_cast<int32_t>(value) << "]";
-  }
-  return os;
-}
-
 }  // namespace JDWP
 
 }  // namespace art
diff --git a/tools/generate-operator-out.py b/tools/generate-operator-out.py
index ca7df1e..91d4669 100755
--- a/tools/generate-operator-out.py
+++ b/tools/generate-operator-out.py
@@ -41,6 +41,7 @@
 _ENUM_VALUE_RE = re.compile(r'([A-Za-z0-9_]+)(.*)')
 _ENUM_END_RE = re.compile(r'^\s*\};$')
 _ENUMS = {}
+_NAMESPACES = {}
 
 def Confused(filename, line_number, line):
   sys.stderr.write('%s:%d: confused by:\n%s\n' % (filename, line_number, line))
@@ -51,19 +52,46 @@
   lines = codecs.open(filename, 'r', 'utf8', 'replace').read().split('\n')
   in_enum = False
   line_number = 0
+
+  namespaces = []
+  enclosing_classes = []
+
   for raw_line in lines:
     line_number += 1
 
-    # TODO: take namespaces and enclosing classes/structs into account.
-
-    # Is this the start of a new enum?
     if not in_enum:
+      # Is this the start of a new enum?
       m = _ENUM_START_RE.search(raw_line)
       if m:
         # Yes, so add an empty entry to _ENUMS for this enum.
         enum_name = m.group(1)
+        if len(enclosing_classes) > 0:
+          enum_name = '::'.join(enclosing_classes) + '::' + enum_name
         _ENUMS[enum_name] = []
+        _NAMESPACES[enum_name] = '::'.join(namespaces)
         in_enum = True
+        continue
+
+      # Is this the start or end of a namespace?
+      m = re.compile(r'^namespace (\S+) \{').search(raw_line)
+      if m:
+        namespaces.append(m.group(1))
+        continue
+      m = re.compile(r'^\}\s+// namespace').search(raw_line)
+      if m:
+        namespaces = namespaces[0:len(namespaces) - 1]
+        continue
+
+      # Is this the start or end of an enclosing class or struct?
+      m = re.compile(r'^(?:class|struct) (\S+) \{').search(raw_line)
+      if m:
+        enclosing_classes.append(m.group(1))
+        continue
+      m = re.compile(r'^\};').search(raw_line)
+      if m:
+        enclosing_classes = enclosing_classes[0:len(enclosing_classes) - 1]
+        continue
+
       continue
 
     # Is this the end of the current enum?
@@ -74,8 +102,13 @@
       in_enum = False
       continue
 
+    # Whitespace?
+    line = raw_line.strip()
+    if len(line) == 0:
+      continue
+
     # Is this another enum value?
-    m = _ENUM_VALUE_RE.search(raw_line.strip())
+    m = _ENUM_VALUE_RE.search(line)
     if not m:
       Confused(filename, line_number, raw_line)
 
@@ -88,7 +121,7 @@
 
     # Lose literal values because we don't care; turn "= 123, // blah" into ", // blah".
     rest = m.group(2).strip()
-    m_literal = re.compile(r'= (0x[0-9a-f]+|-?[0-9]+)').search(rest)
+    m_literal = re.compile(r'= (0x[0-9a-f]+|-?[0-9]+|\'.\')').search(rest)
     if m_literal:
       rest = rest[(len(m_literal.group(0))):]
 
@@ -104,13 +137,15 @@
 
     # Anything left should be a comment.
     if len(rest) and not rest.startswith('// '):
-      print rest
       Confused(filename, line_number, raw_line)
 
     m_comment = re.compile(r'<<(.*?)>>').search(rest)
     if m_comment:
       enum_text = m_comment.group(1)
 
+    if len(enclosing_classes) > 0:
+      enum_value = '::'.join(enclosing_classes) + '::' + enum_value
+
     _ENUMS[enum_name].append((enum_value, enum_text))
 
 def main():
@@ -129,11 +164,14 @@
     print '#include "%s"' % header_file
 
   print
-  print 'namespace art {'
-  print
 
   for enum_name in _ENUMS:
     print '// This was automatically generated by %s --- do not edit!' % sys.argv[0]
+
+    namespaces = _NAMESPACES[enum_name].split('::')
+    for namespace in namespaces:
+      print 'namespace %s {' % namespace
+
     print 'std::ostream& operator<<(std::ostream& os, const %s& rhs) {' % enum_name
     print '  switch (rhs) {'
     for (enum_value, enum_text) in _ENUMS[enum_name]:
@@ -142,9 +180,10 @@
     print '  }'
     print '  return os;'
     print '}'
-    print
 
-  print '} // namespace art'
+    for namespace in reversed(namespaces):
+      print '}  // namespace %s' % namespace
+    print
 
   sys.exit(0)
 
