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

Commit 4380a6a1 authored by Ryan Mitchell's avatar Ryan Mitchell Committed by Automerger Merge Worker
Browse files

Merge "AAPT2: Only print last uses-sdk tag" into sc-dev am: 556d84ca

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/14413055

Change-Id: I981117345ea2f786e644adf89a3b7b9971daa7b0
parents 03b72d1a 556d84ca
Loading
Loading
Loading
Loading
+21 −0
Original line number Diff line number Diff line
@@ -132,6 +132,12 @@ class ManifestExtractor {
    /** Adds an element to the list of children of the element. */
    void AddChild(std::unique_ptr<Element>& child) { children_.push_back(std::move(child)); }

    template <typename Predicate>
    void Filter(Predicate&& func) {
      children_.erase(std::remove_if(children_.begin(), children_.end(),
                                     [&](const auto& e) { return func(e.get()); }));
    }

    /** Retrieves the list of children of the element. */
    const std::vector<std::unique_ptr<Element>>& children() const {
      return children_;
@@ -1963,6 +1969,21 @@ bool ManifestExtractor::Dump(text::Printer* printer, IDiagnostics* diag) {
  // Extract badging information
  auto root = Visit(element);

  // Filter out all "uses-sdk" tags besides the very last tag. The android runtime only uses the
  // attribute values from the last defined tag.
  std::vector<UsesSdkBadging*> filtered_uses_sdk_tags;
  for (const auto& child : root->children()) {
    if (auto uses_sdk = ElementCast<UsesSdkBadging>(child.get())) {
      filtered_uses_sdk_tags.emplace_back(uses_sdk);
    }
  }
  filtered_uses_sdk_tags.pop_back();

  root->Filter([&](const ManifestExtractor::Element* e) {
    return std::find(filtered_uses_sdk_tags.begin(), filtered_uses_sdk_tags.end(), e) !=
           filtered_uses_sdk_tags.end();
  });

  // Print the elements in order seen
  Print(root.get(), printer);