Avoid extra @FixedSize error.
Here, an error message was emitted for every field if it was emitted on
any previous field.
Bug: N/A
Test: atest aidl_unittests
Change-Id: I2dd7d9641553c212aa24b349cae233c7226806bf
diff --git a/aidl_language.cpp b/aidl_language.cpp
index 9cc4c82..219bb40 100644
--- a/aidl_language.cpp
+++ b/aidl_language.cpp
@@ -883,17 +883,18 @@
}
std::set<std::string> fieldnames;
for (const auto& v : GetFields()) {
- success = success && v->CheckValid(typenames);
+ const bool field_valid = v->CheckValid(typenames);
+ success = success && field_valid;
bool duplicated;
if (IsJavaOnlyImmutable()) {
success = success && typenames.CanBeJavaOnlyImmutable(v->GetType());
duplicated = !fieldnames.emplace(CapitalizeFirstLetter(*v, v->GetName())).second;
} else {
if (IsFixedSize()) {
- success = success && typenames.CanBeFixedSize(v->GetType());
- if (!success) {
+ if (field_valid && !typenames.CanBeFixedSize(v->GetType())) {
AIDL_ERROR(v) << "The @FixedSize parcelable '" << this->GetName() << "' has a "
<< "non-fixed size field named " << v->GetName() << ".";
+ success = false;
}
}
duplicated = !fieldnames.emplace(v->GetName()).second;
diff --git a/aidl_typenames.cpp b/aidl_typenames.cpp
index 7241208..5e5cdbd 100644
--- a/aidl_typenames.cpp
+++ b/aidl_typenames.cpp
@@ -251,9 +251,12 @@
if (IsPrimitiveTypename(name)) {
return true;
}
+ if (IsBuiltinTypename(name)) {
+ return false;
+ }
const AidlDefinedType* t = TryGetDefinedType(type.GetName());
AIDL_FATAL_IF(t == nullptr, type)
- << "Failed to look up type. Cannot determine if it can be fixed size.";
+ << "Failed to look up type. Cannot determine if it can be fixed size: " << type.GetName();
if (t->AsEnumDeclaration()) {
return true;
diff --git a/aidl_unittest.cpp b/aidl_unittest.cpp
index 04303c8..0f2f7e6 100644
--- a/aidl_unittest.cpp
+++ b/aidl_unittest.cpp
@@ -2181,6 +2181,7 @@
" ParcelFileDescriptor d;"
" IBinder e;"
" List<String> f;"
+ " int isFixedSize;"
"}");
io_delegate_.SetFileContents("Bar.aidl", "parcelable Bar { int a; }");
Options options =