data: NameHierarchy class
* replaced vector of strings as name hierarchy by a new NameHierarchy class. * Adjusted code in ASTVisitor, Storage and various test cases.
This commit is contained in:
@@ -137,6 +137,11 @@ add_files(
|
||||
data/location/TokenLocationLine.cpp
|
||||
data/location/TokenLocationLine.h
|
||||
|
||||
data/name/NameElement.cpp
|
||||
data/name/NameElement.h
|
||||
data/name/NameHierarchy.cpp
|
||||
data/name/NameHierarchy.h
|
||||
|
||||
data/parser/ParseFunction.cpp
|
||||
data/parser/ParseFunction.h
|
||||
data/parser/ParseLocation.cpp
|
||||
|
||||
+45
-42
@@ -26,7 +26,9 @@ Storage::Storage()
|
||||
{
|
||||
for (const std::pair<std::string, QueryCommand::CommandType>& p : QueryCommand::getCommandTypeMap())
|
||||
{
|
||||
m_filterIndex.addNode(std::vector<std::string>(1, p.first));
|
||||
NameHierarchy commandNameHierarchy;
|
||||
commandNameHierarchy.push(std::make_shared<NameElement>(p.first));
|
||||
m_filterIndex.addNode(commandNameHierarchy);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -197,10 +199,10 @@ void Storage::onError(const ParseLocation& location, const std::string& message)
|
||||
}
|
||||
|
||||
Id Storage::onTypedefParsed(
|
||||
const ParseLocation& location, const std::vector<std::string>& nameHierarchy, const ParseTypeUsage& underlyingType,
|
||||
const ParseLocation& location, const NameHierarchy& nameHierarchy, const ParseTypeUsage& underlyingType,
|
||||
AccessType access
|
||||
){
|
||||
log("typedef", utility::join(nameHierarchy, "::") + " -> " + underlyingType.dataType->getFullTypeName(), location);
|
||||
log("typedef", nameHierarchy.getFullName() + " -> " + underlyingType.dataType->getFullTypeName(), location);
|
||||
|
||||
Node* node = addNodeHierarchy(Node::NODE_TYPEDEF, nameHierarchy);
|
||||
addAccess(node, access);
|
||||
@@ -211,10 +213,10 @@ Id Storage::onTypedefParsed(
|
||||
}
|
||||
|
||||
Id Storage::onClassParsed(
|
||||
const ParseLocation& location, const std::vector<std::string>& nameHierarchy, AccessType access,
|
||||
const ParseLocation& location, const NameHierarchy& nameHierarchy, AccessType access,
|
||||
const ParseLocation& scopeLocation
|
||||
){
|
||||
log("class", utility::join(nameHierarchy, "::"), location);
|
||||
log("class", nameHierarchy.getFullName(), location);
|
||||
|
||||
Node* node = addNodeHierarchy(Node::NODE_CLASS, nameHierarchy);
|
||||
addAccess(node, access);
|
||||
@@ -225,10 +227,10 @@ Id Storage::onClassParsed(
|
||||
}
|
||||
|
||||
Id Storage::onStructParsed(
|
||||
const ParseLocation& location, const std::vector<std::string>& nameHierarchy, AccessType access,
|
||||
const ParseLocation& location, const NameHierarchy& nameHierarchy, AccessType access,
|
||||
const ParseLocation& scopeLocation
|
||||
){
|
||||
log("struct", utility::join(nameHierarchy, "::"), location);
|
||||
log("struct", nameHierarchy.getFullName(), location);
|
||||
|
||||
Node* node = addNodeHierarchy(Node::NODE_STRUCT, nameHierarchy);
|
||||
addAccess(node, access);
|
||||
@@ -345,9 +347,9 @@ Id Storage::onMethodParsed(
|
||||
}
|
||||
|
||||
Id Storage::onNamespaceParsed(
|
||||
const ParseLocation& location, const std::vector<std::string>& nameHierarchy, const ParseLocation& scopeLocation
|
||||
const ParseLocation& location, const NameHierarchy& nameHierarchy, const ParseLocation& scopeLocation
|
||||
){
|
||||
log("namespace", utility::join(nameHierarchy, "::"), location);
|
||||
log("namespace", nameHierarchy.getFullName(), location);
|
||||
|
||||
Node* node = addNodeHierarchy(Node::NODE_NAMESPACE, nameHierarchy);
|
||||
if (location.isValid())
|
||||
@@ -360,10 +362,10 @@ Id Storage::onNamespaceParsed(
|
||||
}
|
||||
|
||||
Id Storage::onEnumParsed(
|
||||
const ParseLocation& location, const std::vector<std::string>& nameHierarchy, AccessType access,
|
||||
const ParseLocation& location, const NameHierarchy& nameHierarchy, AccessType access,
|
||||
const ParseLocation& scopeLocation
|
||||
){
|
||||
log("enum", utility::join(nameHierarchy, "::"), location);
|
||||
log("enum", nameHierarchy.getFullName(), location);
|
||||
|
||||
Node* node = addNodeHierarchy(Node::NODE_ENUM, nameHierarchy);
|
||||
addAccess(node, access);
|
||||
@@ -373,9 +375,9 @@ Id Storage::onEnumParsed(
|
||||
return node->getId();
|
||||
}
|
||||
|
||||
Id Storage::onEnumConstantParsed(const ParseLocation& location, const std::vector<std::string>& nameHierarchy)
|
||||
Id Storage::onEnumConstantParsed(const ParseLocation& location, const NameHierarchy& nameHierarchy)
|
||||
{
|
||||
log("enum constant", utility::join(nameHierarchy, "::"), location);
|
||||
log("enum constant", nameHierarchy.getFullName(), location);
|
||||
|
||||
Node* node = addNodeHierarchy(Node::NODE_ENUM_CONSTANT, nameHierarchy);
|
||||
addTokenLocation(node, location);
|
||||
@@ -384,10 +386,10 @@ Id Storage::onEnumConstantParsed(const ParseLocation& location, const std::vecto
|
||||
}
|
||||
|
||||
Id Storage::onInheritanceParsed(
|
||||
const ParseLocation& location, const std::vector<std::string>& nameHierarchy,
|
||||
const std::vector<std::string>& baseNameHierarchy, AccessType access
|
||||
const ParseLocation& location, const NameHierarchy& nameHierarchy,
|
||||
const NameHierarchy& baseNameHierarchy, AccessType access
|
||||
){
|
||||
log("inheritance", utility::join(nameHierarchy, "::") + " : " + utility::join(baseNameHierarchy, "::"), location);
|
||||
log("inheritance", nameHierarchy.getFullName() + " : " + baseNameHierarchy.getFullName(), location);
|
||||
|
||||
Node* node = addNodeHierarchy(Node::NODE_UNDEFINED_TYPE, nameHierarchy);
|
||||
Node* baseNode = addNodeHierarchy(Node::NODE_UNDEFINED_TYPE, baseNameHierarchy);
|
||||
@@ -442,9 +444,9 @@ Id Storage::onCallParsed(const ParseLocation& location, const ParseVariable& cal
|
||||
|
||||
Id Storage::onVariableUsageParsed(
|
||||
const std::string kind, const ParseLocation& location, const ParseFunction& user,
|
||||
const std::vector<std::string>& usedNameHierarchy
|
||||
const NameHierarchy& usedNameHierarchy
|
||||
){
|
||||
log(kind, user.getFullName() + " -> " + utility::join(usedNameHierarchy, "::"), location);
|
||||
log(kind, user.getFullName() + " -> " + usedNameHierarchy.getFullName(), location);
|
||||
|
||||
Node* userNode = addNodeHierarchyWithDistinctSignature(Node::NODE_UNDEFINED_FUNCTION, user);
|
||||
Node* usedNode = addNodeHierarchy(Node::NODE_UNDEFINED_VARIABLE, usedNameHierarchy);
|
||||
@@ -456,21 +458,21 @@ Id Storage::onVariableUsageParsed(
|
||||
}
|
||||
|
||||
Id Storage::onFieldUsageParsed(
|
||||
const ParseLocation& location, const ParseFunction& user, const std::vector<std::string>& usedNameHierarchy
|
||||
const ParseLocation& location, const ParseFunction& user, const NameHierarchy& usedNameHierarchy
|
||||
){
|
||||
return onVariableUsageParsed("field usage", location, user, usedNameHierarchy);
|
||||
}
|
||||
|
||||
Id Storage::onGlobalVariableUsageParsed( // or static variable used
|
||||
const ParseLocation& location, const ParseFunction& user, const std::vector<std::string>& usedNameHierarchy
|
||||
const ParseLocation& location, const ParseFunction& user, const NameHierarchy& usedNameHierarchy
|
||||
){
|
||||
return onVariableUsageParsed("global usage", location, user, usedNameHierarchy);
|
||||
}
|
||||
|
||||
Id Storage::onGlobalVariableUsageParsed(
|
||||
const ParseLocation& location, const ParseVariable& user, const std::vector<std::string>& usedNameHierarchy)
|
||||
const ParseLocation& location, const ParseVariable& user, const NameHierarchy& usedNameHierarchy)
|
||||
{
|
||||
log("global usage", user.getFullName() + " -> " + utility::join(usedNameHierarchy, "::"), location);
|
||||
log("global usage", user.getFullName() + " -> " + usedNameHierarchy.getFullName(), location);
|
||||
|
||||
Node* userNode = addNodeHierarchy(Node::NODE_UNDEFINED_VARIABLE, user.nameHierarchy);
|
||||
Node* usedNode = addNodeHierarchy(Node::NODE_UNDEFINED_VARIABLE, usedNameHierarchy);
|
||||
@@ -482,15 +484,15 @@ Id Storage::onGlobalVariableUsageParsed(
|
||||
}
|
||||
|
||||
Id Storage::onEnumConstantUsageParsed(
|
||||
const ParseLocation& location, const ParseFunction& user, const std::vector<std::string>& usedNameHierarchy
|
||||
const ParseLocation& location, const ParseFunction& user, const NameHierarchy& usedNameHierarchy
|
||||
){
|
||||
return onVariableUsageParsed("enum constant usage", location, user, usedNameHierarchy);
|
||||
}
|
||||
|
||||
Id Storage::onEnumConstantUsageParsed(
|
||||
const ParseLocation& location, const ParseVariable& user, const std::vector<std::string>& usedNameHierarchy
|
||||
const ParseLocation& location, const ParseVariable& user, const NameHierarchy& usedNameHierarchy
|
||||
){
|
||||
log("enum constant usage", user.getFullName() + " -> " + utility::join(usedNameHierarchy, "::"), location);
|
||||
log("enum constant usage", user.getFullName() + " -> " + usedNameHierarchy.getFullName(), location);
|
||||
|
||||
Node* userNode = addNodeHierarchy(Node::NODE_UNDEFINED_VARIABLE, user.nameHierarchy);
|
||||
Node* usedNode = addNodeHierarchy(Node::NODE_UNDEFINED_VARIABLE, usedNameHierarchy);
|
||||
@@ -534,12 +536,12 @@ Id Storage::onTypeUsageParsed(const ParseTypeUsage& type, const ParseVariable& v
|
||||
}
|
||||
|
||||
Id Storage::onTemplateArgumentTypeParsed(
|
||||
const ParseLocation& location, const std::vector<std::string>& argumentNameHierarchy,
|
||||
const std::vector<std::string>& templateNameHierarchy)
|
||||
const ParseLocation& location, const NameHierarchy& argumentNameHierarchy,
|
||||
const NameHierarchy& templateNameHierarchy)
|
||||
{
|
||||
log(
|
||||
"template argument type",
|
||||
utility::join(argumentNameHierarchy, "::") + " -> " + utility::join(templateNameHierarchy, "::"),
|
||||
argumentNameHierarchy.getFullName() + " -> " + templateNameHierarchy.getFullName(),
|
||||
location
|
||||
);
|
||||
|
||||
@@ -556,12 +558,11 @@ Id Storage::onTemplateArgumentTypeParsed(
|
||||
}
|
||||
|
||||
Id Storage::onTemplateDefaultArgumentTypeParsed(
|
||||
const ParseTypeUsage& defaultArgumentType, const std::vector<std::string>& templateArgumentTypeNameHierarchy
|
||||
const ParseTypeUsage& defaultArgumentType, const NameHierarchy& templateArgumentTypeNameHierarchy
|
||||
){
|
||||
log(
|
||||
"template default argument",
|
||||
utility::join(defaultArgumentType.dataType->getTypeNameHierarchy(), "::") +
|
||||
" -> " + utility::join(templateArgumentTypeNameHierarchy, "::"),
|
||||
defaultArgumentType.dataType->getTypeNameHierarchy().getFullName() + " -> " + templateArgumentTypeNameHierarchy.getFullName(),
|
||||
defaultArgumentType.location
|
||||
);
|
||||
|
||||
@@ -577,10 +578,10 @@ Id Storage::onTemplateDefaultArgumentTypeParsed(
|
||||
}
|
||||
|
||||
Id Storage::onTemplateRecordParameterTypeParsed(
|
||||
const ParseLocation& location, const std::vector<std::string>& templateParameterTypeNameHierarchy,
|
||||
const std::vector<std::string>& templateRecordNameHierarchy
|
||||
const ParseLocation& location, const NameHierarchy& templateParameterTypeNameHierarchy,
|
||||
const NameHierarchy& templateRecordNameHierarchy
|
||||
){
|
||||
log("template record type parameter", utility::join(templateParameterTypeNameHierarchy, "::"), location);
|
||||
log("template record type parameter", templateParameterTypeNameHierarchy.getFullName(), location);
|
||||
|
||||
Node* templateParameterNode = addNodeHierarchy(Node::NODE_TEMPLATE_PARAMETER_TYPE, templateParameterTypeNameHierarchy);
|
||||
addTokenLocation(templateParameterNode, location);
|
||||
@@ -592,12 +593,12 @@ Id Storage::onTemplateRecordParameterTypeParsed(
|
||||
}
|
||||
|
||||
Id Storage::onTemplateRecordSpecializationParsed(
|
||||
const ParseLocation& location, const std::vector<std::string>& specializedRecordNameHierarchy,
|
||||
const RecordType specializedRecordType, const std::vector<std::string>& specializedFromNameHierarchy
|
||||
const ParseLocation& location, const NameHierarchy& specializedRecordNameHierarchy,
|
||||
const RecordType specializedRecordType, const NameHierarchy& specializedFromNameHierarchy
|
||||
){
|
||||
log(
|
||||
"template record specialization",
|
||||
utility::join(specializedRecordNameHierarchy, "::") + " -> " + utility::join(specializedFromNameHierarchy, "::"),
|
||||
specializedRecordNameHierarchy.getFullName() + " -> " + specializedFromNameHierarchy.getFullName(),
|
||||
location
|
||||
);
|
||||
|
||||
@@ -617,9 +618,9 @@ Id Storage::onTemplateRecordSpecializationParsed(
|
||||
}
|
||||
|
||||
Id Storage::onTemplateFunctionParameterTypeParsed(
|
||||
const ParseLocation& location, const std::vector<std::string>& templateParameterTypeNameHierarchy, const ParseFunction function
|
||||
const ParseLocation& location, const NameHierarchy& templateParameterTypeNameHierarchy, const ParseFunction function
|
||||
){
|
||||
log("template function type parameter", utility::join(templateParameterTypeNameHierarchy, "::"), location);
|
||||
log("template function type parameter", templateParameterTypeNameHierarchy.getFullName(), location);
|
||||
|
||||
Node* templateParameterNode = addNodeHierarchy(Node::NODE_TEMPLATE_PARAMETER_TYPE, templateParameterTypeNameHierarchy);
|
||||
addTokenLocation(templateParameterNode, location);
|
||||
@@ -1069,7 +1070,7 @@ const SearchIndex& Storage::getSearchIndex() const
|
||||
return m_tokenIndex;
|
||||
}
|
||||
|
||||
Node* Storage::addNodeHierarchy(Node::NodeType type, std::vector<std::string> nameHierarchy)
|
||||
Node* Storage::addNodeHierarchy(Node::NodeType type, NameHierarchy nameHierarchy)
|
||||
{
|
||||
SearchNode* searchNode = m_tokenIndex.addNode(nameHierarchy);
|
||||
if (!searchNode)
|
||||
@@ -1099,7 +1100,9 @@ Node* Storage::addNodeHierarchyWithDistinctSignature(Node::NodeType type, const
|
||||
|
||||
Node* Storage::addFileNode(const FilePath& filePath)
|
||||
{
|
||||
Node* fileNode = addNodeHierarchy(Node::NODE_FILE, std::vector<std::string>(1, filePath.fileName()));
|
||||
NameHierarchy fileNameHierarchy;
|
||||
fileNameHierarchy.push(std::make_shared<NameElement>(filePath.fileName()));
|
||||
Node* fileNode = addNodeHierarchy(Node::NODE_FILE, fileNameHierarchy);
|
||||
|
||||
if (!fileNode->getComponent<TokenComponentFilePath>())
|
||||
{
|
||||
@@ -1175,7 +1178,7 @@ Edge* Storage::addTypeEdge(Node* node, Edge::EdgeType edgeType, const ParseTypeU
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
std::vector<std::string> nameHierarchy = typeUsage.dataType->getTypeNameHierarchy();
|
||||
NameHierarchy nameHierarchy = typeUsage.dataType->getTypeNameHierarchy();
|
||||
|
||||
Node* typeNode = addNodeHierarchy(Node::NODE_UNDEFINED_TYPE, nameHierarchy);
|
||||
if (!typeNode)
|
||||
|
||||
+23
-23
@@ -35,13 +35,13 @@ public:
|
||||
virtual void onError(const ParseLocation& location, const std::string& message);
|
||||
|
||||
virtual Id onTypedefParsed(
|
||||
const ParseLocation& location, const std::vector<std::string>& nameHierarchy,
|
||||
const ParseLocation& location, const NameHierarchy& nameHierarchy,
|
||||
const ParseTypeUsage& underlyingType, AccessType access);
|
||||
virtual Id onClassParsed(
|
||||
const ParseLocation& location, const std::vector<std::string>& nameHierarchy, AccessType access,
|
||||
const ParseLocation& location, const NameHierarchy& nameHierarchy, AccessType access,
|
||||
const ParseLocation& scopeLocation);
|
||||
virtual Id onStructParsed(
|
||||
const ParseLocation& location, const std::vector<std::string>& nameHierarchy, AccessType access,
|
||||
const ParseLocation& location, const NameHierarchy& nameHierarchy, AccessType access,
|
||||
const ParseLocation& scopeLocation);
|
||||
|
||||
virtual Id onGlobalVariableParsed(const ParseLocation& location, const ParseVariable& variable);
|
||||
@@ -54,16 +54,16 @@ public:
|
||||
const ParseLocation& scopeLocation);
|
||||
|
||||
virtual Id onNamespaceParsed(
|
||||
const ParseLocation& location, const std::vector<std::string>& nameHierarchy, const ParseLocation& scopeLocation);
|
||||
const ParseLocation& location, const NameHierarchy& nameHierarchy, const ParseLocation& scopeLocation);
|
||||
|
||||
virtual Id onEnumParsed(
|
||||
const ParseLocation& location, const std::vector<std::string>& nameHierarchy, AccessType access,
|
||||
const ParseLocation& location, const NameHierarchy& nameHierarchy, AccessType access,
|
||||
const ParseLocation& scopeLocation);
|
||||
virtual Id onEnumConstantParsed(const ParseLocation& location, const std::vector<std::string>& nameHierarchy);
|
||||
virtual Id onEnumConstantParsed(const ParseLocation& location, const NameHierarchy& nameHierarchy);
|
||||
|
||||
virtual Id onInheritanceParsed(
|
||||
const ParseLocation& location, const std::vector<std::string>& nameHierarchy,
|
||||
const std::vector<std::string>& baseNameHierarchy, AccessType access);
|
||||
const ParseLocation& location, const NameHierarchy& nameHierarchy,
|
||||
const NameHierarchy& baseNameHierarchy, AccessType access);
|
||||
virtual Id onMethodOverrideParsed(const ParseFunction& base, const ParseFunction& overrider);
|
||||
virtual Id onCallParsed(
|
||||
const ParseLocation& location, const ParseFunction& caller, const ParseFunction& callee);
|
||||
@@ -71,33 +71,33 @@ public:
|
||||
const ParseLocation& location, const ParseVariable& caller, const ParseFunction& callee);
|
||||
Id onVariableUsageParsed(
|
||||
const std::string kind, const ParseLocation& location, const ParseFunction& user,
|
||||
const std::vector<std::string>& usedNameHierarchy); // helper
|
||||
const NameHierarchy& usedNameHierarchy); // helper
|
||||
virtual Id onFieldUsageParsed(
|
||||
const ParseLocation& location, const ParseFunction& user, const std::vector<std::string>& usedNameHierarchy);
|
||||
const ParseLocation& location, const ParseFunction& user, const NameHierarchy& usedNameHierarchy);
|
||||
virtual Id onGlobalVariableUsageParsed(
|
||||
const ParseLocation& location, const ParseFunction& user, const std::vector<std::string>& usedNameHierarchy);
|
||||
const ParseLocation& location, const ParseFunction& user, const NameHierarchy& usedNameHierarchy);
|
||||
virtual Id onGlobalVariableUsageParsed(
|
||||
const ParseLocation& location, const ParseVariable& user, const std::vector<std::string>& usedNameHierarchy);
|
||||
const ParseLocation& location, const ParseVariable& user, const NameHierarchy& usedNameHierarchy);
|
||||
virtual Id onEnumConstantUsageParsed(
|
||||
const ParseLocation& location, const ParseFunction& user, const std::vector<std::string>& usedNameHierarchy);
|
||||
const ParseLocation& location, const ParseFunction& user, const NameHierarchy& usedNameHierarchy);
|
||||
virtual Id onEnumConstantUsageParsed(
|
||||
const ParseLocation& location, const ParseVariable& user, const std::vector<std::string>& usedNameHierarchy);
|
||||
const ParseLocation& location, const ParseVariable& user, const NameHierarchy& usedNameHierarchy);
|
||||
virtual Id onTypeUsageParsed(const ParseTypeUsage& type, const ParseFunction& function);
|
||||
virtual Id onTypeUsageParsed(const ParseTypeUsage& type, const ParseVariable& variable);
|
||||
|
||||
virtual Id onTemplateArgumentTypeParsed(
|
||||
const ParseLocation& location, const std::vector<std::string>& argumentNameHierarchy,
|
||||
const std::vector<std::string>& templateNameHierarchy);
|
||||
const ParseLocation& location, const NameHierarchy& argumentNameHierarchy,
|
||||
const NameHierarchy& templateNameHierarchy);
|
||||
virtual Id onTemplateDefaultArgumentTypeParsed(
|
||||
const ParseTypeUsage& type, const std::vector<std::string>& templateArgumentTypeNameHierarchy);
|
||||
const ParseTypeUsage& type, const NameHierarchy& templateArgumentTypeNameHierarchy);
|
||||
virtual Id onTemplateRecordParameterTypeParsed(
|
||||
const ParseLocation& location, const std::vector<std::string>& templateParameterTypeNameHierarchy,
|
||||
const std::vector<std::string>& templateRecordNameHierarchy);
|
||||
const ParseLocation& location, const NameHierarchy& templateParameterTypeNameHierarchy,
|
||||
const NameHierarchy& templateRecordNameHierarchy);
|
||||
virtual Id onTemplateRecordSpecializationParsed(
|
||||
const ParseLocation& location, const std::vector<std::string>& specializedRecordNameHierarchy,
|
||||
const RecordType specializedRecordType, const std::vector<std::string>& specializedFromNameHierarchy);
|
||||
const ParseLocation& location, const NameHierarchy& specializedRecordNameHierarchy,
|
||||
const RecordType specializedRecordType, const NameHierarchy& specializedFromNameHierarchy);
|
||||
virtual Id onTemplateFunctionParameterTypeParsed(
|
||||
const ParseLocation& location, const std::vector<std::string>& templateParameterTypeNameHierarchy, const ParseFunction function);
|
||||
const ParseLocation& location, const NameHierarchy& templateParameterTypeNameHierarchy, const ParseFunction function);
|
||||
virtual Id onTemplateFunctionSpecializationParsed(
|
||||
const ParseLocation& location, const ParseFunction specializedFunction, const ParseFunction templateFunction);
|
||||
|
||||
@@ -133,7 +133,7 @@ protected:
|
||||
const SearchIndex& getSearchIndex() const;
|
||||
|
||||
private:
|
||||
Node* addNodeHierarchy(Node::NodeType type, std::vector<std::string> nameHierarchy);
|
||||
Node* addNodeHierarchy(Node::NodeType type, NameHierarchy nameHierarchy);
|
||||
Node* addNodeHierarchyWithDistinctSignature(Node::NodeType type, const ParseFunction& function);
|
||||
|
||||
Node* addFileNode(const FilePath& filePath);
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
#include "data/name/NameElement.h"
|
||||
|
||||
NameElement::NameElement(std::string name)
|
||||
: m_name(name)
|
||||
{
|
||||
}
|
||||
|
||||
NameElement::~NameElement()
|
||||
{
|
||||
}
|
||||
|
||||
std::string NameElement::getFullName() const
|
||||
{
|
||||
return m_name;
|
||||
}
|
||||
@@ -0,0 +1,18 @@
|
||||
#ifndef NAME_ELEMENT_H
|
||||
#define NAME_ELEMENT_H
|
||||
|
||||
#include <string>
|
||||
|
||||
class NameElement
|
||||
{
|
||||
public:
|
||||
NameElement(std::string name);
|
||||
~NameElement();
|
||||
|
||||
std::string getFullName() const;
|
||||
|
||||
private:
|
||||
std::string m_name;
|
||||
};
|
||||
|
||||
#endif // NAME_ELEMENT_H
|
||||
@@ -0,0 +1,48 @@
|
||||
#include "data/name/NameHierarchy.h"
|
||||
|
||||
NameHierarchy::NameHierarchy()
|
||||
{
|
||||
}
|
||||
|
||||
NameHierarchy::~NameHierarchy()
|
||||
{
|
||||
}
|
||||
|
||||
void NameHierarchy::push(std::shared_ptr<NameElement> element)
|
||||
{
|
||||
m_elements.push_back(element);
|
||||
}
|
||||
|
||||
void NameHierarchy::pop()
|
||||
{
|
||||
m_elements.pop_back();
|
||||
}
|
||||
|
||||
std::shared_ptr<NameElement> NameHierarchy::back()
|
||||
{
|
||||
return m_elements.back();
|
||||
}
|
||||
|
||||
std::shared_ptr<NameElement> NameHierarchy::operator[](size_t pos) const
|
||||
{
|
||||
return m_elements[pos];
|
||||
}
|
||||
|
||||
size_t NameHierarchy::size() const
|
||||
{
|
||||
return m_elements.size();
|
||||
}
|
||||
|
||||
std::string NameHierarchy::getFullName() const
|
||||
{
|
||||
std::string name;
|
||||
for (int i = 0; i < m_elements.size(); i++)
|
||||
{
|
||||
name += m_elements[i]->getFullName();
|
||||
if (i < m_elements.size() - 1)
|
||||
{
|
||||
name += "::";
|
||||
}
|
||||
}
|
||||
return name;
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
#ifndef NAME_HIERARCHY_H
|
||||
#define NAME_HIERARCHY_H
|
||||
|
||||
#include <memory>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include "data/name/NameElement.h"
|
||||
|
||||
class NameHierarchy
|
||||
{
|
||||
public:
|
||||
NameHierarchy();
|
||||
~NameHierarchy();
|
||||
|
||||
void push(std::shared_ptr<NameElement> element);
|
||||
void pop();
|
||||
std::shared_ptr<NameElement> back();
|
||||
std::shared_ptr<NameElement> operator[](size_t pos) const;
|
||||
size_t size() const;
|
||||
|
||||
std::string getFullName() const;
|
||||
|
||||
private:
|
||||
std::vector<std::shared_ptr<NameElement>> m_elements;
|
||||
};
|
||||
|
||||
#endif // NAME_ELEMENT_H
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
ParseFunction::ParseFunction(
|
||||
const ParseTypeUsage& returnType,
|
||||
const std::vector<std::string>& nameHierarchy,
|
||||
const NameHierarchy& nameHierarchy,
|
||||
const std::vector<ParseTypeUsage>& parameters,
|
||||
bool isStatic,
|
||||
bool isConst
|
||||
@@ -19,5 +19,5 @@ ParseFunction::ParseFunction(
|
||||
|
||||
std::string ParseFunction::getFullName() const
|
||||
{
|
||||
return utility::join(nameHierarchy, "::");
|
||||
return nameHierarchy.getFullName();
|
||||
}
|
||||
|
||||
@@ -1,15 +1,14 @@
|
||||
#ifndef PARSE_FUNCTION_H
|
||||
#define PARSE_FUNCTION_H
|
||||
|
||||
#include <string>
|
||||
|
||||
#include "data/name/NameHierarchy.h"
|
||||
#include "data/parser/ParseTypeUsage.h"
|
||||
|
||||
struct ParseFunction
|
||||
{
|
||||
ParseFunction(
|
||||
const ParseTypeUsage& returnType,
|
||||
const std::vector<std::string>& nameHierarchy,
|
||||
const NameHierarchy& nameHierarchy,
|
||||
const std::vector<ParseTypeUsage>& parameters,
|
||||
bool isStatic = false,
|
||||
bool isConst = false
|
||||
@@ -18,7 +17,7 @@ struct ParseFunction
|
||||
std::string getFullName() const;
|
||||
|
||||
const ParseTypeUsage returnType;
|
||||
const std::vector<std::string> nameHierarchy;
|
||||
const NameHierarchy nameHierarchy;
|
||||
const std::vector<ParseTypeUsage> parameters;
|
||||
const bool isStatic;
|
||||
const bool isConst;
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
#include "utility/utilityString.h"
|
||||
|
||||
ParseVariable::ParseVariable(const ParseTypeUsage& type, const std::vector<std::string>& nameHierarchy, bool isStatic)
|
||||
ParseVariable::ParseVariable(const ParseTypeUsage& type, const NameHierarchy& nameHierarchy, bool isStatic)
|
||||
: type(type)
|
||||
, nameHierarchy(nameHierarchy)
|
||||
, isStatic(isStatic)
|
||||
@@ -11,5 +11,5 @@ ParseVariable::ParseVariable(const ParseTypeUsage& type, const std::vector<std::
|
||||
|
||||
std::string ParseVariable::getFullName() const
|
||||
{
|
||||
return utility::join(nameHierarchy, "::");
|
||||
}
|
||||
return nameHierarchy.getFullName();
|
||||
}
|
||||
|
||||
@@ -3,16 +3,17 @@
|
||||
|
||||
#include <string>
|
||||
|
||||
#include "data/name/NameHierarchy.h"
|
||||
#include "data/parser/ParseTypeUsage.h"
|
||||
|
||||
struct ParseVariable
|
||||
{
|
||||
ParseVariable(const ParseTypeUsage& type, const std::vector<std::string>& nameHierarchy, bool isStatic);
|
||||
ParseVariable(const ParseTypeUsage& type, const NameHierarchy& nameHierarchy, bool isStatic);
|
||||
|
||||
std::string getFullName() const;
|
||||
|
||||
const ParseTypeUsage type;
|
||||
const std::vector<std::string> nameHierarchy;
|
||||
const NameHierarchy nameHierarchy;
|
||||
const bool isStatic;
|
||||
};
|
||||
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
#include <vector>
|
||||
|
||||
#include "utility/types.h"
|
||||
#include "data/name/NameHierarchy.h"
|
||||
|
||||
struct ParseFunction;
|
||||
struct ParseLocation;
|
||||
@@ -52,13 +53,13 @@ public:
|
||||
virtual void onError(const ParseLocation& location, const std::string& message) = 0;
|
||||
|
||||
virtual Id onTypedefParsed(
|
||||
const ParseLocation& location, const std::vector<std::string>& nameHierarchy,
|
||||
const ParseLocation& location, const NameHierarchy& nameHierarchy,
|
||||
const ParseTypeUsage& underlyingType, AccessType access) = 0;
|
||||
virtual Id onClassParsed(
|
||||
const ParseLocation& location, const std::vector<std::string>& nameHierarchy, AccessType access,
|
||||
const ParseLocation& location, const NameHierarchy& nameHierarchy, AccessType access,
|
||||
const ParseLocation& scopeLocation) = 0;
|
||||
virtual Id onStructParsed(
|
||||
const ParseLocation& location, const std::vector<std::string>& nameHierarchy, AccessType access,
|
||||
const ParseLocation& location, const NameHierarchy& nameHierarchy, AccessType access,
|
||||
const ParseLocation& scopeLocation) = 0;
|
||||
|
||||
virtual Id onGlobalVariableParsed(const ParseLocation& location, const ParseVariable& variable) = 0;
|
||||
@@ -71,48 +72,48 @@ public:
|
||||
const ParseLocation& scopeLocation) = 0;
|
||||
|
||||
virtual Id onNamespaceParsed(
|
||||
const ParseLocation& location, const std::vector<std::string>& nameHierarchy,
|
||||
const ParseLocation& location, const NameHierarchy& nameHierarchy,
|
||||
const ParseLocation& scopeLocation) = 0;
|
||||
|
||||
virtual Id onEnumParsed(
|
||||
const ParseLocation& location, const std::vector<std::string>& nameHierarchy, AccessType access,
|
||||
const ParseLocation& location, const NameHierarchy& nameHierarchy, AccessType access,
|
||||
const ParseLocation& scopeLocation) = 0;
|
||||
virtual Id onEnumConstantParsed(const ParseLocation& location, const std::vector<std::string>& nameHierarchy) = 0;
|
||||
virtual Id onEnumConstantParsed(const ParseLocation& location, const NameHierarchy& nameHierarchy) = 0;
|
||||
|
||||
virtual Id onInheritanceParsed(
|
||||
const ParseLocation& location, const std::vector<std::string>& nameHierarchy,
|
||||
const std::vector<std::string>& baseNameHierarchy, AccessType access) = 0;
|
||||
const ParseLocation& location, const NameHierarchy& nameHierarchy,
|
||||
const NameHierarchy& baseNameHierarchy, AccessType access) = 0;
|
||||
virtual Id onMethodOverrideParsed(const ParseFunction& base, const ParseFunction& overrider) = 0;
|
||||
virtual Id onCallParsed(
|
||||
const ParseLocation& location, const ParseFunction& caller, const ParseFunction& callee) = 0;
|
||||
virtual Id onCallParsed(
|
||||
const ParseLocation& location, const ParseVariable& caller, const ParseFunction& callee) = 0;
|
||||
virtual Id onFieldUsageParsed(
|
||||
const ParseLocation& location, const ParseFunction& user, const std::vector<std::string>& usedNameHierarchy) = 0;
|
||||
const ParseLocation& location, const ParseFunction& user, const NameHierarchy& usedNameHierarchy) = 0;
|
||||
virtual Id onGlobalVariableUsageParsed(
|
||||
const ParseLocation& location, const ParseFunction& user, const std::vector<std::string>& usedNameHierarchy) = 0;
|
||||
const ParseLocation& location, const ParseFunction& user, const NameHierarchy& usedNameHierarchy) = 0;
|
||||
virtual Id onGlobalVariableUsageParsed(
|
||||
const ParseLocation& location, const ParseVariable& user, const std::vector<std::string>& usedNameHierarchy) = 0;
|
||||
const ParseLocation& location, const ParseVariable& user, const NameHierarchy& usedNameHierarchy) = 0;
|
||||
virtual Id onEnumConstantUsageParsed(
|
||||
const ParseLocation& location, const ParseFunction& user, const std::vector<std::string>& usedNameHierarchy) = 0;
|
||||
const ParseLocation& location, const ParseFunction& user, const NameHierarchy& usedNameHierarchy) = 0;
|
||||
virtual Id onEnumConstantUsageParsed(
|
||||
const ParseLocation& location, const ParseVariable& user, const std::vector<std::string>& usedNameHierarchy) = 0;
|
||||
const ParseLocation& location, const ParseVariable& user, const NameHierarchy& usedNameHierarchy) = 0;
|
||||
virtual Id onTypeUsageParsed(const ParseTypeUsage& type, const ParseFunction& function) = 0;
|
||||
virtual Id onTypeUsageParsed(const ParseTypeUsage& type, const ParseVariable& variable) = 0;
|
||||
|
||||
virtual Id onTemplateArgumentTypeParsed(
|
||||
const ParseLocation& location, const std::vector<std::string>& argumentNameHierarchy,
|
||||
const std::vector<std::string>& templateNameHierarchy) = 0;
|
||||
const ParseLocation& location, const NameHierarchy& argumentNameHierarchy,
|
||||
const NameHierarchy& templateNameHierarchy) = 0;
|
||||
virtual Id onTemplateDefaultArgumentTypeParsed(
|
||||
const ParseTypeUsage& type, const std::vector<std::string>& templateArgumentTypeNameHierarchy) = 0;
|
||||
const ParseTypeUsage& type, const NameHierarchy& templateArgumentTypeNameHierarchy) = 0;
|
||||
virtual Id onTemplateRecordParameterTypeParsed(
|
||||
const ParseLocation& location, const std::vector<std::string>& templateParameterTypeNameHierarchy,
|
||||
const std::vector<std::string>& templateRecordNameHierarchy) = 0;
|
||||
const ParseLocation& location, const NameHierarchy& templateParameterTypeNameHierarchy,
|
||||
const NameHierarchy& templateRecordNameHierarchy) = 0;
|
||||
virtual Id onTemplateRecordSpecializationParsed(
|
||||
const ParseLocation& location, const std::vector<std::string>& specializedRecordNameHierarchy,
|
||||
const RecordType specializedRecordType, const std::vector<std::string>& specializedFromNameHierarchy) = 0;
|
||||
const ParseLocation& location, const NameHierarchy& specializedRecordNameHierarchy,
|
||||
const RecordType specializedRecordType, const NameHierarchy& specializedFromNameHierarchy) = 0;
|
||||
virtual Id onTemplateFunctionParameterTypeParsed(
|
||||
const ParseLocation& location, const std::vector<std::string>& templateParameterTypeNameHierarchy,
|
||||
const ParseLocation& location, const NameHierarchy& templateParameterTypeNameHierarchy,
|
||||
const ParseFunction function) = 0;
|
||||
virtual Id onTemplateFunctionSpecializationParsed(
|
||||
const ParseLocation& location, const ParseFunction specializedFunction, const ParseFunction templateFunction) = 0;
|
||||
|
||||
@@ -311,10 +311,10 @@ bool ASTVisitor::VisitTemplateTemplateParmDecl(clang::TemplateTemplateParmDecl *
|
||||
|
||||
bool ASTVisitor::VisitClassTemplateDecl(clang::ClassTemplateDecl* declaration)
|
||||
{
|
||||
std::vector<std::string> rarchy = utility::getDeclNameHierarchy(declaration);
|
||||
NameHierarchy rarchy = utility::getDeclNameHierarchy(declaration);
|
||||
if (isLocatedInUnparsedProjectFile(declaration))
|
||||
{
|
||||
std::vector<std::string> templateRecordNameHierarchy = utility::getDeclNameHierarchy(declaration);
|
||||
NameHierarchy templateRecordNameHierarchy = utility::getDeclNameHierarchy(declaration);
|
||||
clang::TemplateParameterList* parameterList = declaration->getTemplateParameters();
|
||||
for (size_t i = 0; i < parameterList->size(); i++)
|
||||
{
|
||||
@@ -341,10 +341,10 @@ bool ASTVisitor::VisitClassTemplateDecl(clang::ClassTemplateDecl* declaration)
|
||||
clang::ClassTemplateSpecializationDecl* specializationDecl = *it;
|
||||
|
||||
// The specializationParent can be an indirect specialization of the ClassTemplate (by specializing a partial specialization).
|
||||
std::vector<std::string> specializationParentNameHierarchy = utility::getTemplateSpecializationParentNameHierarchy(specializationDecl);
|
||||
NameHierarchy specializationParentNameHierarchy = utility::getTemplateSpecializationParentNameHierarchy(specializationDecl);
|
||||
|
||||
ParserClient::RecordType specializedRecordType = specializationDecl->isStruct() ? ParserClient::RECORD_STRUCT : ParserClient::RECORD_CLASS;
|
||||
std::vector<std::string> specializedRecordNameHierarchy = utility::getDeclNameHierarchy(specializationDecl);
|
||||
NameHierarchy specializedRecordNameHierarchy = utility::getDeclNameHierarchy(specializationDecl);
|
||||
m_client->onTemplateRecordSpecializationParsed(
|
||||
getParseLocationForNamedDecl(*it), specializedRecordNameHierarchy, specializedRecordType, specializationParentNameHierarchy
|
||||
);
|
||||
@@ -354,7 +354,7 @@ bool ASTVisitor::VisitClassTemplateDecl(clang::ClassTemplateDecl* declaration)
|
||||
const clang::TemplateArgumentList &argList = specializationDecl->getTemplateArgs();
|
||||
for (size_t i = 0; i < argList.size(); i++)
|
||||
{
|
||||
std::vector<std::string> argumentNameHierarchy = utility::templateArgumentToDataType(argList.get(i))->getTypeNameHierarchy();
|
||||
NameHierarchy argumentNameHierarchy = utility::templateArgumentToDataType(argList.get(i))->getTypeNameHierarchy();
|
||||
|
||||
if (argumentNameHierarchy.size()) // FIXME: Some TemplateArgument kinds are not handled yet.
|
||||
{
|
||||
@@ -374,8 +374,8 @@ bool ASTVisitor::VisitClassTemplatePartialSpecializationDecl(clang::ClassTemplat
|
||||
{
|
||||
if (isLocatedInUnparsedProjectFile(declaration))
|
||||
{
|
||||
std::vector<std::string> specializedRecordNameHierarchy = utility::getDeclNameHierarchy(declaration);
|
||||
std::vector<std::string> specializationParentNameHierarchy = utility::getTemplateSpecializationParentNameHierarchy(declaration);
|
||||
NameHierarchy specializedRecordNameHierarchy = utility::getDeclNameHierarchy(declaration);
|
||||
NameHierarchy specializationParentNameHierarchy = utility::getTemplateSpecializationParentNameHierarchy(declaration);
|
||||
|
||||
ParserClient::RecordType specializedRecordType = declaration->isStruct() ? ParserClient::RECORD_STRUCT : ParserClient::RECORD_CLASS;
|
||||
m_client->onTemplateRecordSpecializationParsed(
|
||||
@@ -423,7 +423,7 @@ bool ASTVisitor::VisitFunctionTemplateDecl(clang::FunctionTemplateDecl *declarat
|
||||
|
||||
if (isLocatedInUnparsedProjectFile(namedDecl))
|
||||
{
|
||||
std::vector<std::string> templateParameterTypeNameHierarchy = utility::getDeclNameHierarchy(namedDecl);
|
||||
NameHierarchy templateParameterTypeNameHierarchy = utility::getDeclNameHierarchy(namedDecl);
|
||||
|
||||
m_client->onTemplateFunctionParameterTypeParsed(
|
||||
getParseLocationForNamedDecl(namedDecl),
|
||||
@@ -873,7 +873,7 @@ std::vector<ParseTypeUsage> ASTVisitor::getParameters(const clang::FunctionDecl*
|
||||
ParseVariable ASTVisitor::getParseVariable(const clang::DeclaratorDecl* declaration) const
|
||||
{
|
||||
bool isStatic = false;
|
||||
std::vector<std::string> hameHierarchy = utility::getDeclNameHierarchy(declaration);
|
||||
NameHierarchy hameHierarchy = utility::getDeclNameHierarchy(declaration);
|
||||
if (clang::isa<clang::VarDecl>(declaration))
|
||||
{
|
||||
const clang::VarDecl* varDecl = clang::dyn_cast<const clang::VarDecl>(declaration);
|
||||
|
||||
@@ -41,6 +41,10 @@ namespace utility
|
||||
dataType = std::make_shared<NamedDataType>(getDeclNameHierarchy(type->getAs<clang::TypedefType>()->getDecl()));
|
||||
break;
|
||||
}
|
||||
case clang::Type::MemberPointer:
|
||||
{
|
||||
int ogogo = 0; // test this case!
|
||||
}
|
||||
case clang::Type::Pointer:
|
||||
{
|
||||
std::shared_ptr<DataType> innerType = qualTypeToDataType(type->getPointeeType());
|
||||
@@ -85,15 +89,15 @@ namespace utility
|
||||
clang::QualType::print(type, clang::Qualifiers(), StrOS, pp, clang::Twine());
|
||||
std::string typeName = StrOS.str();
|
||||
|
||||
std::vector<std::string> typeNameHerarchy;
|
||||
typeNameHerarchy.push_back(typeName);
|
||||
NameHierarchy typeNameHerarchy;
|
||||
typeNameHerarchy.push(std::make_shared<NameElement>(typeName));
|
||||
|
||||
dataType = std::make_shared<NamedDataType>(typeNameHerarchy);
|
||||
break;
|
||||
}
|
||||
case clang::Type::TemplateSpecialization:
|
||||
{
|
||||
std::vector<std::string> typeNameHerarchy;
|
||||
NameHierarchy typeNameHerarchy;
|
||||
|
||||
const clang::TagType* tagType = type->getAs<clang::TagType>(); // remove this case when NameHierarchy is split into namepart and parameter part
|
||||
if (tagType)
|
||||
@@ -116,9 +120,11 @@ namespace utility
|
||||
}
|
||||
templateArgumentPart += ">";
|
||||
|
||||
std::string& declName = typeNameHerarchy.back();
|
||||
declName = declName.substr(0, declName.rfind("<")); // remove template parameters
|
||||
std::string declName = typeNameHerarchy.back()->getFullName();
|
||||
declName = declName.substr(0, declName.rfind("<")); // remove template parameters - does not work for A<ajaj<ajsj>>
|
||||
declName += templateArgumentPart; // add template arguments
|
||||
typeNameHerarchy.pop();
|
||||
typeNameHerarchy.push(std::make_shared<NameElement>(declName));
|
||||
}
|
||||
}
|
||||
dataType = std::make_shared<NamedDataType>(typeNameHerarchy);
|
||||
@@ -129,16 +135,18 @@ namespace utility
|
||||
clang::TemplateTypeParmDecl* templateTypeParmDecl = clang::dyn_cast<clang::TemplateTypeParmType>(type)->getDecl();
|
||||
|
||||
std::string typeName = getDeclName(templateTypeParmDecl);
|
||||
std::vector<std::string> typeNameHerarchy = getContextNameHierarchyOfTemplateParameter(templateTypeParmDecl);
|
||||
NameHierarchy typeNameHerarchy = getContextNameHierarchyOfTemplateParameter(templateTypeParmDecl);
|
||||
|
||||
if (typeNameHerarchy.size() == 0)
|
||||
{
|
||||
LOG_ERROR("Unable to resolve type name hierarchy for template parameter \"" + typeName + "\"");
|
||||
typeNameHerarchy.push_back(typeName);
|
||||
typeNameHerarchy.push(std::make_shared<NameElement>(typeName));
|
||||
}
|
||||
else
|
||||
{
|
||||
typeNameHerarchy.back() += "::" + typeName;
|
||||
std::string lastContextElementName = typeNameHerarchy.back()->getFullName();
|
||||
typeNameHerarchy.pop();
|
||||
typeNameHerarchy.push(std::make_shared<NameElement>(lastContextElementName + "::" + typeName));
|
||||
}
|
||||
dataType = std::make_shared<NamedDataType>(typeNameHerarchy);
|
||||
break;
|
||||
@@ -153,11 +161,11 @@ namespace utility
|
||||
const clang::DependentNameType* dependentNameType = clang::dyn_cast<clang::DependentNameType>(type);
|
||||
clang::NestedNameSpecifier* nns = dependentNameType->getQualifier();
|
||||
clang::NestedNameSpecifier::SpecifierKind nnsKind = nns->getKind();
|
||||
std::vector<std::string> typeNameHerarchy;
|
||||
NameHierarchy typeNameHerarchy;
|
||||
switch (nnsKind)
|
||||
{
|
||||
case clang::NestedNameSpecifier::Identifier:
|
||||
typeNameHerarchy.push_back(nns->getAsIdentifier()->getName());
|
||||
typeNameHerarchy.push(std::make_shared<NameElement>(nns->getAsIdentifier()->getName()));
|
||||
LOG_ERROR("Unable to resolve name of nested name specifier of kind: Identifier"); // this one is not tested yet. tell malte if you get this log error.
|
||||
break;
|
||||
case clang::NestedNameSpecifier::Namespace:
|
||||
@@ -178,7 +186,7 @@ namespace utility
|
||||
break;
|
||||
}
|
||||
|
||||
typeNameHerarchy.push_back(dependentNameType->getIdentifier()->getName().str());
|
||||
typeNameHerarchy.push(std::make_shared<NameElement>(dependentNameType->getIdentifier()->getName().str()));
|
||||
|
||||
dataType = std::make_shared<NamedDataType>(typeNameHerarchy);
|
||||
break;
|
||||
@@ -195,8 +203,8 @@ namespace utility
|
||||
clang::QualType::print(type, clang::Qualifiers(), StrOS, pp, clang::Twine());
|
||||
std::string typeName = StrOS.str();
|
||||
|
||||
std::vector<std::string> typeNameHerarchy;
|
||||
typeNameHerarchy.push_back(typeName);
|
||||
NameHierarchy typeNameHerarchy;
|
||||
typeNameHerarchy.push(std::make_shared<NameElement>(typeName));
|
||||
|
||||
dataType = std::make_shared<NamedDataType>(typeNameHerarchy);
|
||||
break;
|
||||
@@ -205,9 +213,9 @@ namespace utility
|
||||
return dataType;
|
||||
}
|
||||
|
||||
std::vector<std::string> getDeclNameHierarchy(const clang::Decl* declaration)
|
||||
NameHierarchy getDeclNameHierarchy(const clang::Decl* declaration)
|
||||
{
|
||||
std::vector<std::string> contextNameHierarchy;
|
||||
NameHierarchy contextNameHierarchy;
|
||||
if (declaration)
|
||||
{
|
||||
std::string declName = "";
|
||||
@@ -225,19 +233,22 @@ namespace utility
|
||||
clang::isa<clang::TemplateTypeParmDecl>(declaration) ||
|
||||
clang::isa<clang::TemplateTemplateParmDecl>(declaration))
|
||||
{
|
||||
contextNameHierarchy.back() += "::" + declName;
|
||||
std::string lastContextElementName = contextNameHierarchy.back()->getFullName();
|
||||
contextNameHierarchy.pop();
|
||||
contextNameHierarchy.push(std::make_shared<NameElement>(lastContextElementName + "::" + declName));
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
contextNameHierarchy.push_back(declName);
|
||||
contextNameHierarchy.push(std::make_shared<NameElement>(declName));
|
||||
}
|
||||
}
|
||||
return contextNameHierarchy;
|
||||
}
|
||||
|
||||
std::vector<std::string> getContextNameHierarchy(const clang::DeclContext* declContext)
|
||||
NameHierarchy getContextNameHierarchy(const clang::DeclContext* declContext)
|
||||
{
|
||||
std::vector<std::string> contextNameHierarchy;
|
||||
NameHierarchy contextNameHierarchy;
|
||||
|
||||
const clang::DeclContext* parentContext = declContext->getParent();
|
||||
if (parentContext)
|
||||
@@ -247,18 +258,18 @@ namespace utility
|
||||
|
||||
if (clang::isa<clang::NamedDecl>(declContext))
|
||||
{
|
||||
std::string declName = getDeclName(clang::dyn_cast<const clang::NamedDecl>(declContext));
|
||||
std::string declName = getDeclName(clang::dyn_cast<clang::NamedDecl>(declContext));
|
||||
if (declName != "")
|
||||
{
|
||||
contextNameHierarchy.push_back(declName);
|
||||
contextNameHierarchy.push(std::make_shared<NameElement>(declName));
|
||||
}
|
||||
}
|
||||
return contextNameHierarchy;
|
||||
}
|
||||
|
||||
std::vector<std::string> getContextNameHierarchyOfTemplateParameter(const clang::NamedDecl* templateParmDecl)
|
||||
NameHierarchy getContextNameHierarchyOfTemplateParameter(const clang::NamedDecl* templateParmDecl) // why do we need this??
|
||||
{
|
||||
std::vector<std::string> contextNameHierarchy;
|
||||
NameHierarchy contextNameHierarchy;
|
||||
|
||||
const clang::Decl* parentNode = getAstParentDecl(templateParmDecl);
|
||||
if (parentNode && clang::isa<clang::NamedDecl>(parentNode))
|
||||
@@ -364,9 +375,9 @@ namespace utility
|
||||
return declName;
|
||||
}
|
||||
|
||||
std::vector<std::string> getTemplateSpecializationParentNameHierarchy(clang::ClassTemplateSpecializationDecl* declaration)
|
||||
NameHierarchy getTemplateSpecializationParentNameHierarchy(clang::ClassTemplateSpecializationDecl* declaration)
|
||||
{
|
||||
std::vector<std::string> specializationParentNameHierarchy;
|
||||
NameHierarchy specializationParentNameHierarchy;
|
||||
llvm::PointerUnion<clang::ClassTemplateDecl*, clang::ClassTemplatePartialSpecializationDecl*> pu = declaration->getSpecializedTemplateOrPartial();
|
||||
if (pu.is<clang::ClassTemplateDecl*>())
|
||||
{
|
||||
@@ -424,7 +435,7 @@ namespace utility
|
||||
LOG_ERROR("Type of template argument not handled." + argument.getKind());
|
||||
break;
|
||||
}
|
||||
return std::make_shared<NamedDataType>(std::vector<std::string>());
|
||||
return std::make_shared<NamedDataType>(NameHierarchy());
|
||||
}
|
||||
|
||||
std::string getTemplateParameterString(const clang::NamedDecl* parameter)
|
||||
|
||||
@@ -10,17 +10,18 @@
|
||||
#include "clang/AST/DeclTemplate.h"
|
||||
|
||||
class DataType;
|
||||
class NameHierarchy;
|
||||
|
||||
namespace utility
|
||||
{
|
||||
std::shared_ptr<DataType> qualTypeToDataType(clang::QualType qualType);
|
||||
std::shared_ptr<DataType> typeToDataType(const clang::Type* type);
|
||||
|
||||
std::vector<std::string> getDeclNameHierarchy(const clang::Decl* declaration);
|
||||
std::vector<std::string> getContextNameHierarchy(const clang::DeclContext* declaration);
|
||||
std::vector<std::string> getContextNameHierarchyOfTemplateParameter(const clang::NamedDecl* templateParmDecl);
|
||||
NameHierarchy getDeclNameHierarchy(const clang::Decl* declaration);
|
||||
NameHierarchy getContextNameHierarchy(const clang::DeclContext* declaration);
|
||||
NameHierarchy getContextNameHierarchyOfTemplateParameter(const clang::NamedDecl* templateParmDecl);
|
||||
std::string getDeclName(const clang::NamedDecl* declaration);
|
||||
std::vector<std::string> getTemplateSpecializationParentNameHierarchy(clang::ClassTemplateSpecializationDecl* declaration);
|
||||
NameHierarchy getTemplateSpecializationParentNameHierarchy(clang::ClassTemplateSpecializationDecl* declaration);
|
||||
std::shared_ptr<DataType> templateArgumentToDataType(const clang::TemplateArgument& argument);
|
||||
std::string getTemplateParameterString(const clang::NamedDecl* parameter);
|
||||
std::string getTemplateParameterTypeString(const clang::NonTypeTemplateParmDecl* parameter);
|
||||
|
||||
@@ -51,12 +51,12 @@ const std::string& SearchIndex::getWord(Id wordId) const
|
||||
return m_dictionary.getWord(wordId);
|
||||
}
|
||||
|
||||
SearchNode* SearchIndex::addNode(std::vector<std::string> nameHierarchy)
|
||||
SearchNode* SearchIndex::addNode(NameHierarchy nameHierarchy)
|
||||
{
|
||||
std::deque<Id> nameIds;
|
||||
for (const std::string& name: nameHierarchy)
|
||||
for (int i = 0; i < nameHierarchy.size(); i++)
|
||||
{
|
||||
nameIds.push_back(m_dictionary.getWordId(name));
|
||||
nameIds.push_back(m_dictionary.getWordId(nameHierarchy[i]->getFullName()));
|
||||
}
|
||||
if (nameIds.size())
|
||||
{
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
#include "utility/text/Dictionary.h"
|
||||
#include "utility/types.h"
|
||||
|
||||
#include "data/name/NameHierarchy.h"
|
||||
#include "data/search/SearchNode.h"
|
||||
|
||||
class SearchIndex
|
||||
@@ -25,7 +26,7 @@ public:
|
||||
Id getWordId(const std::string& word);
|
||||
const std::string& getWord(Id wordId) const;
|
||||
|
||||
SearchNode* addNode(std::vector<std::string> nameHierarchy);
|
||||
SearchNode* addNode(NameHierarchy nameHierarchy);
|
||||
SearchNode* getNode(const std::string& fullName) const;
|
||||
SearchNode* getNode(const SearchNode* searchNode) const;
|
||||
|
||||
|
||||
@@ -2,7 +2,8 @@
|
||||
#define DATA_TYPE_H
|
||||
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include "data/name/NameHierarchy.h"
|
||||
|
||||
class DataType
|
||||
{
|
||||
@@ -18,7 +19,7 @@ public:
|
||||
|
||||
virtual std::string getFullTypeName() const = 0;
|
||||
virtual std::string getRawTypeName() const = 0;
|
||||
virtual const std::vector<std::string>& getTypeNameHierarchy() const = 0;
|
||||
virtual const NameHierarchy& getTypeNameHierarchy() const = 0;
|
||||
|
||||
void addQualifier(QualifierType qualifier);
|
||||
void removeQualifier(QualifierType qualifier);
|
||||
|
||||
@@ -22,7 +22,7 @@ std::string ModifiedDataType::getRawTypeName() const
|
||||
return m_dataType->getRawTypeName();
|
||||
}
|
||||
|
||||
const std::vector<std::string>& ModifiedDataType::getTypeNameHierarchy() const
|
||||
const NameHierarchy& ModifiedDataType::getTypeNameHierarchy() const
|
||||
{
|
||||
return m_dataType->getTypeNameHierarchy();
|
||||
}
|
||||
|
||||
@@ -13,7 +13,7 @@ public:
|
||||
|
||||
virtual std::string getFullTypeName() const;
|
||||
virtual std::string getRawTypeName() const;
|
||||
virtual const std::vector<std::string>& getTypeNameHierarchy() const;
|
||||
virtual const NameHierarchy& getTypeNameHierarchy() const;
|
||||
|
||||
protected:
|
||||
virtual void applyModifier(std::string& typeName) const = 0;
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
#include "utility/utilityString.h"
|
||||
|
||||
NamedDataType::NamedDataType(const std::vector<std::string>& nameHierarchy)
|
||||
NamedDataType::NamedDataType(const NameHierarchy& nameHierarchy)
|
||||
: m_nameHierarchy(nameHierarchy)
|
||||
{
|
||||
}
|
||||
@@ -20,10 +20,10 @@ std::string NamedDataType::getFullTypeName() const
|
||||
|
||||
std::string NamedDataType::getRawTypeName() const
|
||||
{
|
||||
return utility::join(m_nameHierarchy, "::");
|
||||
return m_nameHierarchy.getFullName();
|
||||
}
|
||||
|
||||
const std::vector<std::string>& NamedDataType::getTypeNameHierarchy() const
|
||||
const NameHierarchy& NamedDataType::getTypeNameHierarchy() const
|
||||
{
|
||||
return m_nameHierarchy;
|
||||
}
|
||||
|
||||
@@ -1,20 +1,20 @@
|
||||
#ifndef NAMED_DATA_TYPE_H
|
||||
#define NAMED_DATA_TYPE_H
|
||||
|
||||
#include "DataType.h"
|
||||
#include "data/type/DataType.h"
|
||||
|
||||
class NamedDataType: public DataType
|
||||
{
|
||||
public:
|
||||
NamedDataType(const std::vector<std::string>& nameHierarchy);
|
||||
NamedDataType(const NameHierarchy& nameHierarchy);
|
||||
virtual ~NamedDataType();
|
||||
|
||||
virtual std::string getFullTypeName() const;
|
||||
virtual std::string getRawTypeName() const;
|
||||
virtual const std::vector<std::string>& getTypeNameHierarchy() const;
|
||||
virtual const NameHierarchy& getTypeNameHierarchy() const;
|
||||
|
||||
private:
|
||||
const std::vector<std::string> m_nameHierarchy;
|
||||
const NameHierarchy m_nameHierarchy;
|
||||
};
|
||||
|
||||
#endif // NAMED_DATA_TYPE_H
|
||||
|
||||
Reference in New Issue
Block a user