Added initial abstract class rendering
This commit is contained in:
@@ -63,6 +63,10 @@ struct method_argument {
|
||||
|
||||
struct class_method : public class_element {
|
||||
std::vector<method_argument> arguments;
|
||||
bool is_pure_virtual{false};
|
||||
bool is_virtual{false};
|
||||
bool is_const{false};
|
||||
bool is_defaulted{false};
|
||||
};
|
||||
|
||||
struct class_parent {
|
||||
@@ -89,6 +93,14 @@ struct class_ : public element {
|
||||
std::vector<std::string> inner_classes;
|
||||
|
||||
std::vector<class_relationship> relationships;
|
||||
|
||||
bool is_abstract() const
|
||||
{
|
||||
// TODO check if all base abstract methods are overriden
|
||||
// with non-abstract methods
|
||||
return std::any_of(methods.begin(), methods.end(),
|
||||
[](const auto &method) { return method.is_pure_virtual; });
|
||||
}
|
||||
};
|
||||
|
||||
struct enum_ : public element {
|
||||
|
||||
@@ -84,6 +84,15 @@ enum CXChildVisitResult visit_if_cursor_valid(
|
||||
ret = CXChildVisit_Recurse;
|
||||
}
|
||||
}
|
||||
else if (cursor.is_declaration()) {
|
||||
if (cursor.is_method_pure_virtual()) {
|
||||
f(cursor);
|
||||
ret = CXChildVisit_Continue;
|
||||
}
|
||||
else {
|
||||
ret = CXChildVisit_Recurse;
|
||||
}
|
||||
}
|
||||
else {
|
||||
ret = CXChildVisit_Continue;
|
||||
}
|
||||
@@ -143,7 +152,11 @@ static enum CXChildVisitResult class_visitor(
|
||||
visit_if_cursor_valid(cursor, [c](cx::cursor cursor) {
|
||||
class_method m;
|
||||
m.name = cursor.spelling();
|
||||
m.type = cursor.type().spelling();
|
||||
m.type = cursor.type().result_type().spelling();
|
||||
m.is_pure_virtual = cursor.is_method_pure_virtual();
|
||||
m.is_virtual = cursor.is_method_virtual();
|
||||
m.is_const = cursor.is_method_const();
|
||||
m.is_defaulted = cursor.is_method_defaulted();
|
||||
|
||||
spdlog::info("Adding method {} {}::{}()", m.type, c->name,
|
||||
cursor.spelling());
|
||||
|
||||
Reference in New Issue
Block a user