data: added Node type NODE_ENUM_CONSTANT

This commit is contained in:
Eberhard Graether
2015-02-10 14:28:53 +01:00
parent 0b9a2bf4a1
commit b8f6b4be4e
15 changed files with 49 additions and 37 deletions
+1 -1
View File
@@ -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;
+7 -7
View File
@@ -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);
+3 -3
View File
@@ -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);
+2 -2
View File
@@ -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;
}
+2
View File
@@ -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:
+4 -2
View File
@@ -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;
+3 -3
View File
@@ -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;
+3 -3
View File
@@ -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())
+1
View File
@@ -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);
+1
View File
@@ -23,6 +23,7 @@ public:
COMMAND_NAMESPACE,
COMMAND_STRUCT,
COMMAND_ENUM,
COMMAND_ENUM_CONSTANT,
COMMAND_TYPEDEF,
COMMAND_CONST,
+13 -13
View File
@@ -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;
+3 -3
View File
@@ -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);