diff --git a/Method.cpp b/Method.cpp
index 7e0058f..2569701 100644
--- a/Method.cpp
+++ b/Method.cpp
@@ -1,17 +1,19 @@
 #include "Method.h"
 
+#include "Annotation.h"
 #include "Formatter.h"
 #include "Type.h"
 
 namespace android {
 
-Method::Method(
-        const char *name,
-        std::vector<TypedVar *> *args,
-        std::vector<TypedVar *> *results)
+Method::Method(const char *name,
+       std::vector<TypedVar *> *args,
+       std::vector<TypedVar *> *results,
+       KeyedVector<std::string, Annotation *> *annotations)
     : mName(name),
       mArgs(args),
-      mResults(results) {
+      mResults(results),
+      mAnnotationsByName(annotations) {
 }
 
 std::string Method::name() const {
@@ -26,6 +28,10 @@
     return *mResults;
 }
 
+const KeyedVector<std::string, Annotation *> &Method::annotations() const {
+    return *mAnnotationsByName;
+}
+
 // static
 std::string Method::GetSignature(const std::vector<TypedVar *> &args) {
     bool first = true;
@@ -47,6 +53,21 @@
     return out;
 }
 
+void Method::dumpAnnotations(Formatter &out) const {
+    if (mAnnotationsByName->size() == 0) {
+        return;
+    }
+
+    out << "// ";
+    for (size_t i = 0; i < mAnnotationsByName->size(); ++i) {
+        if (i > 0) {
+            out << " ";
+        }
+        mAnnotationsByName->valueAt(i)->dump(out);
+    }
+    out << "\n";
+}
+
 ////////////////////////////////////////////////////////////////////////////////
 
 TypedVar::TypedVar(const char *name, Type *type)
