diff --git a/bin/test/data/log/test_log.txt b/bin/test/data/log/test_log.txt index bb9979c1..99700d16 100644 --- a/bin/test/data/log/test_log.txt +++ b/bin/test/data/log/test_log.txt @@ -89,7 +89,7 @@ Storage.cpp INFO: method: Class::isMethod Storage.cpp INFO: namespace: utility Storage.cpp INFO: enum: Category Storage.cpp INFO: enum: Class::Category -Storage.cpp INFO: enum field: VALUE +Storage.cpp INFO: enum constant: VALUE Storage.cpp INFO: class: ClassA Storage.cpp INFO: class: ClassB Storage.cpp INFO: inheritance: ClassB : ClassA diff --git a/src/app/qt/view/graphElements/QtGraphNode.cpp b/src/app/qt/view/graphElements/QtGraphNode.cpp index 8a3d3d9b..a760b9ba 100644 --- a/src/app/qt/view/graphElements/QtGraphNode.cpp +++ b/src/app/qt/view/graphElements/QtGraphNode.cpp @@ -41,6 +41,7 @@ QFont QtGraphNode::getFontForNodeType(Node::NodeType type) case Node::NODE_UNDEFINED_VARIABLE: case Node::NODE_GLOBAL_VARIABLE: case Node::NODE_FIELD: + case Node::NODE_ENUM_CONSTANT: font.setPixelSize(11); break; } @@ -339,6 +340,7 @@ void QtGraphNode::setStyle() useUndefinedColor = true; case Node::NODE_GLOBAL_VARIABLE: case Node::NODE_FIELD: + case Node::NODE_ENUM_CONSTANT: if (m_isActive || m_isHovering) { color = "#62b29d"; diff --git a/src/lib/component/controller/GraphController.cpp b/src/lib/component/controller/GraphController.cpp index 7fde96be..238181cb 100644 --- a/src/lib/component/controller/GraphController.cpp +++ b/src/lib/component/controller/GraphController.cpp @@ -494,6 +494,7 @@ GraphController::Margins GraphController::getMarginsForDummyNode(DummyNode& node case Node::NODE_UNDEFINED_VARIABLE: case Node::NODE_GLOBAL_VARIABLE: case Node::NODE_FIELD: + case Node::NODE_ENUM_CONSTANT: margins.left = margins.right = 5; margins.top = margins.bottom = 10; diff --git a/src/lib/data/Storage.cpp b/src/lib/data/Storage.cpp index b64ba3e9..90a86b4c 100644 --- a/src/lib/data/Storage.cpp +++ b/src/lib/data/Storage.cpp @@ -330,11 +330,11 @@ Id Storage::onEnumParsed( return node->getId(); } -Id Storage::onEnumFieldParsed(const ParseLocation& location, const std::vector& nameHierarchy) +Id Storage::onEnumConstantParsed(const ParseLocation& location, const std::vector& nameHierarchy) { - log("enum field", utility::join(nameHierarchy, "::"), location); + log("enum constant", utility::join(nameHierarchy, "::"), location); - Node* node = addNodeHierarchy(Node::NODE_FIELD, nameHierarchy); + Node* node = addNodeHierarchy(Node::NODE_ENUM_CONSTANT, nameHierarchy); addTokenLocation(node, location); return node->getId(); @@ -438,16 +438,16 @@ Id Storage::onGlobalVariableUsageParsed( return edge->getId(); } -Id Storage::onEnumFieldUsageParsed( +Id Storage::onEnumConstantUsageParsed( const ParseLocation& location, const ParseFunction& user, const std::vector& usedNameHierarchy ){ - return onVariableUsageParsed("enum field usage", location, user, usedNameHierarchy); + return onVariableUsageParsed("enum constant usage", location, user, usedNameHierarchy); } -Id Storage::onEnumFieldUsageParsed( +Id Storage::onEnumConstantUsageParsed( const ParseLocation& location, const ParseVariable& user, const std::vector& usedNameHierarchy ){ - log("enum field usage", user.getFullName() + " -> " + utility::join(usedNameHierarchy, "::"), location); + log("enum constant usage", user.getFullName() + " -> " + utility::join(usedNameHierarchy, "::"), location); Node* userNode = addNodeHierarchy(Node::NODE_UNDEFINED_VARIABLE, user.nameHierarchy); Node* usedNode = addNodeHierarchy(Node::NODE_UNDEFINED_VARIABLE, usedNameHierarchy); diff --git a/src/lib/data/Storage.h b/src/lib/data/Storage.h index 27c9c1ed..08e86de9 100644 --- a/src/lib/data/Storage.h +++ b/src/lib/data/Storage.h @@ -58,7 +58,7 @@ public: virtual Id onEnumParsed( const ParseLocation& location, const std::vector& nameHierarchy, AccessType access, const ParseLocation& scopeLocation); - virtual Id onEnumFieldParsed(const ParseLocation& location, const std::vector& nameHierarchy); + virtual Id onEnumConstantParsed(const ParseLocation& location, const std::vector& nameHierarchy); virtual Id onInheritanceParsed( const ParseLocation& location, const std::vector& nameHierarchy, @@ -77,9 +77,9 @@ public: const ParseLocation& location, const ParseFunction& user, const std::vector& usedNameHierarchy); virtual Id onGlobalVariableUsageParsed( const ParseLocation& location, const ParseVariable& user, const std::vector& usedNameHierarchy); - virtual Id onEnumFieldUsageParsed( + virtual Id onEnumConstantUsageParsed( const ParseLocation& location, const ParseFunction& user, const std::vector& usedNameHierarchy); - virtual Id onEnumFieldUsageParsed( + virtual Id onEnumConstantUsageParsed( const ParseLocation& location, const ParseVariable& user, const std::vector& usedNameHierarchy); virtual Id onTypeUsageParsed(const ParseTypeUsage& type, const ParseFunction& function); virtual Id onTypeUsageParsed(const ParseTypeUsage& type, const ParseVariable& variable); diff --git a/src/lib/data/graph/Edge.cpp b/src/lib/data/graph/Edge.cpp index 3e78897a..8f04ee90 100644 --- a/src/lib/data/graph/Edge.cpp +++ b/src/lib/data/graph/Edge.cpp @@ -190,7 +190,7 @@ bool Edge::checkType() const case EDGE_MEMBER: if (!m_from->isType(typeMask | Node::NODE_NAMESPACE) || (!m_from->isType(Node::NODE_UNDEFINED | Node::NODE_NAMESPACE) && m_to->isType(Node::NODE_NAMESPACE)) || - (m_from->isType(Node::NODE_ENUM) && !m_to->isType(Node::NODE_FIELD))) + (m_from->isType(Node::NODE_ENUM) && !m_to->isType(Node::NODE_ENUM_CONSTANT))) { break; } @@ -235,7 +235,7 @@ bool Edge::checkType() const return true; case EDGE_USAGE: - if (!m_from->isType(functionMask) || !m_to->isType(variableMask)) + if (!m_from->isType(functionMask) || !m_to->isType(variableMask | Node::NODE_ENUM_CONSTANT)) { break; } diff --git a/src/lib/data/graph/Node.cpp b/src/lib/data/graph/Node.cpp index d8c106c1..3f16198c 100644 --- a/src/lib/data/graph/Node.cpp +++ b/src/lib/data/graph/Node.cpp @@ -336,6 +336,8 @@ std::string Node::getTypeString(NodeType type) const return "namespace"; case NODE_ENUM: return "enum"; + case NODE_ENUM_CONSTANT: + return "enum constant"; case NODE_TYPEDEF: return "typedef"; case NODE_TEMPLATE_PARAMETER_TYPE: diff --git a/src/lib/data/graph/Node.h b/src/lib/data/graph/Node.h index 7a5020c4..9234dcef 100644 --- a/src/lib/data/graph/Node.h +++ b/src/lib/data/graph/Node.h @@ -26,6 +26,7 @@ public: NODE_UNDEFINED_FUNCTION = 0x2, NODE_UNDEFINED_VARIABLE = 0x4, NODE_UNDEFINED_TYPE = 0x8, + NODE_STRUCT = 0x10, NODE_CLASS = 0x20, NODE_GLOBAL_VARIABLE = 0x40, @@ -34,8 +35,9 @@ public: NODE_METHOD = 0x200, NODE_NAMESPACE = 0x400, NODE_ENUM = 0x800, - NODE_TYPEDEF = 0x1000, - NODE_TEMPLATE_PARAMETER_TYPE = 0x2000 + NODE_ENUM_CONSTANT = 0x1000, + NODE_TYPEDEF = 0x2000, + NODE_TEMPLATE_PARAMETER_TYPE = 0x4000 }; Node(NodeType type, std::shared_ptr nameComponent); diff --git a/src/lib/data/graph/filter/GraphFilterConductor.cpp b/src/lib/data/graph/filter/GraphFilterConductor.cpp index 19ceed41..023aa3b3 100644 --- a/src/lib/data/graph/filter/GraphFilterConductor.cpp +++ b/src/lib/data/graph/filter/GraphFilterConductor.cpp @@ -125,6 +125,9 @@ void GraphFilterConductor::filterCommandNode(const QueryCommand* node, const Fil case QueryCommand::COMMAND_ENUM: GraphFilterCommandNodeType(Node::NODE_ENUM).apply(in, out); break; + case QueryCommand::COMMAND_ENUM_CONSTANT: + GraphFilterCommandNodeType(Node::NODE_ENUM_CONSTANT).apply(in, out); + break; case QueryCommand::COMMAND_TYPEDEF: GraphFilterCommandNodeType(Node::NODE_TYPEDEF).apply(in, out); break; diff --git a/src/lib/data/parser/ParserClient.h b/src/lib/data/parser/ParserClient.h index ef42dc6b..39305ae7 100644 --- a/src/lib/data/parser/ParserClient.h +++ b/src/lib/data/parser/ParserClient.h @@ -77,7 +77,7 @@ public: virtual Id onEnumParsed( const ParseLocation& location, const std::vector& nameHierarchy, AccessType access, const ParseLocation& scopeLocation) = 0; - virtual Id onEnumFieldParsed(const ParseLocation& location, const std::vector& nameHierarchy) = 0; + virtual Id onEnumConstantParsed(const ParseLocation& location, const std::vector& nameHierarchy) = 0; virtual Id onInheritanceParsed( const ParseLocation& location, const std::vector& nameHierarchy, @@ -93,9 +93,9 @@ public: const ParseLocation& location, const ParseFunction& user, const std::vector& usedNameHierarchy) = 0; virtual Id onGlobalVariableUsageParsed( const ParseLocation& location, const ParseVariable& user, const std::vector& usedNameHierarchy) = 0; - virtual Id onEnumFieldUsageParsed( + virtual Id onEnumConstantUsageParsed( const ParseLocation& location, const ParseFunction& user, const std::vector& usedNameHierarchy) = 0; - virtual Id onEnumFieldUsageParsed( + virtual Id onEnumConstantUsageParsed( const ParseLocation& location, const ParseVariable& user, const std::vector& usedNameHierarchy) = 0; virtual Id onTypeUsageParsed(const ParseTypeUsage& type, const ParseFunction& function) = 0; virtual Id onTypeUsageParsed(const ParseTypeUsage& type, const ParseVariable& variable) = 0; diff --git a/src/lib/data/parser/cxx/ASTVisitor.cpp b/src/lib/data/parser/cxx/ASTVisitor.cpp index 1c25858c..35b91700 100644 --- a/src/lib/data/parser/cxx/ASTVisitor.cpp +++ b/src/lib/data/parser/cxx/ASTVisitor.cpp @@ -271,7 +271,7 @@ bool ASTVisitor::VisitEnumConstantDecl(clang::EnumConstantDecl* declaration) { if (isLocatedInMainFile(declaration)) { - m_client->onEnumFieldParsed( + m_client->onEnumConstantParsed( getParseLocation(declaration->getSourceRange()), utility::getDeclNameHierarchy(declaration) ); @@ -593,7 +593,7 @@ void ASTVisitor::VisitEnumExprInDeclBody(clang::FunctionDecl* decl, clang::DeclR const std::string exprName = expr->getNameInfo().getAsString(); parseLocation.endColumnNumber += exprName.size() - 1; - m_client->onEnumFieldUsageParsed( + m_client->onEnumConstantUsageParsed( parseLocation, getParseFunction(decl), utility::getDeclNameHierarchy(expr->getDecl()) @@ -607,7 +607,7 @@ void ASTVisitor::VisitEnumExprInDeclBody(clang::VarDecl* decl, clang::DeclRefExp const std::string exprName = expr->getNameInfo().getAsString(); parseLocation.endColumnNumber += exprName.size() - 1; - m_client->onEnumFieldUsageParsed( + m_client->onEnumConstantUsageParsed( parseLocation, getParseVariable(decl), utility::getDeclNameHierarchy(expr->getDecl()) diff --git a/src/lib/data/query/QueryCommand.cpp b/src/lib/data/query/QueryCommand.cpp index 7142a033..80955810 100644 --- a/src/lib/data/query/QueryCommand.cpp +++ b/src/lib/data/query/QueryCommand.cpp @@ -25,6 +25,7 @@ std::map QueryCommand::getCommandTypeMap commandMap.emplace("namespace", COMMAND_NAMESPACE); commandMap.emplace("struct", COMMAND_STRUCT); commandMap.emplace("enum", COMMAND_ENUM); + commandMap.emplace("enum-constant", COMMAND_ENUM_CONSTANT); commandMap.emplace("typedef", COMMAND_TYPEDEF); commandMap.emplace("const", COMMAND_CONST); diff --git a/src/lib/data/query/QueryCommand.h b/src/lib/data/query/QueryCommand.h index ca9917b6..cc011043 100644 --- a/src/lib/data/query/QueryCommand.h +++ b/src/lib/data/query/QueryCommand.h @@ -23,6 +23,7 @@ public: COMMAND_NAMESPACE, COMMAND_STRUCT, COMMAND_ENUM, + COMMAND_ENUM_CONSTANT, COMMAND_TYPEDEF, COMMAND_CONST, diff --git a/src/test/CxxParserTestSuite.h b/src/test/CxxParserTestSuite.h index 6b427180..87e76975 100644 --- a/src/test/CxxParserTestSuite.h +++ b/src/test/CxxParserTestSuite.h @@ -388,7 +388,7 @@ public: TS_ASSERT_EQUALS(client->enums[0], "n::Z <3:2 <3:7 3:7> 5:2>"); } - void test_cxx_parser_finds_enum_field_in_global_enum() + void test_cxx_parser_finds_enum_constant_in_global_enum() { std::shared_ptr client = parseCode( "enum E\n" @@ -397,8 +397,8 @@ public: "};\n" ); - TS_ASSERT_EQUALS(client->enumFields.size(), 1); - TS_ASSERT_EQUALS(client->enumFields[0], "E::P <3:2 3:2>"); + TS_ASSERT_EQUALS(client->enumConstants.size(), 1); + TS_ASSERT_EQUALS(client->enumConstants[0], "E::P <3:2 3:2>"); } void test_cxx_parser_finds_typedef_in_global_namespace() @@ -1458,7 +1458,7 @@ public: TS_ASSERT_EQUALS(client->fields[0], "private A::TestType A::foo <9:11 9:13>"); } - void test_cxx_parser_finds_enum_fields_in_template_class() + void test_cxx_parser_finds_enum_constants_in_template_class() { std::shared_ptr client = parseCode( "template \n" @@ -1472,9 +1472,9 @@ public: "};\n" ); - TS_ASSERT_EQUALS(client->enumFields.size(), 2); - TS_ASSERT_EQUALS(client->enumFields[0], "A::TestType::TEST_ONE <6:3 6:3>"); - TS_ASSERT_EQUALS(client->enumFields[1], "A::TestType::TEST_TWO <7:3 7:3>"); + TS_ASSERT_EQUALS(client->enumConstants.size(), 2); + TS_ASSERT_EQUALS(client->enumConstants[0], "A::TestType::TEST_ONE <6:3 6:3>"); + TS_ASSERT_EQUALS(client->enumConstants[1], "A::TestType::TEST_TWO <7:3 7:3>"); } void test_cxx_parser_finds_correct_field_member_type_of_nested_template_class_in_declaration_____typedef() @@ -1625,7 +1625,7 @@ public: TS_ASSERT_EQUALS(client.typedefs.size(), 1); TS_ASSERT_EQUALS(client.classes.size(), 4); TS_ASSERT_EQUALS(client.enums.size(), 1); - TS_ASSERT_EQUALS(client.enumFields.size(), 2); + TS_ASSERT_EQUALS(client.enumConstants.size(), 2); TS_ASSERT_EQUALS(client.functions.size(), 2); TS_ASSERT_EQUALS(client.fields.size(), 4); TS_ASSERT_EQUALS(client.globalVariables.size(), 2); @@ -1742,9 +1742,9 @@ private: return 0; } - virtual Id onEnumFieldParsed(const ParseLocation& location, const std::vector& nameHierarchy) + virtual Id onEnumConstantParsed(const ParseLocation& location, const std::vector& nameHierarchy) { - enumFields.push_back(addLocationSuffix(utility::join(nameHierarchy, "::"), location)); + enumConstants.push_back(addLocationSuffix(utility::join(nameHierarchy, "::"), location)); return 0; } @@ -1797,14 +1797,14 @@ private: return 0; } - virtual Id onEnumFieldUsageParsed( + virtual Id onEnumConstantUsageParsed( const ParseLocation& location, const ParseFunction& user, const std::vector& usedNameHierarchy) { usages.push_back(addLocationSuffix(functionStr(user) + " -> " + utility::join(usedNameHierarchy, "::"), location)); return 0; } - virtual Id onEnumFieldUsageParsed( + virtual Id onEnumConstantUsageParsed( const ParseLocation& location, const ParseVariable& user, const std::vector& usedNameHierarchy) { usages.push_back(addLocationSuffix(variableStr(user) + " -> " + utility::join(usedNameHierarchy, "::"), location)); @@ -1887,7 +1887,7 @@ private: std::vector typedefs; std::vector classes; std::vector enums; - std::vector enumFields; + std::vector enumConstants; std::vector functions; std::vector fields; std::vector globalVariables; diff --git a/src/test/StorageTestSuite.h b/src/test/StorageTestSuite.h index 5f47ec76..601de9b3 100644 --- a/src/test/StorageTestSuite.h +++ b/src/test/StorageTestSuite.h @@ -342,15 +342,15 @@ public: TS_ASSERT_EQUALS(memberEdge->getFrom()->getType(), Node::NODE_UNDEFINED); } - void test_storage_saves_enum_field() + void test_storage_saves_enum_constant() { TestStorage storage; - Id id = storage.onEnumFieldParsed(validLocation(1), utility::splitToVector("VALUE", "::")); + Id id = storage.onEnumConstantParsed(validLocation(1), utility::splitToVector("VALUE", "::")); Node* node = storage.getNodeWithId(id); TS_ASSERT(node); TS_ASSERT_EQUALS(node->getFullName(), "VALUE"); - TS_ASSERT_EQUALS(node->getType(), Node::NODE_FIELD); + TS_ASSERT_EQUALS(node->getType(), Node::NODE_ENUM_CONSTANT); std::vector locations = storage.getLocationsForId(id); TS_ASSERT_EQUALS(locations.size(), 1);