aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--aidl_language.h54
-rw-r--r--diagnostics.cpp32
2 files changed, 39 insertions, 47 deletions
diff --git a/aidl_language.h b/aidl_language.h
index 1492aa3d..5a248ada 100644
--- a/aidl_language.h
+++ b/aidl_language.h
@@ -87,23 +87,21 @@ class AidlEnumerator;
class AidlMethod;
class AidlArgument;
-// Interface for visitors that can traverse AidlTraversable nodes. The contract is that Visit()
-// method returns a bool which controls whether or not the traversal should be continued down to its
-// children.
+// Interface for visitors that can traverse AidlTraversable nodes.
class AidlVisitor {
public:
virtual ~AidlVisitor() = default;
- virtual bool Visit(const AidlDocument&) { return true; }
- virtual bool Visit(const AidlInterface&) { return true; }
- virtual bool Visit(const AidlParcelable&) { return true; }
- virtual bool Visit(const AidlStructuredParcelable&) { return true; }
- virtual bool Visit(const AidlUnionDecl&) { return true; }
- virtual bool Visit(const AidlEnumDeclaration&) { return true; }
- virtual bool Visit(const AidlEnumerator&) { return true; }
- virtual bool Visit(const AidlMethod&) { return true; }
- virtual bool Visit(const AidlVariableDeclaration&) { return true; }
- virtual bool Visit(const AidlConstantDeclaration&) { return true; }
- virtual bool Visit(const AidlArgument&) { return true; }
+ virtual void Visit(const AidlDocument&) {}
+ virtual void Visit(const AidlInterface&) {}
+ virtual void Visit(const AidlParcelable&) {}
+ virtual void Visit(const AidlStructuredParcelable&) {}
+ virtual void Visit(const AidlUnionDecl&) {}
+ virtual void Visit(const AidlEnumDeclaration&) {}
+ virtual void Visit(const AidlEnumerator&) {}
+ virtual void Visit(const AidlMethod&) {}
+ virtual void Visit(const AidlVariableDeclaration&) {}
+ virtual void Visit(const AidlConstantDeclaration&) {}
+ virtual void Visit(const AidlArgument&) {}
};
// Anything that is locatable in a .aidl file.
@@ -136,7 +134,7 @@ class AidlTraversable {
virtual ~AidlTraversable() = default;
virtual void TraverseChildren(std::function<void(const AidlTraversable&)> traverse) const = 0;
- virtual bool DispatchVisit(AidlVisitor&) const = 0;
+ virtual void DispatchVisit(AidlVisitor&) const = 0;
};
// unique_ptr<AidlTypeSpecifier> for type arugment,
@@ -417,7 +415,7 @@ class AidlMember : public AidlNode, public AidlTraversable {
}
void TraverseChildren(std::function<void(const AidlTraversable&)> traverse) const = 0;
- bool DispatchVisit(AidlVisitor& v) const = 0;
+ void DispatchVisit(AidlVisitor& v) const = 0;
};
// TODO: This class is used for method arguments and also parcelable fields,
@@ -470,7 +468,7 @@ class AidlVariableDeclaration : public AidlMember {
void TraverseChildren(std::function<void(const AidlTraversable&)>) const override {
// no children to visit
}
- bool DispatchVisit(AidlVisitor& v) const override { return v.Visit(*this); }
+ void DispatchVisit(AidlVisitor& v) const override { v.Visit(*this); }
private:
std::unique_ptr<AidlTypeSpecifier> type_;
@@ -509,7 +507,7 @@ class AidlArgument : public AidlVariableDeclaration {
void TraverseChildren(std::function<void(const AidlTraversable&)>) const override {
// no children to visit
}
- bool DispatchVisit(AidlVisitor& v) const override { return v.Visit(*this); }
+ void DispatchVisit(AidlVisitor& v) const override { v.Visit(*this); }
private:
Direction direction_;
@@ -766,7 +764,7 @@ class AidlConstantDeclaration : public AidlMember {
void TraverseChildren(std::function<void(const AidlTraversable&)>) const override {
// no children to traverse
}
- bool DispatchVisit(AidlVisitor& v) const override { return v.Visit(*this); }
+ void DispatchVisit(AidlVisitor& v) const override { v.Visit(*this); }
private:
const unique_ptr<AidlTypeSpecifier> type_;
@@ -835,7 +833,7 @@ class AidlMethod : public AidlMember {
traverse(*a);
}
}
- bool DispatchVisit(AidlVisitor& v) const override { return v.Visit(*this); }
+ void DispatchVisit(AidlVisitor& v) const override { v.Visit(*this); }
private:
bool oneway_;
@@ -941,7 +939,7 @@ class AidlDefinedType : public AidlAnnotatable, public AidlTraversable {
const std::vector<const AidlMember*>& GetMembers() const { return members_; }
void TraverseChildren(std::function<void(const AidlTraversable&)>) const = 0;
- bool DispatchVisit(AidlVisitor& v) const = 0;
+ void DispatchVisit(AidlVisitor& v) const = 0;
protected:
// utility for subclasses with getter names
@@ -992,7 +990,7 @@ class AidlParcelable : public AidlDefinedType, public AidlParameterizable<std::s
traverse(*c);
}
}
- bool DispatchVisit(AidlVisitor& v) const override { return v.Visit(*this); }
+ void DispatchVisit(AidlVisitor& v) const override { v.Visit(*this); }
private:
std::string cpp_header_;
@@ -1027,7 +1025,7 @@ class AidlStructuredParcelable : public AidlParcelable {
traverse(*c);
}
}
- bool DispatchVisit(AidlVisitor& v) const override { return v.Visit(*this); }
+ void DispatchVisit(AidlVisitor& v) const override { v.Visit(*this); }
};
class AidlEnumerator : public AidlNode, public AidlTraversable {
@@ -1056,7 +1054,7 @@ class AidlEnumerator : public AidlNode, public AidlTraversable {
void TraverseChildren(std::function<void(const AidlTraversable&)>) const override {
// no children to traverse
}
- bool DispatchVisit(AidlVisitor& v) const override { return v.Visit(*this); }
+ void DispatchVisit(AidlVisitor& v) const override { v.Visit(*this); }
private:
const std::string name_;
@@ -1099,7 +1097,7 @@ class AidlEnumDeclaration : public AidlDefinedType {
traverse(*c);
}
}
- bool DispatchVisit(AidlVisitor& v) const override { return v.Visit(*this); }
+ void DispatchVisit(AidlVisitor& v) const override { v.Visit(*this); }
private:
@@ -1137,7 +1135,7 @@ class AidlUnionDecl : public AidlParcelable {
traverse(*c);
}
}
- bool DispatchVisit(AidlVisitor& v) const override { return v.Visit(*this); }
+ void DispatchVisit(AidlVisitor& v) const override { v.Visit(*this); }
};
class AidlInterface final : public AidlDefinedType {
@@ -1170,7 +1168,7 @@ class AidlInterface final : public AidlDefinedType {
traverse(*c);
}
}
- bool DispatchVisit(AidlVisitor& v) const override { return v.Visit(*this); }
+ void DispatchVisit(AidlVisitor& v) const override { v.Visit(*this); }
};
class AidlImport : public AidlNode {
@@ -1217,7 +1215,7 @@ class AidlDocument : public AidlNode, public AidlTraversable {
traverse(*t);
}
}
- bool DispatchVisit(AidlVisitor& v) const override { return v.Visit(*this); }
+ void DispatchVisit(AidlVisitor& v) const override { v.Visit(*this); }
private:
const std::vector<std::unique_ptr<AidlImport>> imports_;
diff --git a/diagnostics.cpp b/diagnostics.cpp
index 5656f920..5579b70a 100644
--- a/diagnostics.cpp
+++ b/diagnostics.cpp
@@ -99,21 +99,20 @@ class DiagnosticsVisitor : public AidlVisitor {
struct Hook : public AidlVisitor {
Fun fun;
Hook(Fun fun) : fun(fun) {}
- bool Visit(const AidlInterface& a) override { fun(a); return true; }
- bool Visit(const AidlEnumDeclaration& a) override { fun(a); return true; }
- bool Visit(const AidlStructuredParcelable& a) override { fun(a); return true; }
- bool Visit(const AidlUnionDecl& a) override { fun(a); return true; }
- bool Visit(const AidlParcelable& a) override { fun(a); return true; }
- bool Visit(const AidlMethod& a) override { fun(a.GetType()); return true; }
+ void Visit(const AidlInterface& a) override { fun(a); }
+ void Visit(const AidlEnumDeclaration& a) override { fun(a); }
+ void Visit(const AidlStructuredParcelable& a) override { fun(a); }
+ void Visit(const AidlUnionDecl& a) override { fun(a); }
+ void Visit(const AidlParcelable& a) override { fun(a); }
+ void Visit(const AidlMethod& a) override { fun(a.GetType()); }
};
Hook suppress{std::bind(&DiagnosticsContext::Suppress, &diag, _1)};
Hook restore{std::bind(&DiagnosticsContext::Restore, &diag, _1)};
std::function<void(const AidlTraversable&)> topDown =
[&topDown, &suppress, &restore, visitor](const AidlTraversable& a) {
a.DispatchVisit(suppress);
- if (a.DispatchVisit(*visitor)) {
- a.TraverseChildren(topDown);
- }
+ a.DispatchVisit(*visitor);
+ a.TraverseChildren(topDown);
a.DispatchVisit(restore);
};
topDown(doc);
@@ -124,18 +123,17 @@ class DiagnosticsVisitor : public AidlVisitor {
struct DiagnoseInterfaceName : DiagnosticsVisitor {
DiagnoseInterfaceName(DiagnosticsContext& diag) : DiagnosticsVisitor(diag) {}
- bool Visit(const AidlInterface& i) override {
+ void Visit(const AidlInterface& i) override {
if (auto name = i.GetName(); name.size() < 1 || name[0] != 'I') {
diag.Report(i.GetLocation(), DiagnosticID::interface_name)
<< "Interface names should start with I.";
}
- return true;
}
};
struct DiagnoseEnumZero : DiagnosticsVisitor {
DiagnoseEnumZero(DiagnosticsContext& diag) : DiagnosticsVisitor(diag) {}
- bool Visit(const AidlEnumDeclaration& e) override {
+ void Visit(const AidlEnumDeclaration& e) override {
AIDL_FATAL_IF(e.GetEnumerators().empty(), e)
<< "The enum '" << e.GetName() << "' has no enumerators.";
const auto& first = e.GetEnumerators()[0];
@@ -145,38 +143,34 @@ struct DiagnoseEnumZero : DiagnosticsVisitor {
<< "The first enumerator '" << first->GetName() << "' should be 0, but it is "
<< first_value << ".";
}
- return true;
}
};
struct DiagnoseInoutParameter : DiagnosticsVisitor {
DiagnoseInoutParameter(DiagnosticsContext& diag) : DiagnosticsVisitor(diag) {}
- bool Visit(const AidlArgument& a) override {
+ void Visit(const AidlArgument& a) override {
if (a.GetDirection() == AidlArgument::INOUT_DIR) {
diag.Report(a.GetLocation(), DiagnosticID::inout_parameter)
<< a.GetName()
<< " is 'inout'. Avoid inout parameters. This is somewhat confusing for clients "
"because although the parameters are 'in', they look out 'out' parameters.";
}
- return true;
}
};
struct DiagnoseConstName : DiagnosticsVisitor {
DiagnoseConstName(DiagnosticsContext& diag) : DiagnosticsVisitor(diag) {}
- bool Visit(const AidlEnumerator& e) override {
+ void Visit(const AidlEnumerator& e) override {
if (ToUpper(e.GetName()) != e.GetName()) {
diag.Report(e.GetLocation(), DiagnosticID::const_name)
<< "Enum values should be named in upper cases: " << ToUpper(e.GetName());
}
- return true;
}
- bool Visit(const AidlConstantDeclaration& c) override {
+ void Visit(const AidlConstantDeclaration& c) override {
if (ToUpper(c.GetName()) != c.GetName()) {
diag.Report(c.GetLocation(), DiagnosticID::const_name)
<< "Constants should be named in upper cases: " << ToUpper(c.GetName());
}
- return true;
}
static std::string ToUpper(std::string name) {
for (auto& c : name) c = std::toupper(c);