add -W<warning>/-Werror CLI options
-Weverything: enable all diagnotics
-Wfoo: enable "foo"
-Wno-foo: disable "foo"
-Werror: turn diagnostic warnings into errors
-Wno-error=foo: turn "foo" into a warning
For now, only -Winterface-name is available, which checks if interface
names start with "I".
Bug: 168028537
Test: aidl_unittests
Change-Id: I31516b337dd80b9833205bf769af40e49f88d15d
diff --git a/aidl_language.cpp b/aidl_language.cpp
index 92f9d9b..52aa085 100644
--- a/aidl_language.cpp
+++ b/aidl_language.cpp
@@ -44,6 +44,7 @@
}
#endif
+using android::aidl::DiagnosticID;
using android::aidl::IoDelegate;
using android::base::Join;
using android::base::Split;
@@ -863,7 +864,7 @@
}
}
-bool AidlDefinedType::CheckValid(const AidlTypenames& typenames) const {
+bool AidlDefinedType::CheckValid(const AidlTypenames& typenames, DiagnosticsContext&) const {
if (!AidlAnnotatable::CheckValid(typenames)) {
return false;
}
@@ -991,8 +992,8 @@
AidlAnnotation::Type::JAVA_PASSTHROUGH, AidlAnnotation::Type::JAVA_ONLY_IMMUTABLE};
}
-bool AidlParcelable::CheckValid(const AidlTypenames& typenames) const {
- if (!AidlDefinedType::CheckValid(typenames)) {
+bool AidlParcelable::CheckValid(const AidlTypenames& typenames, DiagnosticsContext& diag) const {
+ if (!AidlDefinedType::CheckValid(typenames, diag)) {
return false;
}
if (!AidlParameterizable<std::string>::CheckValid()) {
@@ -1044,8 +1045,9 @@
AidlAnnotation::Type::RUST_DERIVE};
}
-bool AidlStructuredParcelable::CheckValid(const AidlTypenames& typenames) const {
- if (!AidlParcelable::CheckValid(typenames)) {
+bool AidlStructuredParcelable::CheckValid(const AidlTypenames& typenames,
+ DiagnosticsContext& diag) const {
+ if (!AidlParcelable::CheckValid(typenames, diag)) {
return false;
}
@@ -1240,8 +1242,9 @@
AidlAnnotation::Type::HIDE, AidlAnnotation::Type::JAVA_PASSTHROUGH};
}
-bool AidlEnumDeclaration::CheckValid(const AidlTypenames& typenames) const {
- if (!AidlDefinedType::CheckValid(typenames)) {
+bool AidlEnumDeclaration::CheckValid(const AidlTypenames& typenames,
+ DiagnosticsContext& diag) const {
+ if (!AidlDefinedType::CheckValid(typenames, diag)) {
return false;
}
if (!GetMembers().empty()) {
@@ -1303,9 +1306,9 @@
writer->Write("}\n");
}
-bool AidlUnionDecl::CheckValid(const AidlTypenames& typenames) const {
+bool AidlUnionDecl::CheckValid(const AidlTypenames& typenames, DiagnosticsContext& diag) const {
// visit parents
- if (!AidlParcelable::CheckValid(typenames)) {
+ if (!AidlParcelable::CheckValid(typenames, diag)) {
return false;
}
@@ -1421,8 +1424,8 @@
AidlAnnotation::Type::JAVA_PASSTHROUGH, AidlAnnotation::Type::DESCRIPTOR};
}
-bool AidlInterface::CheckValid(const AidlTypenames& typenames) const {
- if (!AidlDefinedType::CheckValid(typenames)) {
+bool AidlInterface::CheckValid(const AidlTypenames& typenames, DiagnosticsContext& diag) const {
+ if (!AidlDefinedType::CheckValid(typenames, diag)) {
return false;
}
// Has to be a pointer due to deleting copy constructor. No idea why.
@@ -1522,6 +1525,11 @@
success = success && constant->CheckValid(typenames);
}
+ if (auto name = GetName(); name.size() < 1 || name[0] != 'I') {
+ diag.Report(GetLocation(), DiagnosticID::interface_name)
+ << "Interface names should start with I.";
+ }
+
return success;
}