AAPT2: Add option to add JavaDoc annotations to Java classes

Change-Id: I7ee8c20cdd91380927a65c41097ffd3a6ffa2df5
diff --git a/tools/aapt2/java/JavaClassGenerator.cpp b/tools/aapt2/java/JavaClassGenerator.cpp
index 2d076c2..092bab2 100644
--- a/tools/aapt2/java/JavaClassGenerator.cpp
+++ b/tools/aapt2/java/JavaClassGenerator.cpp
@@ -437,6 +437,15 @@
     return generate(packageNameToGenerate, packageNameToGenerate, out);
 }
 
+static void appendJavaDocAnnotations(const std::vector<std::string>& annotations,
+                                     AnnotationProcessor* processor) {
+    for (const std::string& annotation : annotations) {
+        std::string properAnnotation = "@";
+        properAnnotation += annotation;
+        processor->appendComment(properAnnotation);
+    }
+}
+
 bool JavaClassGenerator::generate(const StringPiece16& packageNameToGenerate,
                                   const StringPiece16& outPackageName, std::ostream* out) {
 
@@ -477,14 +486,17 @@
                     mOptions.types == JavaClassGeneratorOptions::SymbolTypes::kPublic) {
                 // When generating a public R class, we don't want Styleable to be part of the API.
                 // It is only emitted for documentation purposes.
-                AnnotationProcessor* processor = classDef->getCommentBuilder();
-                processor->appendComment("@doconly");
+                classDef->getCommentBuilder()->appendComment("@doconly");
             }
 
+            appendJavaDocAnnotations(mOptions.javadocAnnotations, classDef->getCommentBuilder());
+
             rClass.addMember(std::move(classDef));
         }
     }
 
+    appendJavaDocAnnotations(mOptions.javadocAnnotations, rClass.getCommentBuilder());
+
     if (!ClassDefinition::writeJavaFile(&rClass, util::utf16ToUtf8(outPackageName),
                                         mOptions.useFinal, out)) {
         return false;
@@ -494,6 +506,4 @@
     return true;
 }
 
-
-
 } // namespace aapt