data: added Node type NODE_ENUM_CONSTANT
This commit is contained in:
@@ -89,7 +89,7 @@ Storage.cpp INFO: method: Class::isMethod <file.cpp 1:1 1:1>
|
||||
Storage.cpp INFO: namespace: utility <file.cpp 1:1 1:1>
|
||||
Storage.cpp INFO: enum: Category <file.cpp 1:17 1:17>
|
||||
Storage.cpp INFO: enum: Class::Category <file.cpp 1:1 1:1>
|
||||
Storage.cpp INFO: enum field: VALUE <file.cpp 1:1 1:1>
|
||||
Storage.cpp INFO: enum constant: VALUE <file.cpp 1:1 1:1>
|
||||
Storage.cpp INFO: class: ClassA <file.cpp 1:0 1:0>
|
||||
Storage.cpp INFO: class: ClassB <file.cpp 1:0 1:0>
|
||||
Storage.cpp INFO: inheritance: ClassB : ClassA <file.cpp 1:5 1:5>
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -330,11 +330,11 @@ Id Storage::onEnumParsed(
|
||||
return node->getId();
|
||||
}
|
||||
|
||||
Id Storage::onEnumFieldParsed(const ParseLocation& location, const std::vector<std::string>& nameHierarchy)
|
||||
Id Storage::onEnumConstantParsed(const ParseLocation& location, const std::vector<std::string>& 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<std::string>& 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<std::string>& 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);
|
||||
|
||||
@@ -58,7 +58,7 @@ public:
|
||||
virtual Id onEnumParsed(
|
||||
const ParseLocation& location, const std::vector<std::string>& nameHierarchy, AccessType access,
|
||||
const ParseLocation& scopeLocation);
|
||||
virtual Id onEnumFieldParsed(const ParseLocation& location, const std::vector<std::string>& nameHierarchy);
|
||||
virtual Id onEnumConstantParsed(const ParseLocation& location, const std::vector<std::string>& nameHierarchy);
|
||||
|
||||
virtual Id onInheritanceParsed(
|
||||
const ParseLocation& location, const std::vector<std::string>& nameHierarchy,
|
||||
@@ -77,9 +77,9 @@ public:
|
||||
const ParseLocation& location, const ParseFunction& user, const std::vector<std::string>& usedNameHierarchy);
|
||||
virtual Id onGlobalVariableUsageParsed(
|
||||
const ParseLocation& location, const ParseVariable& user, const std::vector<std::string>& usedNameHierarchy);
|
||||
virtual Id onEnumFieldUsageParsed(
|
||||
virtual Id onEnumConstantUsageParsed(
|
||||
const ParseLocation& location, const ParseFunction& user, const std::vector<std::string>& usedNameHierarchy);
|
||||
virtual Id onEnumFieldUsageParsed(
|
||||
virtual Id onEnumConstantUsageParsed(
|
||||
const ParseLocation& location, const ParseVariable& user, const std::vector<std::string>& usedNameHierarchy);
|
||||
virtual Id onTypeUsageParsed(const ParseTypeUsage& type, const ParseFunction& function);
|
||||
virtual Id onTypeUsageParsed(const ParseTypeUsage& type, const ParseVariable& variable);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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<TokenComponentName> nameComponent);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -77,7 +77,7 @@ public:
|
||||
virtual Id onEnumParsed(
|
||||
const ParseLocation& location, const std::vector<std::string>& nameHierarchy, AccessType access,
|
||||
const ParseLocation& scopeLocation) = 0;
|
||||
virtual Id onEnumFieldParsed(const ParseLocation& location, const std::vector<std::string>& nameHierarchy) = 0;
|
||||
virtual Id onEnumConstantParsed(const ParseLocation& location, const std::vector<std::string>& nameHierarchy) = 0;
|
||||
|
||||
virtual Id onInheritanceParsed(
|
||||
const ParseLocation& location, const std::vector<std::string>& nameHierarchy,
|
||||
@@ -93,9 +93,9 @@ public:
|
||||
const ParseLocation& location, const ParseFunction& user, const std::vector<std::string>& usedNameHierarchy) = 0;
|
||||
virtual Id onGlobalVariableUsageParsed(
|
||||
const ParseLocation& location, const ParseVariable& user, const std::vector<std::string>& usedNameHierarchy) = 0;
|
||||
virtual Id onEnumFieldUsageParsed(
|
||||
virtual Id onEnumConstantUsageParsed(
|
||||
const ParseLocation& location, const ParseFunction& user, const std::vector<std::string>& usedNameHierarchy) = 0;
|
||||
virtual Id onEnumFieldUsageParsed(
|
||||
virtual Id onEnumConstantUsageParsed(
|
||||
const ParseLocation& location, const ParseVariable& user, const std::vector<std::string>& usedNameHierarchy) = 0;
|
||||
virtual Id onTypeUsageParsed(const ParseTypeUsage& type, const ParseFunction& function) = 0;
|
||||
virtual Id onTypeUsageParsed(const ParseTypeUsage& type, const ParseVariable& variable) = 0;
|
||||
|
||||
@@ -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())
|
||||
|
||||
@@ -25,6 +25,7 @@ std::map<std::string, QueryCommand::CommandType> 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);
|
||||
|
||||
@@ -23,6 +23,7 @@ public:
|
||||
COMMAND_NAMESPACE,
|
||||
COMMAND_STRUCT,
|
||||
COMMAND_ENUM,
|
||||
COMMAND_ENUM_CONSTANT,
|
||||
COMMAND_TYPEDEF,
|
||||
|
||||
COMMAND_CONST,
|
||||
|
||||
@@ -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<TestParserClient> 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<T>::TestType A<T>::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<TestParserClient> client = parseCode(
|
||||
"template <typename T>\n"
|
||||
@@ -1472,9 +1472,9 @@ public:
|
||||
"};\n"
|
||||
);
|
||||
|
||||
TS_ASSERT_EQUALS(client->enumFields.size(), 2);
|
||||
TS_ASSERT_EQUALS(client->enumFields[0], "A<T>::TestType::TEST_ONE <6:3 6:3>");
|
||||
TS_ASSERT_EQUALS(client->enumFields[1], "A<T>::TestType::TEST_TWO <7:3 7:3>");
|
||||
TS_ASSERT_EQUALS(client->enumConstants.size(), 2);
|
||||
TS_ASSERT_EQUALS(client->enumConstants[0], "A<T>::TestType::TEST_ONE <6:3 6:3>");
|
||||
TS_ASSERT_EQUALS(client->enumConstants[1], "A<T>::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<std::string>& nameHierarchy)
|
||||
virtual Id onEnumConstantParsed(const ParseLocation& location, const std::vector<std::string>& 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<std::string>& 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<std::string>& usedNameHierarchy)
|
||||
{
|
||||
usages.push_back(addLocationSuffix(variableStr(user) + " -> " + utility::join(usedNameHierarchy, "::"), location));
|
||||
@@ -1887,7 +1887,7 @@ private:
|
||||
std::vector<std::string> typedefs;
|
||||
std::vector<std::string> classes;
|
||||
std::vector<std::string> enums;
|
||||
std::vector<std::string> enumFields;
|
||||
std::vector<std::string> enumConstants;
|
||||
std::vector<std::string> functions;
|
||||
std::vector<std::string> fields;
|
||||
std::vector<std::string> globalVariables;
|
||||
|
||||
@@ -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<TokenLocation*> locations = storage.getLocationsForId(id);
|
||||
TS_ASSERT_EQUALS(locations.size(), 1);
|
||||
|
||||
Reference in New Issue
Block a user