Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0ad81868 authored by Makoto Onuki's avatar Makoto Onuki Committed by Gerrit Code Review
Browse files

Merge "Don't add API annotations in the internal R.java"

parents 8d0dfda3 eab9e7f8
Loading
Loading
Loading
Loading
+2 −1
Original line number Original line Diff line number Diff line
@@ -1252,7 +1252,8 @@ class Linker {
      return false;
      return false;
    }
    }


    ClassDefinition::WriteJavaFile(manifest_class.get(), package_utf8, true, &fout);
    ClassDefinition::WriteJavaFile(manifest_class.get(), package_utf8, true,
                                   false /* strip_api_annotations */, &fout);
    fout.Flush();
    fout.Flush();


    if (fout.HadError()) {
    if (fout.HadError()) {
+4 −1
Original line number Original line Diff line number Diff line
@@ -110,7 +110,7 @@ void AnnotationProcessor::AppendNewLine() {
  }
  }
}
}


void AnnotationProcessor::Print(Printer* printer) const {
void AnnotationProcessor::Print(Printer* printer, bool strip_api_annotations) const {
  if (has_comments_) {
  if (has_comments_) {
    std::string result = comment_.str();
    std::string result = comment_.str();
    for (const StringPiece& line : util::Tokenize(result, '\n')) {
    for (const StringPiece& line : util::Tokenize(result, '\n')) {
@@ -123,6 +123,9 @@ void AnnotationProcessor::Print(Printer* printer) const {
    printer->Println("@Deprecated");
    printer->Println("@Deprecated");
  }
  }


  if (strip_api_annotations) {
    return;
  }
  for (const AnnotationRule& rule : sAnnotationRules) {
  for (const AnnotationRule& rule : sAnnotationRules) {
    if (annotation_bit_mask_ & rule.bit_mask) {
    if (annotation_bit_mask_ & rule.bit_mask) {
      printer->Println(rule.annotation);
      printer->Println(rule.annotation);
+1 −1
Original line number Original line Diff line number Diff line
@@ -64,7 +64,7 @@ class AnnotationProcessor {
  void AppendNewLine();
  void AppendNewLine();


  // Writes the comments and annotations to the Printer.
  // Writes the comments and annotations to the Printer.
  void Print(text::Printer* printer) const;
  void Print(text::Printer* printer, bool strip_api_annotations = false) const;


 private:
 private:
  std::stringstream comment_;
  std::stringstream comment_;
+15 −0
Original line number Original line Diff line number Diff line
@@ -76,6 +76,21 @@ TEST(AnnotationProcessorTest, EmitsTestApiAnnotationAndRemovesFromComment) {
  EXPECT_THAT(annotations, HasSubstr("This is a test API"));
  EXPECT_THAT(annotations, HasSubstr("This is a test API"));
}
}


TEST(AnnotationProcessorTest, NotEmitSystemApiAnnotation) {
  AnnotationProcessor processor;
  processor.AppendComment("@SystemApi This is a system API");

  std::string annotations;
  StringOutputStream out(&annotations);
  Printer printer(&out);
  processor.Print(&printer, true /* strip_api_annotations */);
  out.Flush();

  EXPECT_THAT(annotations, Not(HasSubstr("@android.annotation.SystemApi")));
  EXPECT_THAT(annotations, Not(HasSubstr("@SystemApi")));
  EXPECT_THAT(annotations, HasSubstr("This is a system API"));
}

TEST(AnnotationProcessor, ExtractsFirstSentence) {
TEST(AnnotationProcessor, ExtractsFirstSentence) {
  EXPECT_THAT(AnnotationProcessor::ExtractFirstSentence("This is the only sentence"),
  EXPECT_THAT(AnnotationProcessor::ExtractFirstSentence("This is the only sentence"),
              Eq("This is the only sentence"));
              Eq("This is the only sentence"));
+8 −8
Original line number Original line Diff line number Diff line
@@ -23,15 +23,15 @@ using ::android::StringPiece;


namespace aapt {
namespace aapt {


void ClassMember::Print(bool /*final*/, Printer* printer) const {
void ClassMember::Print(bool /*final*/, Printer* printer, bool strip_api_annotations) const {
  processor_.Print(printer);
  processor_.Print(printer, strip_api_annotations);
}
}


void MethodDefinition::AppendStatement(const StringPiece& statement) {
void MethodDefinition::AppendStatement(const StringPiece& statement) {
  statements_.push_back(statement.to_string());
  statements_.push_back(statement.to_string());
}
}


void MethodDefinition::Print(bool final, Printer* printer) const {
void MethodDefinition::Print(bool final, Printer* printer, bool) const {
  printer->Print(signature_).Println(" {");
  printer->Print(signature_).Println(" {");
  printer->Indent();
  printer->Indent();
  for (const auto& statement : statements_) {
  for (const auto& statement : statements_) {
@@ -74,12 +74,12 @@ bool ClassDefinition::empty() const {
  return true;
  return true;
}
}


void ClassDefinition::Print(bool final, Printer* printer) const {
void ClassDefinition::Print(bool final, Printer* printer, bool strip_api_annotations) const {
  if (empty() && !create_if_empty_) {
  if (empty() && !create_if_empty_) {
    return;
    return;
  }
  }


  ClassMember::Print(final, printer);
  ClassMember::Print(final,  printer, strip_api_annotations);


  printer->Print("public ");
  printer->Print("public ");
  if (qualifier_ == ClassQualifier::kStatic) {
  if (qualifier_ == ClassQualifier::kStatic) {
@@ -93,7 +93,7 @@ void ClassDefinition::Print(bool final, Printer* printer) const {
    // and takes precedence over a previous member with the same name. The overridden member is
    // and takes precedence over a previous member with the same name. The overridden member is
    // set to nullptr.
    // set to nullptr.
    if (member != nullptr) {
    if (member != nullptr) {
      member->Print(final, printer);
      member->Print(final, printer, strip_api_annotations);
      printer->Println();
      printer->Println();
    }
    }
  }
  }
@@ -111,11 +111,11 @@ constexpr static const char* sWarningHeader =
    " */\n\n";
    " */\n\n";


void ClassDefinition::WriteJavaFile(const ClassDefinition* def, const StringPiece& package,
void ClassDefinition::WriteJavaFile(const ClassDefinition* def, const StringPiece& package,
                                    bool final, io::OutputStream* out) {
                                    bool final, bool strip_api_annotations, io::OutputStream* out) {
  Printer printer(out);
  Printer printer(out);
  printer.Print(sWarningHeader).Print("package ").Print(package).Println(";");
  printer.Print(sWarningHeader).Print("package ").Print(package).Println(";");
  printer.Println();
  printer.Println();
  def->Print(final, &printer);
  def->Print(final, &printer, strip_api_annotations);
}
}


}  // namespace aapt
}  // namespace aapt
Loading