Merge "Simplify the return value of CompareCommonRecordFields" am: 16e50ed2a6

Original change: https://android-review.googlesource.com/c/platform/development/+/2420999

Change-Id: I418617fdebaafbb626d50c08435b0ad99bee90e2
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Hsin-Yi Chen
2023-02-16 03:14:53 +00:00
committed by Automerger Merge Worker
2 changed files with 20 additions and 35 deletions

View File

@@ -366,28 +366,19 @@ static bool CompareSizeAndAlignment(const TypeIR *old_type,
old_type->GetAlignment() == new_type->GetAlignment(); old_type->GetAlignment() == new_type->GetAlignment();
} }
DiffStatusPair<std::unique_ptr<RecordFieldDiffIR>> DiffStatus AbiDiffHelper::CompareCommonRecordFields(
AbiDiffHelper::CompareCommonRecordFields( const RecordFieldIR *old_field, const RecordFieldIR *new_field,
const RecordFieldIR *old_field, std::deque<std::string> *type_queue, DiffMessageIR::DiffKind diff_kind) {
const RecordFieldIR *new_field, DiffStatus field_diff_status = CompareAndDumpTypeDiff(
std::deque<std::string> *type_queue, old_field->GetReferencedType(), new_field->GetReferencedType(),
DiffMessageIR::DiffKind diff_kind) { type_queue, diff_kind);
DiffStatus field_diff_status =
CompareAndDumpTypeDiff(old_field->GetReferencedType(),
new_field->GetReferencedType(),
type_queue, diff_kind);
if (old_field->GetOffset() != new_field->GetOffset() || if (old_field->GetOffset() != new_field->GetOffset() ||
// TODO: Should this be an inquality check instead ? Some compilers can // TODO: Should this be an inquality check instead ? Some compilers can
// make signatures dependant on absolute values of access specifiers. // make signatures dependant on absolute values of access specifiers.
IsAccessDowngraded(old_field->GetAccess(), new_field->GetAccess()) || IsAccessDowngraded(old_field->GetAccess(), new_field->GetAccess())) {
field_diff_status.IsDirectDiff()) { field_diff_status.CombineWith(DiffStatus::kDirectDiff);
return std::make_pair(
DiffStatus::kDirectDiff,
std::make_unique<RecordFieldDiffIR>(old_field, new_field));
} }
return std::make_pair(field_diff_status, nullptr); return field_diff_status;
} }
// This function filters out the pairs of old and new fields that meet the // This function filters out the pairs of old and new fields that meet the
@@ -435,9 +426,8 @@ void AbiDiffHelper::FilterOutRenamedRecordFields(
continue; continue;
} }
auto comparison_result = if (CompareCommonRecordFields(*old_it, *new_it, type_queue, diff_kind)
CompareCommonRecordFields(*old_it, *new_it, type_queue, diff_kind); .IsDirectDiff()) {
if (comparison_result.second != nullptr) {
out_old_fields.emplace_back(*old_it); out_old_fields.emplace_back(*old_it);
out_new_fields.emplace_back(*new_it); out_new_fields.emplace_back(*new_it);
} }
@@ -480,14 +470,14 @@ RecordFieldDiffResult AbiDiffHelper::CompareRecordFields(
utils::FindCommonElements(old_fields_map, new_fields_map); utils::FindCommonElements(old_fields_map, new_fields_map);
bool common_field_diff_exists = false; bool common_field_diff_exists = false;
for (auto &&common_fields : cf) { for (auto &&common_fields : cf) {
auto diffed_field_ptr = CompareCommonRecordFields( DiffStatus field_diff_status = CompareCommonRecordFields(
common_fields.first, common_fields.second, type_queue, diff_kind); common_fields.first, common_fields.second, type_queue, diff_kind);
if (diffed_field_ptr.first.HasDiff()) { if (field_diff_status.HasDiff()) {
common_field_diff_exists = true; common_field_diff_exists = true;
} }
if (diffed_field_ptr.second != nullptr) { if (field_diff_status.IsDirectDiff()) {
result.diffed_fields.emplace_back( result.diffed_fields.emplace_back(common_fields.first,
std::move(*(diffed_field_ptr.second.release()))); common_fields.second);
} }
} }
// Determine DiffStatus. // Determine DiffStatus.

View File

@@ -63,9 +63,6 @@ class DiffStatus {
Status status_; Status status_;
}; };
template <typename T>
using DiffStatusPair = std::pair<DiffStatus, T>;
struct RecordFieldDiffResult { struct RecordFieldDiffResult {
DiffStatus status = DiffStatus::kNoDiff; DiffStatus status = DiffStatus::kNoDiff;
std::vector<RecordFieldDiffIR> diffed_fields; std::vector<RecordFieldDiffIR> diffed_fields;
@@ -181,12 +178,10 @@ class AbiDiffHelper {
FixupDiffedFieldTypeIds( FixupDiffedFieldTypeIds(
const std::vector<RecordFieldDiffIR> &field_diffs); const std::vector<RecordFieldDiffIR> &field_diffs);
DiffStatusPair<std::unique_ptr<RecordFieldDiffIR>> DiffStatus CompareCommonRecordFields(const RecordFieldIR *old_field,
CompareCommonRecordFields( const RecordFieldIR *new_field,
const RecordFieldIR *old_field, std::deque<std::string> *type_queue,
const RecordFieldIR *new_field, IRDiffDumper::DiffKind diff_kind);
std::deque<std::string> *type_queue,
IRDiffDumper::DiffKind diff_kind);
void FilterOutRenamedRecordFields( void FilterOutRenamedRecordFields(
std::deque<std::string> *type_queue, DiffMessageIR::DiffKind diff_kind, std::deque<std::string> *type_queue, DiffMessageIR::DiffKind diff_kind,