From 3524a23edb88f0e67352d55ac6a2919f1edf7b30 Mon Sep 17 00:00:00 2001 From: Adam Lesinski Date: Fri, 1 Apr 2016 19:19:24 -0700 Subject: [PATCH] AAPT2: Add option to add JavaDoc annotations to Java classes Change-Id: I7ee8c20cdd91380927a65c41097ffd3a6ffa2df5 --- tools/aapt2/java/JavaClassGenerator.cpp | 18 ++++++++++++++---- tools/aapt2/java/JavaClassGenerator.h | 5 +++++ tools/aapt2/link/Link.cpp | 11 +++++++++++ 3 files changed, 30 insertions(+), 4 deletions(-) diff --git a/tools/aapt2/java/JavaClassGenerator.cpp b/tools/aapt2/java/JavaClassGenerator.cpp index 2d076c2d5a66e..092bab241bba8 100644 --- a/tools/aapt2/java/JavaClassGenerator.cpp +++ b/tools/aapt2/java/JavaClassGenerator.cpp @@ -437,6 +437,15 @@ bool JavaClassGenerator::generate(const StringPiece16& packageNameToGenerate, st return generate(packageNameToGenerate, packageNameToGenerate, out); } +static void appendJavaDocAnnotations(const std::vector& 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 @@ bool JavaClassGenerator::generate(const StringPiece16& packageNameToGenerate, 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 @@ bool JavaClassGenerator::generate(const StringPiece16& packageNameToGenerate, return true; } - - } // namespace aapt diff --git a/tools/aapt2/java/JavaClassGenerator.h b/tools/aapt2/java/JavaClassGenerator.h index b594a88728f43..77e0ed76143ab 100644 --- a/tools/aapt2/java/JavaClassGenerator.h +++ b/tools/aapt2/java/JavaClassGenerator.h @@ -44,6 +44,11 @@ struct JavaClassGeneratorOptions { }; SymbolTypes types = SymbolTypes::kAll; + + /** + * A list of JavaDoc annotations to add to the comments of all generated classes. + */ + std::vector javadocAnnotations; }; /* diff --git a/tools/aapt2/link/Link.cpp b/tools/aapt2/link/Link.cpp index 8c10fbb6e38af..8c8bffafdc45d 100644 --- a/tools/aapt2/link/Link.cpp +++ b/tools/aapt2/link/Link.cpp @@ -66,6 +66,7 @@ struct LinkOptions { bool staticLib = false; bool noStaticLibPackages = false; bool generateNonFinalIds = false; + std::vector javadocAnnotations; bool outputToDirectory = false; bool autoAddOverlay = false; bool doNotCompressAnything = false; @@ -775,6 +776,13 @@ public: return true; } + // Add any JavaDoc annotations to the generated class. + for (const std::string& annotation : mOptions.javadocAnnotations) { + std::string properAnnotation = "@"; + properAnnotation += annotation; + manifestClass->getCommentBuilder()->appendComment(properAnnotation); + } + const std::string packageUtf8 = util::utf16ToUtf8(mContext->getCompilationPackage()); std::string outPath = mOptions.generateJavaClassPath.value(); @@ -1292,6 +1300,7 @@ public: if (mOptions.generateJavaClassPath) { JavaClassGeneratorOptions options; options.types = JavaClassGeneratorOptions::SymbolTypes::kAll; + options.javadocAnnotations = mOptions.javadocAnnotations; if (mOptions.staticLib || mOptions.generateNonFinalIds) { options.useFinal = false; @@ -1432,6 +1441,8 @@ int link(const std::vector& args) { &customJavaPackage) .optionalFlagList("--extra-packages", "Generate the same R.java but with different " "package names", &extraJavaPackages) + .optionalFlagList("--add-javadoc-annotation", "Adds a JavaDoc annotation to all " + "generated Java classes", &options.javadocAnnotations) .optionalSwitch("--auto-add-overlay", "Allows the addition of new resources in " "overlays without tags", &options.autoAddOverlay) .optionalFlag("--rename-manifest-package", "Renames the package in AndroidManifest.xml",