diff options
author | Xin Li <delphij@google.com> | 2017-11-14 12:31:11 -0800 |
---|---|---|
committer | Xin Li <delphij@google.com> | 2017-11-14 12:31:11 -0800 |
commit | 220871a697290529278ed16db508eda8e12f3fc7 (patch) | |
tree | bc13101b63c6fe39a9d92706ecb7ded7f98f5a9c /tools/aapt2/java/ClassDefinition.cpp | |
parent | 802f191b2b84a1b1b82c7f6f3268846084b35dfb (diff) | |
parent | 98e12851336b7db16e583f9afac63ecc97465980 (diff) |
Merge commit '98e12851336b7db16e583f9afac63ecc97465980' from
oc-mr1-dev-plus-aosp-without-vendor into stage-aosp-master.
Change-Id: Ia7b8da4a00d215160e4a4fa40f6044208d1297b7
Merged-In: I19846d2a3ee27aecbae2367a74ee49082eea154d
Diffstat (limited to 'tools/aapt2/java/ClassDefinition.cpp')
-rw-r--r-- | tools/aapt2/java/ClassDefinition.cpp | 31 |
1 files changed, 25 insertions, 6 deletions
diff --git a/tools/aapt2/java/ClassDefinition.cpp b/tools/aapt2/java/ClassDefinition.cpp index 0cec9ae407f5..c139b73db296 100644 --- a/tools/aapt2/java/ClassDefinition.cpp +++ b/tools/aapt2/java/ClassDefinition.cpp @@ -39,9 +39,23 @@ void MethodDefinition::WriteToStream(const StringPiece& prefix, bool final, *out << prefix << "}"; } +ClassDefinition::Result ClassDefinition::AddMember(std::unique_ptr<ClassMember> member) { + Result result = Result::kAdded; + auto iter = indexed_members_.find(member->GetName()); + if (iter != indexed_members_.end()) { + // Overwrite the entry. + ordered_members_[iter->second].reset(); + result = Result::kOverridden; + } + + indexed_members_[member->GetName()] = ordered_members_.size(); + ordered_members_.push_back(std::move(member)); + return result; +} + bool ClassDefinition::empty() const { - for (const std::unique_ptr<ClassMember>& member : members_) { - if (!member->empty()) { + for (const std::unique_ptr<ClassMember>& member : ordered_members_) { + if (member != nullptr && !member->empty()) { return false; } } @@ -50,7 +64,7 @@ bool ClassDefinition::empty() const { void ClassDefinition::WriteToStream(const StringPiece& prefix, bool final, std::ostream* out) const { - if (members_.empty() && !create_if_empty_) { + if (empty() && !create_if_empty_) { return; } @@ -65,9 +79,14 @@ void ClassDefinition::WriteToStream(const StringPiece& prefix, bool final, std::string new_prefix = prefix.to_string(); new_prefix.append(kIndent); - for (const std::unique_ptr<ClassMember>& member : members_) { - member->WriteToStream(new_prefix, final, out); - *out << "\n"; + for (const std::unique_ptr<ClassMember>& member : ordered_members_) { + // There can be nullptr members when a member is added to the ClassDefinition + // and takes precedence over a previous member with the same name. The overridden member is + // set to nullptr. + if (member != nullptr) { + member->WriteToStream(new_prefix, final, out); + *out << "\n"; + } } *out << prefix << "}"; |