src: code refactoring
* added SymbolType that can be used by ASTVisitor and ParserClient * reordered some of the ParserClient's methods. * removed return type of ParserClient methods.
This commit is contained in:
@@ -133,6 +133,7 @@ add_files(
|
||||
data/parser/ParserClient.h
|
||||
data/parser/ParserClientImpl.cpp
|
||||
data/parser/ParserClientImpl.h
|
||||
data/parser/SymbolType.h
|
||||
|
||||
data/search/SearchIndex.cpp
|
||||
data/search/SearchIndex.h
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
#include <vector>
|
||||
|
||||
#include "data/name/NameHierarchy.h"
|
||||
#include "data/parser/SymbolType.h"
|
||||
#include "utility/file/FileInfo.h"
|
||||
#include "utility/types.h"
|
||||
|
||||
@@ -27,11 +28,6 @@ public:
|
||||
ABSTRACTION_NONE
|
||||
};
|
||||
|
||||
enum RecordType {
|
||||
RECORD_STRUCT,
|
||||
RECORD_CLASS
|
||||
};
|
||||
|
||||
static std::string addAccessPrefix(const std::string& str, AccessType access);
|
||||
static std::string addAbstractionPrefix(const std::string& str, AbstractionType abstraction);
|
||||
static std::string addStaticPrefix(const std::string& str, bool isStatic);
|
||||
@@ -40,7 +36,6 @@ public:
|
||||
static std::string addLocationSuffix(
|
||||
const std::string& str, const ParseLocation& location, const ParseLocation& scopeLocation);
|
||||
|
||||
|
||||
ParserClient();
|
||||
virtual ~ParserClient();
|
||||
|
||||
@@ -52,66 +47,64 @@ public:
|
||||
|
||||
virtual void onError(const ParseLocation& location, const std::string& message, bool fatal) = 0;
|
||||
|
||||
virtual Id onTypedefParsed(
|
||||
virtual void onTypedefParsed(
|
||||
const ParseLocation& location, const NameHierarchy& typedefName, AccessType access, bool isImplicit) = 0;
|
||||
virtual Id onClassParsed(
|
||||
virtual void onClassParsed(
|
||||
const ParseLocation& location, const NameHierarchy& nameHierarchy, AccessType access,
|
||||
const ParseLocation& scopeLocation, bool isImplicit) = 0;
|
||||
virtual Id onStructParsed(
|
||||
virtual void onStructParsed(
|
||||
const ParseLocation& location, const NameHierarchy& nameHierarchy, AccessType access,
|
||||
const ParseLocation& scopeLocation, bool isImplicit) = 0;
|
||||
virtual Id onGlobalVariableParsed(const ParseLocation& location, const NameHierarchy& variable, bool isImplicit) = 0;
|
||||
virtual Id onFieldParsed(const ParseLocation& location, const NameHierarchy& field, AccessType access, bool isImplicit) = 0;
|
||||
virtual Id onFunctionParsed(
|
||||
virtual void onGlobalVariableParsed(const ParseLocation& location, const NameHierarchy& variable, bool isImplicit) = 0;
|
||||
virtual void onFieldParsed(const ParseLocation& location, const NameHierarchy& field, AccessType access, bool isImplicit) = 0;
|
||||
virtual void onFunctionParsed(
|
||||
const ParseLocation& location, const NameHierarchy& function, const ParseLocation& scopeLocation, bool isImplicit) = 0;
|
||||
virtual Id onMethodParsed(
|
||||
virtual void onMethodParsed(
|
||||
const ParseLocation& location, const NameHierarchy& method, AccessType access, AbstractionType abstraction,
|
||||
const ParseLocation& scopeLocation, bool isImplicit) = 0;
|
||||
virtual Id onNamespaceParsed(
|
||||
virtual void onNamespaceParsed(
|
||||
const ParseLocation& location, const NameHierarchy& nameHierarchy,
|
||||
const ParseLocation& scopeLocation, bool isImplicit) = 0;
|
||||
virtual Id onEnumParsed(
|
||||
virtual void onEnumParsed(
|
||||
const ParseLocation& location, const NameHierarchy& nameHierarchy, AccessType access,
|
||||
const ParseLocation& scopeLocation, bool isImplicit) = 0;
|
||||
virtual Id onEnumConstantParsed(const ParseLocation& location, const NameHierarchy& nameHierarchy, bool isImplicit) = 0;
|
||||
virtual Id onTemplateParameterTypeParsed(
|
||||
virtual void onEnumConstantParsed(const ParseLocation& location, const NameHierarchy& nameHierarchy, bool isImplicit) = 0;
|
||||
virtual void onTemplateParameterTypeParsed(
|
||||
const ParseLocation& location, const NameHierarchy& templateParameterTypeNameHierarchy, bool isImplicit) = 0;
|
||||
virtual void onLocalSymbolParsed(const std::string& name, const ParseLocation& location) = 0;
|
||||
virtual void onFileParsed(const FileInfo& fileInfo) = 0;
|
||||
virtual void onMacroDefineParsed(
|
||||
const ParseLocation& location, const NameHierarchy& macroNameHierarchy, const ParseLocation& scopeLocation) = 0;
|
||||
virtual void onCommentParsed(const ParseLocation& location) = 0;
|
||||
|
||||
virtual Id onInheritanceParsed(
|
||||
virtual void onInheritanceParsed(
|
||||
const ParseLocation& location, const NameHierarchy& nameHierarchy,
|
||||
const NameHierarchy& baseNameHierarchy, AccessType access) = 0;
|
||||
virtual Id onMethodOverrideParsed(
|
||||
virtual void onMethodOverrideParsed(
|
||||
const ParseLocation& location, const NameHierarchy& overridden, const NameHierarchy& overrider) = 0;
|
||||
virtual Id onCallParsed(
|
||||
virtual void onCallParsed(
|
||||
const ParseLocation& location, const NameHierarchy& caller, const NameHierarchy& callee) = 0;
|
||||
virtual Id onUsageParsed(
|
||||
const ParseLocation& location, const NameHierarchy& userName, int usedType, const NameHierarchy& usedName) = 0;
|
||||
virtual Id onTypeUsageParsed(const ParseLocation& location, const NameHierarchy& user, const NameHierarchy& used) = 0;
|
||||
virtual void onUsageParsed(
|
||||
const ParseLocation& location, const NameHierarchy& userName, SymbolType usedType, const NameHierarchy& usedName) = 0;
|
||||
virtual void onTypeUsageParsed(const ParseLocation& location, const NameHierarchy& user, const NameHierarchy& used) = 0;
|
||||
|
||||
virtual Id onTemplateArgumentTypeParsed(
|
||||
virtual void onTemplateArgumentTypeParsed(
|
||||
const ParseLocation& location, const NameHierarchy& argumentTypeNameHierarchy,
|
||||
const NameHierarchy& templateNameHierarchy) = 0;
|
||||
virtual Id onTemplateDefaultArgumentTypeParsed(
|
||||
virtual void onTemplateDefaultArgumentTypeParsed(
|
||||
const ParseLocation& location, const NameHierarchy& defaultArgumentTypeNameHierarchy,
|
||||
const NameHierarchy& templateParameterNameHierarchy) = 0;
|
||||
virtual Id onTemplateSpecializationParsed(
|
||||
virtual void onTemplateSpecializationParsed(
|
||||
const ParseLocation& location, const NameHierarchy& specializedNameHierarchy,
|
||||
const NameHierarchy& specializedFromNameHierarchy) = 0;
|
||||
virtual Id onTemplateMemberFunctionSpecializationParsed(
|
||||
virtual void onTemplateMemberFunctionSpecializationParsed(
|
||||
const ParseLocation& location, const NameHierarchy& instantiatedFunction, const NameHierarchy& specializedFunction) = 0;
|
||||
|
||||
virtual Id onLocalSymbolParsed(const std::string& name, const ParseLocation& location) = 0;
|
||||
|
||||
virtual Id onFileParsed(const FileInfo& fileInfo) = 0;
|
||||
virtual Id onFileIncludeParsed(
|
||||
virtual void onFileIncludeParsed(
|
||||
const ParseLocation& location, const FileInfo& fileInfo, const FileInfo& includedFileInfo) = 0;
|
||||
|
||||
virtual Id onMacroDefineParsed(
|
||||
const ParseLocation& location, const NameHierarchy& macroNameHierarchy, const ParseLocation& scopeLocation) = 0;
|
||||
virtual Id onMacroExpandParsed(
|
||||
virtual void onMacroExpandParsed(
|
||||
const ParseLocation& location, const NameHierarchy& macroNameHierarchy) = 0;
|
||||
|
||||
virtual Id onCommentParsed(const ParseLocation& location) = 0;
|
||||
};
|
||||
|
||||
#endif // PARSER_CLIENT_H
|
||||
|
||||
@@ -53,7 +53,7 @@ void ParserClientImpl::onError(const ParseLocation& location, const std::string&
|
||||
addError(message, fatal, location);
|
||||
}
|
||||
|
||||
Id ParserClientImpl::onTypedefParsed(
|
||||
void ParserClientImpl::onTypedefParsed(
|
||||
const ParseLocation& location, const NameHierarchy& typedefName, AccessType access, bool isImplicit)
|
||||
{
|
||||
log("typedef", typedefName.getQualifiedName(), location);
|
||||
@@ -61,11 +61,9 @@ Id ParserClientImpl::onTypedefParsed(
|
||||
Id nodeId = addNodeHierarchy(Node::NODE_TYPEDEF, typedefName, (isImplicit ? DEFINITION_IMPLICIT : DEFINITION_EXPLICIT));
|
||||
addSourceLocation(nodeId, location, locationTypeToInt(LOCATION_TOKEN));
|
||||
addAccess(nodeId, access);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Id ParserClientImpl::onClassParsed(
|
||||
void ParserClientImpl::onClassParsed(
|
||||
const ParseLocation& location, const NameHierarchy& nameHierarchy, AccessType access,
|
||||
const ParseLocation& scopeLocation, bool isImplicit)
|
||||
{
|
||||
@@ -79,11 +77,9 @@ Id ParserClientImpl::onClassParsed(
|
||||
addSourceLocation(nodeId, location, locationTypeToInt(LOCATION_TOKEN));
|
||||
addSourceLocation(nodeId, scopeLocation, locationTypeToInt(LOCATION_SCOPE));
|
||||
addAccess(nodeId, access);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Id ParserClientImpl::onStructParsed(
|
||||
void ParserClientImpl::onStructParsed(
|
||||
const ParseLocation& location, const NameHierarchy& nameHierarchy, AccessType access,
|
||||
const ParseLocation& scopeLocation, bool isImplicit)
|
||||
{
|
||||
@@ -97,32 +93,26 @@ Id ParserClientImpl::onStructParsed(
|
||||
addSourceLocation(nodeId, location, locationTypeToInt(LOCATION_TOKEN));
|
||||
addSourceLocation(nodeId, scopeLocation, locationTypeToInt(LOCATION_SCOPE));
|
||||
addAccess(nodeId, access);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Id ParserClientImpl::onGlobalVariableParsed(const ParseLocation& location, const NameHierarchy& variable, bool isImplicit)
|
||||
void ParserClientImpl::onGlobalVariableParsed(const ParseLocation& location, const NameHierarchy& variable, bool isImplicit)
|
||||
{
|
||||
log("global", variable.getQualifiedName(), location);
|
||||
|
||||
Id nodeId = addNodeHierarchy(Node::NODE_GLOBAL_VARIABLE, variable, (isImplicit ? DEFINITION_IMPLICIT : DEFINITION_EXPLICIT));
|
||||
addSourceLocation(nodeId, location, locationTypeToInt(LOCATION_TOKEN));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Id ParserClientImpl::onFieldParsed(const ParseLocation& location, const NameHierarchy& field, AccessType access, bool isImplicit)
|
||||
void ParserClientImpl::onFieldParsed(const ParseLocation& location, const NameHierarchy& field, AccessType access, bool isImplicit)
|
||||
{
|
||||
log("field", field.getQualifiedName(), location);
|
||||
|
||||
Id nodeId = addNodeHierarchy(Node::NODE_FIELD, field, (isImplicit ? DEFINITION_IMPLICIT : DEFINITION_EXPLICIT));
|
||||
addSourceLocation(nodeId, location, locationTypeToInt(LOCATION_TOKEN));
|
||||
addAccess(nodeId, access);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Id ParserClientImpl::onFunctionParsed(
|
||||
void ParserClientImpl::onFunctionParsed(
|
||||
const ParseLocation& location, const NameHierarchy& function, const ParseLocation& scopeLocation, bool isImplicit)
|
||||
{
|
||||
log("function", function.getQualifiedNameWithSignature(), location);
|
||||
@@ -130,11 +120,9 @@ Id ParserClientImpl::onFunctionParsed(
|
||||
Id nodeId = addNodeHierarchy(Node::NODE_FUNCTION, function, (isImplicit ? DEFINITION_IMPLICIT : DEFINITION_EXPLICIT));
|
||||
addSourceLocation(nodeId, location, locationTypeToInt(LOCATION_TOKEN));
|
||||
addSourceLocation(nodeId, scopeLocation, locationTypeToInt(LOCATION_SCOPE));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Id ParserClientImpl::onMethodParsed(
|
||||
void ParserClientImpl::onMethodParsed(
|
||||
const ParseLocation& location, const NameHierarchy& method, AccessType access, AbstractionType abstraction,
|
||||
const ParseLocation& scopeLocation, bool isImplicit)
|
||||
{
|
||||
@@ -148,11 +136,9 @@ Id ParserClientImpl::onMethodParsed(
|
||||
addSourceLocation(nodeId, location, locationTypeToInt(LOCATION_TOKEN));
|
||||
addSourceLocation(nodeId, scopeLocation, locationTypeToInt(LOCATION_SCOPE));
|
||||
addAccess(nodeId, access);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Id ParserClientImpl::onNamespaceParsed(
|
||||
void ParserClientImpl::onNamespaceParsed(
|
||||
const ParseLocation& location, const NameHierarchy& nameHierarchy, const ParseLocation& scopeLocation, bool isImplicit)
|
||||
{
|
||||
log("namespace", nameHierarchy.getQualifiedName(), location);
|
||||
@@ -160,11 +146,9 @@ Id ParserClientImpl::onNamespaceParsed(
|
||||
Id nodeId = addNodeHierarchy(Node::NODE_NAMESPACE, nameHierarchy, (isImplicit ? DEFINITION_IMPLICIT : DEFINITION_EXPLICIT));
|
||||
addSourceLocation(nodeId, location, locationTypeToInt(LOCATION_TOKEN));
|
||||
addSourceLocation(nodeId, scopeLocation, locationTypeToInt(LOCATION_SCOPE));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Id ParserClientImpl::onEnumParsed(
|
||||
void ParserClientImpl::onEnumParsed(
|
||||
const ParseLocation& location, const NameHierarchy& nameHierarchy, AccessType access,
|
||||
const ParseLocation& scopeLocation, bool isImplicit)
|
||||
{
|
||||
@@ -174,21 +158,17 @@ Id ParserClientImpl::onEnumParsed(
|
||||
addSourceLocation(nodeId, location, locationTypeToInt(LOCATION_TOKEN));
|
||||
addSourceLocation(nodeId, scopeLocation, locationTypeToInt(LOCATION_SCOPE));
|
||||
addAccess(nodeId, access);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Id ParserClientImpl::onEnumConstantParsed(const ParseLocation& location, const NameHierarchy& nameHierarchy, bool isImplicit)
|
||||
void ParserClientImpl::onEnumConstantParsed(const ParseLocation& location, const NameHierarchy& nameHierarchy, bool isImplicit)
|
||||
{
|
||||
log("enum constant", nameHierarchy.getQualifiedName(), location);
|
||||
|
||||
Id nodeId = addNodeHierarchy(Node::NODE_ENUM_CONSTANT, nameHierarchy, (isImplicit ? DEFINITION_IMPLICIT : DEFINITION_EXPLICIT));
|
||||
addSourceLocation(nodeId, location, locationTypeToInt(LOCATION_TOKEN));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Id ParserClientImpl::onTemplateParameterTypeParsed(
|
||||
void ParserClientImpl::onTemplateParameterTypeParsed(
|
||||
const ParseLocation& location, const NameHierarchy& templateParameterTypeNameHierarchy, bool isImplicit)
|
||||
{
|
||||
log("template parameter type", templateParameterTypeNameHierarchy.getQualifiedName(), location);
|
||||
@@ -196,11 +176,48 @@ Id ParserClientImpl::onTemplateParameterTypeParsed(
|
||||
Id nodeId = addNodeHierarchy(Node::NODE_TEMPLATE_PARAMETER_TYPE, templateParameterTypeNameHierarchy, (isImplicit ? DEFINITION_IMPLICIT : DEFINITION_EXPLICIT));
|
||||
addSourceLocation(nodeId, location, locationTypeToInt(LOCATION_TOKEN));
|
||||
addAccess(nodeId, TokenComponentAccess::ACCESS_TEMPLATE);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Id ParserClientImpl::onInheritanceParsed(
|
||||
void ParserClientImpl::onLocalSymbolParsed(const std::string& name, const ParseLocation& location)
|
||||
{
|
||||
log(
|
||||
"local symbol",
|
||||
name,
|
||||
location
|
||||
);
|
||||
|
||||
Id localSymbolId = addLocalSymbol(name);
|
||||
addSourceLocation(localSymbolId, location, locationTypeToInt(LOCATION_LOCAL_SYMBOL));
|
||||
}
|
||||
|
||||
void ParserClientImpl::onFileParsed(const FileInfo& fileInfo)
|
||||
{
|
||||
log("file", fileInfo.path.str(), ParseLocation());
|
||||
|
||||
addFile(fileInfo.path.fileName(), fileInfo.path.str(), fileInfo.lastWriteTime.toString());
|
||||
}
|
||||
|
||||
void ParserClientImpl::onMacroDefineParsed(
|
||||
const ParseLocation& location, const NameHierarchy& macroNameHierarchy, const ParseLocation& scopeLocation)
|
||||
{
|
||||
log("macro", macroNameHierarchy.getQualifiedName(), location);
|
||||
|
||||
Id macroId = addNodeHierarchy(Node::NODE_MACRO, macroNameHierarchy, DEFINITION_EXPLICIT);
|
||||
addSourceLocation(macroId, location, locationTypeToInt(LOCATION_TOKEN));
|
||||
addSourceLocation(macroId, scopeLocation, locationTypeToInt(LOCATION_SCOPE));
|
||||
//Id fileNodeId = getFileNodeId(location.filePath); // do we need this???
|
||||
//addEdge(Edge::EDGE_MACRO_USAGE, fileNodeId, macroId, , location);
|
||||
}
|
||||
|
||||
void ParserClientImpl::onCommentParsed(const ParseLocation& location)
|
||||
{
|
||||
log("comment", "no name", location);
|
||||
|
||||
addFile(location.filePath.str());
|
||||
addCommentLocation(location);
|
||||
}
|
||||
|
||||
void ParserClientImpl::onInheritanceParsed(
|
||||
const ParseLocation& location, const NameHierarchy& childNameHierarchy,
|
||||
const NameHierarchy& parentNameHierarchy, AccessType access)
|
||||
{
|
||||
@@ -210,11 +227,9 @@ Id ParserClientImpl::onInheritanceParsed(
|
||||
Id parentNodeId = addNodeHierarchy(Node::NODE_TYPE, parentNameHierarchy, DEFINITION_NONE);
|
||||
Id edgeId = addEdge(Edge::EDGE_INHERITANCE, childNodeId, parentNodeId);
|
||||
addSourceLocation(edgeId, location, locationTypeToInt(LOCATION_TOKEN));
|
||||
|
||||
return edgeId;
|
||||
}
|
||||
|
||||
Id ParserClientImpl::onMethodOverrideParsed(
|
||||
void ParserClientImpl::onMethodOverrideParsed(
|
||||
const ParseLocation& location, const NameHierarchy& overridden, const NameHierarchy& overrider)
|
||||
{
|
||||
log("override", overridden.getQualifiedNameWithSignature() + " -> " + overrider.getQualifiedNameWithSignature(), location);
|
||||
@@ -223,11 +238,9 @@ Id ParserClientImpl::onMethodOverrideParsed(
|
||||
Id overriderNodeId = addNodeHierarchy(Node::NODE_FUNCTION, overrider, DEFINITION_NONE);
|
||||
Id edgeId = addEdge(Edge::EDGE_OVERRIDE, overriderNodeId, overriddenNodeId);
|
||||
addSourceLocation(edgeId, location, locationTypeToInt(LOCATION_TOKEN));
|
||||
|
||||
return edgeId;
|
||||
}
|
||||
|
||||
Id ParserClientImpl::onCallParsed(const ParseLocation& location, const NameHierarchy& caller, const NameHierarchy& callee)
|
||||
void ParserClientImpl::onCallParsed(const ParseLocation& location, const NameHierarchy& caller, const NameHierarchy& callee)
|
||||
{
|
||||
log("call", caller.getQualifiedNameWithSignature() + " -> " + callee.getQualifiedNameWithSignature(), location);
|
||||
|
||||
@@ -235,41 +248,35 @@ Id ParserClientImpl::onCallParsed(const ParseLocation& location, const NameHiera
|
||||
Id calleeNodeId = addNodeHierarchy(Node::NODE_FUNCTION, callee, DEFINITION_NONE);
|
||||
Id edgeId = addEdge(Edge::EDGE_CALL, callerNodeId, calleeNodeId);
|
||||
addSourceLocation(edgeId, location, locationTypeToInt(LOCATION_TOKEN));
|
||||
|
||||
return edgeId;
|
||||
}
|
||||
|
||||
Id ParserClientImpl::onUsageParsed(
|
||||
const ParseLocation& location, const NameHierarchy& userName, int usedType, const NameHierarchy& usedName)
|
||||
void ParserClientImpl::onUsageParsed(
|
||||
const ParseLocation& location, const NameHierarchy& userName, SymbolType usedType, const NameHierarchy& usedName)
|
||||
{
|
||||
log("usage", userName.getQualifiedNameWithSignature() + " -> " + usedName.getQualifiedName(), location);
|
||||
|
||||
Id userNodeId = addNodeHierarchy(Node::NODE_UNDEFINED, userName, DEFINITION_NONE);
|
||||
Id usedNodeId = addNodeHierarchy(Node::intToType(usedType), usedName, DEFINITION_NONE);
|
||||
Id usedNodeId = addNodeHierarchy(symbolTypeToNodeType(usedType), usedName, DEFINITION_NONE);
|
||||
Id edgeId = addEdge(Edge::EDGE_USAGE, userNodeId, usedNodeId);
|
||||
addSourceLocation(edgeId, location, locationTypeToInt(LOCATION_TOKEN));
|
||||
|
||||
return edgeId;
|
||||
}
|
||||
|
||||
Id ParserClientImpl::onTypeUsageParsed(const ParseLocation& location, const NameHierarchy& user, const NameHierarchy& used)
|
||||
void ParserClientImpl::onTypeUsageParsed(const ParseLocation& location, const NameHierarchy& user, const NameHierarchy& used)
|
||||
{
|
||||
log("type usage", user.getQualifiedNameWithSignature() + " -> " + used.getQualifiedName(), location);
|
||||
|
||||
if (!location.isValid())
|
||||
{
|
||||
return 0;
|
||||
return;
|
||||
}
|
||||
|
||||
Id functionNodeId = addNodeHierarchy(Node::NODE_UNDEFINED, user, DEFINITION_NONE);
|
||||
Id typeNodeId = addNodeHierarchy(Node::NODE_TYPE, used, DEFINITION_NONE);
|
||||
Id edgeId = addEdge(Edge::EDGE_TYPE_USAGE, functionNodeId, typeNodeId);
|
||||
addSourceLocation(edgeId, location, locationTypeToInt(LOCATION_TOKEN));
|
||||
|
||||
return edgeId;
|
||||
}
|
||||
|
||||
Id ParserClientImpl::onTemplateArgumentTypeParsed(
|
||||
void ParserClientImpl::onTemplateArgumentTypeParsed(
|
||||
const ParseLocation& location, const NameHierarchy& argumentTypeNameHierarchy,
|
||||
const NameHierarchy& templateNameHierarchy)
|
||||
{
|
||||
@@ -277,17 +284,15 @@ Id ParserClientImpl::onTemplateArgumentTypeParsed(
|
||||
"template argument type",
|
||||
argumentTypeNameHierarchy.getQualifiedName() + " -> " + templateNameHierarchy.getQualifiedName(),
|
||||
location
|
||||
);
|
||||
);
|
||||
|
||||
Id argumentNodeId = addNodeHierarchy(Node::NODE_TYPE, argumentTypeNameHierarchy, DEFINITION_NONE);
|
||||
Id templateNodeId = addNodeHierarchy(Node::NODE_UNDEFINED, templateNameHierarchy, DEFINITION_NONE);
|
||||
Id edgeId = addEdge(Edge::EDGE_TEMPLATE_ARGUMENT, templateNodeId, argumentNodeId);
|
||||
addSourceLocation(edgeId, location, locationTypeToInt(LOCATION_TOKEN));
|
||||
|
||||
return argumentNodeId;
|
||||
}
|
||||
|
||||
Id ParserClientImpl::onTemplateDefaultArgumentTypeParsed(
|
||||
void ParserClientImpl::onTemplateDefaultArgumentTypeParsed(
|
||||
const ParseLocation& location, const NameHierarchy& defaultArgumentTypeNameHierarchy,
|
||||
const NameHierarchy& templateParameterNameHierarchy)
|
||||
{
|
||||
@@ -295,17 +300,15 @@ Id ParserClientImpl::onTemplateDefaultArgumentTypeParsed(
|
||||
"template default argument",
|
||||
defaultArgumentTypeNameHierarchy.getQualifiedNameWithSignature() + " -> " + templateParameterNameHierarchy.getQualifiedName(),
|
||||
location
|
||||
);
|
||||
);
|
||||
|
||||
Id defaultArgumentNodeId = addNodeHierarchy(Node::NODE_TYPE, defaultArgumentTypeNameHierarchy, DEFINITION_NONE);
|
||||
Id parameterNodeId = addNodeHierarchy(Node::NODE_TYPE, templateParameterNameHierarchy, DEFINITION_NONE);
|
||||
Id edgeId = addEdge(Edge::EDGE_TEMPLATE_DEFAULT_ARGUMENT, parameterNodeId, defaultArgumentNodeId);
|
||||
addSourceLocation(edgeId, location, locationTypeToInt(LOCATION_TOKEN));
|
||||
|
||||
return defaultArgumentNodeId;
|
||||
}
|
||||
|
||||
Id ParserClientImpl::onTemplateSpecializationParsed(
|
||||
void ParserClientImpl::onTemplateSpecializationParsed(
|
||||
const ParseLocation& location, const NameHierarchy& specializedNameHierarchy,
|
||||
const NameHierarchy& specializedFromNameHierarchy)
|
||||
{
|
||||
@@ -313,17 +316,15 @@ Id ParserClientImpl::onTemplateSpecializationParsed(
|
||||
"template record specialization",
|
||||
specializedNameHierarchy.getQualifiedName() + " -> " + specializedFromNameHierarchy.getQualifiedName(),
|
||||
location
|
||||
);
|
||||
);
|
||||
|
||||
Id specializedId = addNodeHierarchy(Node::NODE_TYPE, specializedNameHierarchy, DEFINITION_NONE);
|
||||
Id recordNodeId = addNodeHierarchy(Node::NODE_TYPE, specializedFromNameHierarchy, DEFINITION_NONE);
|
||||
Id edgeId = addEdge(Edge::EDGE_TEMPLATE_SPECIALIZATION_OF, specializedId, recordNodeId);
|
||||
addSourceLocation(edgeId, location, locationTypeToInt(LOCATION_TOKEN));
|
||||
|
||||
return edgeId;
|
||||
}
|
||||
|
||||
Id ParserClientImpl::onTemplateMemberFunctionSpecializationParsed(
|
||||
void ParserClientImpl::onTemplateMemberFunctionSpecializationParsed(
|
||||
const ParseLocation& location, const NameHierarchy& instantiatedFunction, const NameHierarchy& specializedFunction)
|
||||
{
|
||||
log(
|
||||
@@ -336,34 +337,9 @@ Id ParserClientImpl::onTemplateMemberFunctionSpecializationParsed(
|
||||
Id specializedFunctionNodeId = addNodeHierarchy(Node::NODE_FUNCTION, specializedFunction, DEFINITION_NONE);
|
||||
Id edgeId = addEdge(Edge::EDGE_TEMPLATE_MEMBER_SPECIALIZATION_OF, instantiatedFunctionNodeId, specializedFunctionNodeId);
|
||||
addSourceLocation(edgeId, location, locationTypeToInt(LOCATION_TOKEN));
|
||||
|
||||
return edgeId;
|
||||
}
|
||||
|
||||
Id ParserClientImpl::onLocalSymbolParsed(const std::string& name, const ParseLocation& location)
|
||||
{
|
||||
log(
|
||||
"local symbol",
|
||||
name,
|
||||
location
|
||||
);
|
||||
|
||||
Id localSymbolId = addLocalSymbol(name);
|
||||
addSourceLocation(localSymbolId, location, locationTypeToInt(LOCATION_LOCAL_SYMBOL));
|
||||
|
||||
return localSymbolId;
|
||||
}
|
||||
|
||||
Id ParserClientImpl::onFileParsed(const FileInfo& fileInfo) // TODO: move up to nodes
|
||||
{
|
||||
log("file", fileInfo.path.str(), ParseLocation());
|
||||
|
||||
addFile(fileInfo.path.fileName(), fileInfo.path.str(), fileInfo.lastWriteTime.toString());
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
Id ParserClientImpl::onFileIncludeParsed(const ParseLocation& location, const FileInfo& fileInfo, const FileInfo& includedFileInfo)
|
||||
void ParserClientImpl::onFileIncludeParsed(const ParseLocation& location, const FileInfo& fileInfo, const FileInfo& includedFileInfo)
|
||||
{
|
||||
log("include", includedFileInfo.path.str(), location);
|
||||
|
||||
@@ -371,25 +347,9 @@ Id ParserClientImpl::onFileIncludeParsed(const ParseLocation& location, const Fi
|
||||
Id includedFileNodeId = addFile(includedFileInfo.path.fileName(), includedFileInfo.path.str(), includedFileInfo.lastWriteTime.toString());
|
||||
Id edgeId = addEdge(Edge::EDGE_INCLUDE, fileNodeId, includedFileNodeId);
|
||||
addSourceLocation(edgeId, location, locationTypeToInt(LOCATION_TOKEN));
|
||||
|
||||
return fileNodeId;
|
||||
}
|
||||
|
||||
Id ParserClientImpl::onMacroDefineParsed(
|
||||
const ParseLocation& location, const NameHierarchy& macroNameHierarchy, const ParseLocation& scopeLocation)
|
||||
{
|
||||
log("macro", macroNameHierarchy.getQualifiedName(), location);
|
||||
|
||||
Id macroId = addNodeHierarchy(Node::NODE_MACRO, macroNameHierarchy, DEFINITION_EXPLICIT);
|
||||
addSourceLocation(macroId, location, locationTypeToInt(LOCATION_TOKEN));
|
||||
addSourceLocation(macroId, scopeLocation, locationTypeToInt(LOCATION_SCOPE));
|
||||
//Id fileNodeId = getFileNodeId(location.filePath); // do we need this???
|
||||
//addEdge(Edge::EDGE_MACRO_USAGE, fileNodeId, macroId, , location);
|
||||
|
||||
return macroId;
|
||||
}
|
||||
|
||||
Id ParserClientImpl::onMacroExpandParsed(const ParseLocation &location, const NameHierarchy& macroNameHierarchy)
|
||||
void ParserClientImpl::onMacroExpandParsed(const ParseLocation &location, const NameHierarchy& macroNameHierarchy)
|
||||
{
|
||||
log("macro use", macroNameHierarchy.getQualifiedName(), location);
|
||||
|
||||
@@ -397,18 +357,40 @@ Id ParserClientImpl::onMacroExpandParsed(const ParseLocation &location, const Na
|
||||
Id fileNodeId = addFile(location.filePath.str());
|
||||
Id edgeId = addEdge(Edge::EDGE_MACRO_USAGE, fileNodeId, macroExpandId);
|
||||
addSourceLocation(edgeId, location, locationTypeToInt(LOCATION_TOKEN));
|
||||
|
||||
return edgeId;
|
||||
}
|
||||
|
||||
Id ParserClientImpl::onCommentParsed(const ParseLocation& location) // TODO: move up to nodes
|
||||
Node::NodeType ParserClientImpl::symbolTypeToNodeType(SymbolType symbolType) const
|
||||
{
|
||||
log("comment", "no name", location);
|
||||
|
||||
addFile(location.filePath.str());
|
||||
addCommentLocation(location);
|
||||
|
||||
return 0;
|
||||
switch (symbolType)
|
||||
{
|
||||
case SYMBOL_CLASS:
|
||||
return Node::NODE_CLASS;
|
||||
case SYMBOL_ENUM:
|
||||
return Node::NODE_ENUM;
|
||||
case SYMBOL_ENUM_CONSTANT:
|
||||
return Node::NODE_ENUM_CONSTANT;
|
||||
case SYMBOL_FIELD:
|
||||
return Node::NODE_FIELD;
|
||||
case SYMBOL_FUNCTION:
|
||||
return Node::NODE_FUNCTION;
|
||||
case SYMBOL_GLOBAL_VARIABLE:
|
||||
return Node::NODE_GLOBAL_VARIABLE;
|
||||
case SYMBOL_MACRO:
|
||||
return Node::NODE_MACRO;
|
||||
case SYMBOL_METHOD:
|
||||
return Node::NODE_METHOD;
|
||||
case SYMBOL_NAMESPACE:
|
||||
return Node::NODE_NAMESPACE;
|
||||
case SYMBOL_STRUCT:
|
||||
return Node::NODE_STRUCT;
|
||||
case SYMBOL_TYPEDEF:
|
||||
return Node::NODE_TYPEDEF;
|
||||
case SYMBOL_TEMPLATE_PARAMETER:
|
||||
return Node::NODE_TEMPLATE_PARAMETER_TYPE;
|
||||
case SYMBOL_UNION:
|
||||
return Node::NODE_TYPE;
|
||||
}
|
||||
return Node::NODE_UNDEFINED;
|
||||
}
|
||||
|
||||
TokenComponentAccess::AccessType ParserClientImpl::convertAccessType(ParserClient::AccessType access) const
|
||||
@@ -472,8 +454,6 @@ Id ParserClientImpl::addNodeHierarchy(Node::NodeType nodeType, NameHierarchy nam
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
Id ParserClientImpl::addFile(const std::string& name, const std::string& filePath, const std::string& modificationTime)
|
||||
{
|
||||
if (!m_storage)
|
||||
|
||||
@@ -26,68 +26,67 @@ public:
|
||||
|
||||
virtual void onError(const ParseLocation& location, const std::string& message, bool fatal);
|
||||
|
||||
virtual Id onTypedefParsed(
|
||||
virtual void onTypedefParsed(
|
||||
const ParseLocation& location, const NameHierarchy& typedefName, AccessType access, bool isImplicit);
|
||||
virtual Id onClassParsed(
|
||||
virtual void onClassParsed(
|
||||
const ParseLocation& location, const NameHierarchy& nameHierarchy, AccessType access,
|
||||
const ParseLocation& scopeLocation, bool isImplicit);
|
||||
virtual Id onStructParsed(
|
||||
virtual void onStructParsed(
|
||||
const ParseLocation& location, const NameHierarchy& nameHierarchy, AccessType access,
|
||||
const ParseLocation& scopeLocation, bool isImplicit);
|
||||
virtual Id onGlobalVariableParsed(const ParseLocation& location, const NameHierarchy& variable, bool isImplicit);
|
||||
virtual Id onFieldParsed(const ParseLocation& location, const NameHierarchy& field, AccessType access, bool isImplicit);
|
||||
virtual Id onFunctionParsed(
|
||||
virtual void onGlobalVariableParsed(const ParseLocation& location, const NameHierarchy& variable, bool isImplicit);
|
||||
virtual void onFieldParsed(const ParseLocation& location, const NameHierarchy& field, AccessType access, bool isImplicit);
|
||||
virtual void onFunctionParsed(
|
||||
const ParseLocation& location, const NameHierarchy& function, const ParseLocation& scopeLocation, bool isImplicit);
|
||||
virtual Id onMethodParsed(
|
||||
virtual void onMethodParsed(
|
||||
const ParseLocation& location, const NameHierarchy& method, AccessType access, AbstractionType abstraction,
|
||||
const ParseLocation& scopeLocation, bool isImplicit);
|
||||
virtual Id onNamespaceParsed(
|
||||
virtual void onNamespaceParsed(
|
||||
const ParseLocation& location, const NameHierarchy& nameHierarchy,
|
||||
const ParseLocation& scopeLocation, bool isImplicit);
|
||||
virtual Id onEnumParsed(
|
||||
virtual void onEnumParsed(
|
||||
const ParseLocation& location, const NameHierarchy& nameHierarchy, AccessType access,
|
||||
const ParseLocation& scopeLocation, bool isImplicit);
|
||||
virtual Id onEnumConstantParsed(const ParseLocation& location, const NameHierarchy& nameHierarchy, bool isImplicit);
|
||||
virtual Id onTemplateParameterTypeParsed(
|
||||
virtual void onEnumConstantParsed(const ParseLocation& location, const NameHierarchy& nameHierarchy, bool isImplicit);
|
||||
virtual void onTemplateParameterTypeParsed(
|
||||
const ParseLocation& location, const NameHierarchy& templateParameterTypeNameHierarchy, bool isImplicit);
|
||||
virtual void onLocalSymbolParsed(const std::string& name, const ParseLocation& location);
|
||||
virtual void onFileParsed(const FileInfo& fileInfo);
|
||||
virtual void onMacroDefineParsed(
|
||||
const ParseLocation& location, const NameHierarchy& macroNameHierarchy, const ParseLocation& scopeLocation);
|
||||
virtual void onCommentParsed(const ParseLocation& location);
|
||||
|
||||
virtual Id onInheritanceParsed(
|
||||
virtual void onInheritanceParsed(
|
||||
const ParseLocation& location, const NameHierarchy& nameHierarchy,
|
||||
const NameHierarchy& baseNameHierarchy, AccessType access);
|
||||
virtual Id onMethodOverrideParsed(
|
||||
virtual void onMethodOverrideParsed(
|
||||
const ParseLocation& location, const NameHierarchy& overridden, const NameHierarchy& overrider);
|
||||
virtual Id onCallParsed(
|
||||
virtual void onCallParsed(
|
||||
const ParseLocation& location, const NameHierarchy& caller, const NameHierarchy& callee);
|
||||
virtual Id onUsageParsed(
|
||||
const ParseLocation& location, const NameHierarchy& userName, int usedType, const NameHierarchy& usedName);
|
||||
virtual Id onTypeUsageParsed(const ParseLocation& location, const NameHierarchy& user, const NameHierarchy& used);
|
||||
virtual void onUsageParsed(
|
||||
const ParseLocation& location, const NameHierarchy& userName, SymbolType usedType, const NameHierarchy& usedName);
|
||||
virtual void onTypeUsageParsed(const ParseLocation& location, const NameHierarchy& user, const NameHierarchy& used);
|
||||
|
||||
virtual Id onTemplateArgumentTypeParsed(
|
||||
virtual void onTemplateArgumentTypeParsed(
|
||||
const ParseLocation& location, const NameHierarchy& argumentTypeNameHierarchy,
|
||||
const NameHierarchy& templateNameHierarchy);
|
||||
virtual Id onTemplateDefaultArgumentTypeParsed(
|
||||
virtual void onTemplateDefaultArgumentTypeParsed(
|
||||
const ParseLocation& location, const NameHierarchy& defaultArgumentTypeNameHierarchy,
|
||||
const NameHierarchy& templateParameterNameHierarchy);
|
||||
virtual Id onTemplateSpecializationParsed(
|
||||
virtual void onTemplateSpecializationParsed(
|
||||
const ParseLocation& location, const NameHierarchy& specializedNameHierarchy,
|
||||
const NameHierarchy& specializedFromNameHierarchy);
|
||||
virtual Id onTemplateMemberFunctionSpecializationParsed(
|
||||
virtual void onTemplateMemberFunctionSpecializationParsed(
|
||||
const ParseLocation& location, const NameHierarchy& instantiatedFunction, const NameHierarchy& specializedFunction);
|
||||
|
||||
virtual Id onLocalSymbolParsed(const std::string& name, const ParseLocation& location);
|
||||
|
||||
virtual Id onFileParsed(const FileInfo& fileInfo);
|
||||
virtual Id onFileIncludeParsed(
|
||||
virtual void onFileIncludeParsed(
|
||||
const ParseLocation& location, const FileInfo& fileInfo, const FileInfo& includedFileInfo);
|
||||
|
||||
virtual Id onMacroDefineParsed(
|
||||
const ParseLocation& location, const NameHierarchy& macroNameHierarchy, const ParseLocation& scopeLocation);
|
||||
virtual Id onMacroExpandParsed(
|
||||
virtual void onMacroExpandParsed(
|
||||
const ParseLocation& location, const NameHierarchy& macroNameHierarchy);
|
||||
|
||||
virtual Id onCommentParsed(const ParseLocation& location);
|
||||
|
||||
private:
|
||||
Node::NodeType symbolTypeToNodeType(SymbolType symbolType) const;
|
||||
TokenComponentAccess::AccessType convertAccessType(ParserClient::AccessType access) const;
|
||||
void addAccess(Id nodeId, ParserClient::AccessType access);
|
||||
void addAccess(Id nodeId, TokenComponentAccess::AccessType access);
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
#ifndef SYMBOL_TYPE_H
|
||||
#define SYMBOL_TYPE_H
|
||||
|
||||
enum SymbolType
|
||||
{
|
||||
SYMBOL_CLASS,
|
||||
SYMBOL_ENUM,
|
||||
SYMBOL_ENUM_CONSTANT,
|
||||
SYMBOL_FIELD,
|
||||
SYMBOL_FUNCTION,
|
||||
SYMBOL_GLOBAL_VARIABLE,
|
||||
SYMBOL_LOCAL_VARIABLE,
|
||||
SYMBOL_MACRO,
|
||||
SYMBOL_METHOD,
|
||||
SYMBOL_NAMESPACE,
|
||||
SYMBOL_PARAMETER,
|
||||
SYMBOL_STRUCT,
|
||||
SYMBOL_TYPEDEF,
|
||||
SYMBOL_TEMPLATE_PARAMETER,
|
||||
SYMBOL_UNION,
|
||||
SYMBOL_TYPE_MAX
|
||||
};
|
||||
|
||||
#endif // SYMBOL_TYPE_H
|
||||
@@ -420,11 +420,12 @@ bool ASTVisitor::VisitInitListExpr(clang::InitListExpr *e)
|
||||
|
||||
bool ASTVisitor::TraverseConstructorInitializer(clang::CXXCtorInitializer *init)
|
||||
{
|
||||
if (init->getMember() != NULL) {
|
||||
if (init->getMember() != NULL)
|
||||
{
|
||||
RecordDeclRef(init->getMember(),
|
||||
init->getMemberLocation(),
|
||||
RT_Initialized,
|
||||
ST_Field);
|
||||
SYMBOL_FIELD);
|
||||
}
|
||||
|
||||
// See comment for VisitDeclStmt.
|
||||
@@ -438,7 +439,7 @@ bool ASTVisitor::TraverseConstructorInitializer(clang::CXXCtorInitializer *init)
|
||||
|
||||
bool ASTVisitor::VisitLambdaExpr(clang::LambdaExpr* e)
|
||||
{
|
||||
RecordDeclRef(e->getCallOperator(), e->getLocStart(), RT_Definition, ST_Function);
|
||||
RecordDeclRef(e->getCallOperator(), e->getLocStart(), RT_Definition, SYMBOL_FUNCTION);
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -534,30 +535,30 @@ bool ASTVisitor::VisitCXXConstructExpr(clang::CXXConstructExpr *e)
|
||||
|
||||
void ASTVisitor::RecordDeclRefExpr(clang::NamedDecl *d, clang::SourceLocation loc, clang::Expr *e, Context context)
|
||||
{
|
||||
SymbolType symbolType = ST_Max;
|
||||
SymbolType symbolType = SYMBOL_TYPE_MAX;
|
||||
|
||||
if (clang::isa<clang::VarDecl>(d))
|
||||
{
|
||||
if (llvm::isa<clang::ParmVarDecl>(d))
|
||||
{
|
||||
symbolType = ST_Parameter;
|
||||
symbolType = SYMBOL_PARAMETER;
|
||||
}
|
||||
else if (d->getParentFunctionOrMethod() == NULL)
|
||||
{
|
||||
symbolType = ST_GlobalVariable;
|
||||
symbolType = SYMBOL_GLOBAL_VARIABLE;
|
||||
}
|
||||
else
|
||||
{
|
||||
symbolType = ST_LocalVariable;
|
||||
symbolType = SYMBOL_LOCAL_VARIABLE;
|
||||
}
|
||||
}
|
||||
if (clang::isa<clang::EnumConstantDecl>(d))
|
||||
{
|
||||
symbolType = ST_Enumerator;
|
||||
symbolType = SYMBOL_ENUM_CONSTANT;
|
||||
}
|
||||
else if (clang::isa<clang::FieldDecl>(d))
|
||||
{
|
||||
symbolType = ST_Field;
|
||||
symbolType = SYMBOL_FIELD;
|
||||
}
|
||||
|
||||
if (m_typeContext == RT_TemplateArgument)
|
||||
@@ -783,15 +784,11 @@ bool ASTVisitor::VisitDecl(clang::Decl *d)
|
||||
SymbolType symbolType;
|
||||
if (llvm::isa<clang::CXXMethodDecl>(fd))
|
||||
{
|
||||
if (llvm::isa<clang::CXXConstructorDecl>(fd))
|
||||
symbolType = ST_Constructor;
|
||||
else if (llvm::isa<clang::CXXDestructorDecl>(fd))
|
||||
symbolType = ST_Destructor;
|
||||
else
|
||||
symbolType = ST_Method;
|
||||
} else
|
||||
symbolType = SYMBOL_METHOD;
|
||||
}
|
||||
else
|
||||
{
|
||||
symbolType = ST_Function;
|
||||
symbolType = SYMBOL_FUNCTION;
|
||||
}
|
||||
RecordDeclRef(nd, loc, refType, symbolType);
|
||||
if (fd->isFunctionTemplateSpecialization())
|
||||
@@ -825,22 +822,22 @@ bool ASTVisitor::VisitDecl(clang::Decl *d)
|
||||
SymbolType symbolType;
|
||||
if (isParam)
|
||||
{
|
||||
symbolType = ST_Parameter;
|
||||
symbolType = SYMBOL_PARAMETER;
|
||||
}
|
||||
else if (vd->getParentFunctionOrMethod() == NULL)
|
||||
{
|
||||
if (vd->getAccess() == clang::AS_none)
|
||||
{
|
||||
symbolType = ST_GlobalVariable;
|
||||
symbolType = SYMBOL_GLOBAL_VARIABLE;
|
||||
}
|
||||
else
|
||||
{
|
||||
symbolType = ST_Field;
|
||||
symbolType = SYMBOL_FIELD;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
symbolType = ST_LocalVariable;
|
||||
symbolType = SYMBOL_LOCAL_VARIABLE;
|
||||
}
|
||||
RecordDeclRef(nd, loc, refType, symbolType);
|
||||
}
|
||||
@@ -858,15 +855,15 @@ bool ASTVisitor::VisitDecl(clang::Decl *d)
|
||||
refType = RT_Declaration;
|
||||
}
|
||||
|
||||
SymbolType symbolType = ST_Max;
|
||||
SymbolType symbolType = SYMBOL_TYPE_MAX;
|
||||
// TODO: Handle the C++11 fixed underlying type of enumeration
|
||||
// declarations.
|
||||
switch (td->getTagKind())
|
||||
{
|
||||
case clang::TTK_Struct: symbolType = ST_Struct; break;
|
||||
case clang::TTK_Union: symbolType = ST_Union; break;
|
||||
case clang::TTK_Class: symbolType = ST_Class; break;
|
||||
case clang::TTK_Enum: symbolType = ST_Enum; break;
|
||||
case clang::TTK_Struct: symbolType = SYMBOL_STRUCT; break;
|
||||
case clang::TTK_Union: symbolType = SYMBOL_UNION; break;
|
||||
case clang::TTK_Class: symbolType = SYMBOL_CLASS; break;
|
||||
case clang::TTK_Enum: symbolType = SYMBOL_ENUM; break;
|
||||
default: assert(false);
|
||||
}
|
||||
RecordDeclRef(nd, loc, refType, symbolType);
|
||||
@@ -886,7 +883,7 @@ bool ASTVisitor::VisitDecl(clang::Decl *d)
|
||||
RecordDeclRef(shadow->getTargetDecl(), loc, RT_Using);
|
||||
}
|
||||
} else if (clang::NamespaceAliasDecl *nad = llvm::dyn_cast<clang::NamespaceAliasDecl>(d)) {
|
||||
RecordDeclRef(nad, loc, RT_Declaration, ST_Namespace);
|
||||
RecordDeclRef(nad, loc, RT_Declaration, SYMBOL_NAMESPACE);
|
||||
// not needed right now!
|
||||
// RecordDeclRef(nad, loc, RT_Declaration, ST_Namespace);
|
||||
// RecordDeclRef(nad->getAliasedNamespace(),
|
||||
@@ -900,18 +897,18 @@ bool ASTVisitor::VisitDecl(clang::Decl *d)
|
||||
// Do nothing. The class will be recorded when it appears as a
|
||||
// RecordDecl.
|
||||
} else if (llvm::isa<clang::FieldDecl>(d)) {
|
||||
RecordDeclRef(nd, loc, RT_Declaration, ST_Field);
|
||||
RecordDeclRef(nd, loc, RT_Declaration, SYMBOL_FIELD);
|
||||
} else if (llvm::isa<clang::TypedefDecl>(d)) {
|
||||
RecordDeclRef(nd, loc, RT_Declaration, ST_Typedef);
|
||||
RecordDeclRef(nd, loc, RT_Declaration, SYMBOL_TYPEDEF);
|
||||
} else if (llvm::isa<clang::NamespaceDecl>(d)) {
|
||||
RecordDeclRef(nd, loc, RT_Declaration, ST_Namespace);
|
||||
RecordDeclRef(nd, loc, RT_Declaration, SYMBOL_NAMESPACE);
|
||||
} else if (llvm::isa<clang::EnumConstantDecl>(d)) {
|
||||
RecordDeclRef(nd, loc, RT_Declaration, ST_Enumerator);
|
||||
RecordDeclRef(nd, loc, RT_Declaration, SYMBOL_ENUM_CONSTANT);
|
||||
} else if (
|
||||
llvm::isa<clang::NonTypeTemplateParmDecl>(d) ||
|
||||
llvm::isa<clang::TemplateTypeParmDecl>(d) ||
|
||||
llvm::isa<clang::TemplateTemplateParmDecl>(d)) {
|
||||
RecordDeclRef(nd, loc, RT_Declaration, ST_TemplateParameter);
|
||||
RecordDeclRef(nd, loc, RT_Declaration, SYMBOL_TEMPLATE_PARAMETER);
|
||||
} else {
|
||||
RecordDeclRef(nd, loc, RT_Declaration);
|
||||
}
|
||||
@@ -1159,7 +1156,7 @@ void ASTVisitor::RecordDeclRef(
|
||||
bool fallback = false;
|
||||
|
||||
|
||||
if (symbolType == ST_LocalVariable || symbolType == ST_Parameter)
|
||||
if (symbolType == SYMBOL_LOCAL_VARIABLE || symbolType == SYMBOL_PARAMETER)
|
||||
{
|
||||
if (clang::VarDecl* varDecl = clang::dyn_cast<clang::VarDecl>(d))
|
||||
{
|
||||
@@ -1183,7 +1180,7 @@ void ASTVisitor::RecordDeclRef(
|
||||
{
|
||||
switch (symbolType)
|
||||
{
|
||||
case ST_Typedef:
|
||||
case SYMBOL_TYPEDEF:
|
||||
if (clang::TypedefDecl* typedefDecl = clang::dyn_cast<clang::TypedefDecl>(d))
|
||||
{
|
||||
m_client->onTypedefParsed(
|
||||
@@ -1193,7 +1190,7 @@ void ASTVisitor::RecordDeclRef(
|
||||
declIsImplicit);
|
||||
}
|
||||
break;
|
||||
case ST_Class:
|
||||
case SYMBOL_CLASS:
|
||||
if (clang::RecordDecl* recordDecl = clang::dyn_cast<clang::RecordDecl>(d))
|
||||
{
|
||||
m_client->onClassParsed(
|
||||
@@ -1204,7 +1201,7 @@ void ASTVisitor::RecordDeclRef(
|
||||
declIsImplicit);
|
||||
}
|
||||
break;
|
||||
case ST_Struct:
|
||||
case SYMBOL_STRUCT:
|
||||
if (clang::RecordDecl* recordDecl = clang::dyn_cast<clang::RecordDecl>(d))
|
||||
{
|
||||
m_client->onStructParsed(
|
||||
@@ -1215,23 +1212,23 @@ void ASTVisitor::RecordDeclRef(
|
||||
declIsImplicit);
|
||||
}
|
||||
break;
|
||||
case ST_GlobalVariable:
|
||||
case SYMBOL_GLOBAL_VARIABLE:
|
||||
m_client->onGlobalVariableParsed(
|
||||
parseLocation,
|
||||
declNameHierarchy,
|
||||
declIsImplicit);
|
||||
break;
|
||||
case ST_Field:
|
||||
case SYMBOL_FIELD:
|
||||
//if (clang::VarDecl* varDecl = clang::dyn_cast<clang::VarDecl>(d))
|
||||
{
|
||||
m_client->onFieldParsed(
|
||||
parseLocation,
|
||||
declNameHierarchy,
|
||||
convertAccessType(d->getAccess()),
|
||||
declIsImplicit);
|
||||
}
|
||||
break;
|
||||
case ST_Function:
|
||||
{
|
||||
m_client->onFieldParsed(
|
||||
parseLocation,
|
||||
declNameHierarchy,
|
||||
convertAccessType(d->getAccess()),
|
||||
declIsImplicit);
|
||||
}
|
||||
break;
|
||||
case SYMBOL_FUNCTION:
|
||||
if (clang::FunctionDecl* functionDecl = clang::dyn_cast<clang::FunctionDecl>(d))
|
||||
{
|
||||
m_client->onFunctionParsed(
|
||||
@@ -1241,9 +1238,7 @@ void ASTVisitor::RecordDeclRef(
|
||||
declIsImplicit);
|
||||
}
|
||||
break;
|
||||
case ST_Constructor:
|
||||
case ST_Destructor:
|
||||
case ST_Method:
|
||||
case SYMBOL_METHOD:
|
||||
if (clang::CXXMethodDecl* methodDecl = clang::dyn_cast<clang::CXXMethodDecl>(d))
|
||||
{
|
||||
m_client->onMethodParsed(
|
||||
@@ -1277,7 +1272,7 @@ void ASTVisitor::RecordDeclRef(
|
||||
}
|
||||
}
|
||||
break;
|
||||
case ST_Namespace:
|
||||
case SYMBOL_NAMESPACE:
|
||||
if (clang::NamespaceDecl* namespaceDecl = clang::dyn_cast<clang::NamespaceDecl>(d))
|
||||
{
|
||||
m_client->onNamespaceParsed(
|
||||
@@ -1295,7 +1290,7 @@ void ASTVisitor::RecordDeclRef(
|
||||
declIsImplicit);
|
||||
}
|
||||
break;
|
||||
case ST_Enum:
|
||||
case SYMBOL_ENUM:
|
||||
if (clang::EnumDecl* enumDecl = clang::dyn_cast<clang::EnumDecl>(d))
|
||||
{
|
||||
m_client->onEnumParsed(
|
||||
@@ -1306,13 +1301,13 @@ void ASTVisitor::RecordDeclRef(
|
||||
declIsImplicit);
|
||||
}
|
||||
break;
|
||||
case ST_Enumerator:
|
||||
case SYMBOL_ENUM_CONSTANT:
|
||||
m_client->onEnumConstantParsed(
|
||||
parseLocation,
|
||||
declNameHierarchy,
|
||||
declIsImplicit);
|
||||
break;
|
||||
case ST_TemplateParameter:
|
||||
case SYMBOL_TEMPLATE_PARAMETER:
|
||||
if (!d->getName().empty()) // We don't create symbols for unnamed template parameters.
|
||||
{
|
||||
m_client->onTemplateParameterTypeParsed(
|
||||
@@ -1400,30 +1395,10 @@ void ASTVisitor::RecordDeclRef(
|
||||
case RT_AddressTaken:
|
||||
{
|
||||
const NameHierarchy contextNameHierarchy = getContextName();
|
||||
int usedType = 0x1;
|
||||
switch (symbolType)
|
||||
{
|
||||
case ST_Field:
|
||||
usedType = 0x40;
|
||||
break;
|
||||
case ST_GlobalVariable:
|
||||
usedType = 0x20;
|
||||
break;
|
||||
case ST_Enumerator:
|
||||
usedType = 0x400;
|
||||
break;
|
||||
case ST_Function:
|
||||
usedType = 0x80;
|
||||
break;
|
||||
case ST_Method:
|
||||
usedType = 0x100;
|
||||
break;
|
||||
}
|
||||
|
||||
m_client->onUsageParsed(
|
||||
parseLocation,
|
||||
contextNameHierarchy,
|
||||
usedType,
|
||||
symbolType,
|
||||
declNameHierarchy
|
||||
);
|
||||
break;
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
#include <clang/Basic/SourceManager.h>
|
||||
|
||||
#include "data/parser/ParserClient.h"
|
||||
#include "data/parser/SymbolType.h"
|
||||
#include "utility/file/FileRegister.h"
|
||||
#include "utility/Cache.h"
|
||||
|
||||
@@ -115,28 +116,6 @@ private:
|
||||
RT_Max
|
||||
};
|
||||
|
||||
enum SymbolType : int { // we dont need this. decl already knows it!
|
||||
ST_Class,
|
||||
ST_Constructor,
|
||||
ST_Destructor,
|
||||
ST_Enum,
|
||||
ST_Enumerator,
|
||||
ST_Field,
|
||||
ST_Function,
|
||||
ST_GlobalVariable,
|
||||
ST_LocalVariable,
|
||||
ST_Macro,
|
||||
ST_Method,
|
||||
ST_Namespace,
|
||||
ST_Parameter,
|
||||
ST_Path,
|
||||
ST_Struct,
|
||||
ST_Typedef,
|
||||
ST_TemplateParameter,
|
||||
ST_Union,
|
||||
ST_Max
|
||||
};
|
||||
|
||||
typedef unsigned int Context;
|
||||
|
||||
clang::ASTContext* m_context;
|
||||
@@ -224,13 +203,13 @@ private:
|
||||
const clang::Type* type,
|
||||
clang::SourceLocation beginLoc,
|
||||
RefType refType,
|
||||
SymbolType symbolType = ST_Max);
|
||||
SymbolType symbolType = SYMBOL_TYPE_MAX);
|
||||
|
||||
void RecordDeclRef(
|
||||
clang::NamedDecl *d,
|
||||
clang::SourceLocation beginLoc,
|
||||
RefType refType,
|
||||
SymbolType symbolType = ST_Max);
|
||||
SymbolType symbolType = SYMBOL_TYPE_MAX);
|
||||
|
||||
bool isPartOfImplicitTemplateSpecialization(clang::Decl* d) const;
|
||||
bool isImplicit(clang::Decl* d) const;
|
||||
|
||||
@@ -2887,51 +2887,45 @@ private:
|
||||
errors.push_back(addLocationSuffix(message, location));
|
||||
}
|
||||
|
||||
virtual Id onTypedefParsed(
|
||||
virtual void onTypedefParsed(
|
||||
const ParseLocation& location, const NameHierarchy& typedefName, AccessType access, bool isImplicit
|
||||
)
|
||||
{
|
||||
std::string str = addAccessPrefix(typedefName.getQualifiedName(), access);
|
||||
typedefs.push_back(addLocationSuffix(str, location));
|
||||
return 0;
|
||||
}
|
||||
|
||||
virtual Id onClassParsed(
|
||||
virtual void onClassParsed(
|
||||
const ParseLocation& location, const NameHierarchy& nameHierarchy, AccessType access,
|
||||
const ParseLocation& scopeLocation, bool isImplicit)
|
||||
{
|
||||
classes.push_back(addLocationSuffix(addAccessPrefix(nameHierarchy.getQualifiedName(), access), location, scopeLocation));
|
||||
return 0;
|
||||
}
|
||||
|
||||
virtual Id onStructParsed(
|
||||
virtual void onStructParsed(
|
||||
const ParseLocation& location, const NameHierarchy& nameHierarchy, AccessType access,
|
||||
const ParseLocation& scopeLocation, bool isImplicit)
|
||||
{
|
||||
structs.push_back(addLocationSuffix(addAccessPrefix(nameHierarchy.getQualifiedName(), access), location, scopeLocation));
|
||||
return 0;
|
||||
}
|
||||
|
||||
virtual Id onGlobalVariableParsed(const ParseLocation& location, const NameHierarchy& variable, bool isImplicit)
|
||||
virtual void onGlobalVariableParsed(const ParseLocation& location, const NameHierarchy& variable, bool isImplicit)
|
||||
{
|
||||
globalVariables.push_back(addLocationSuffix(variable.getQualifiedName(), location));
|
||||
return 0;
|
||||
}
|
||||
|
||||
virtual Id onFieldParsed(const ParseLocation& location, const NameHierarchy& field, AccessType access, bool isImplicit)
|
||||
virtual void onFieldParsed(const ParseLocation& location, const NameHierarchy& field, AccessType access, bool isImplicit)
|
||||
{
|
||||
fields.push_back(addLocationSuffix(addAccessPrefix(field.getQualifiedName(), access), location));
|
||||
return 0;
|
||||
}
|
||||
|
||||
virtual Id onFunctionParsed(
|
||||
virtual void onFunctionParsed(
|
||||
const ParseLocation& location, const NameHierarchy& function, const ParseLocation& scopeLocation, bool isImplicit)
|
||||
{
|
||||
functions.push_back(addLocationSuffix(function.getQualifiedNameWithSignature(), location, scopeLocation));
|
||||
return 0;
|
||||
}
|
||||
|
||||
virtual Id onMethodParsed(
|
||||
virtual void onMethodParsed(
|
||||
const ParseLocation& location, const NameHierarchy& method, AccessType access, AbstractionType abstraction,
|
||||
const ParseLocation& scopeLocation, bool isImplicit)
|
||||
{
|
||||
@@ -2940,153 +2934,132 @@ private:
|
||||
str = addAccessPrefix(str, access);
|
||||
str = addLocationSuffix(str, location, scopeLocation);
|
||||
methods.push_back(str);
|
||||
return 0;
|
||||
}
|
||||
|
||||
virtual Id onNamespaceParsed(
|
||||
virtual void onNamespaceParsed(
|
||||
const ParseLocation& location, const NameHierarchy& nameHierarchy, const ParseLocation& scopeLocation, bool isImplicit)
|
||||
{
|
||||
namespaces.push_back(addLocationSuffix(nameHierarchy.getQualifiedName(), location, scopeLocation));
|
||||
return 0;
|
||||
}
|
||||
|
||||
virtual Id onEnumParsed(
|
||||
virtual void onEnumParsed(
|
||||
const ParseLocation& location, const NameHierarchy& nameHierarchy, AccessType access,
|
||||
const ParseLocation& scopeLocation, bool isImplicit)
|
||||
{
|
||||
enums.push_back(addLocationSuffix(addAccessPrefix(nameHierarchy.getQualifiedName(), access), location, scopeLocation));
|
||||
return 0;
|
||||
}
|
||||
|
||||
virtual Id onEnumConstantParsed(const ParseLocation& location, const NameHierarchy& nameHierarchy, bool isImplicit)
|
||||
virtual void onEnumConstantParsed(const ParseLocation& location, const NameHierarchy& nameHierarchy, bool isImplicit)
|
||||
{
|
||||
enumConstants.push_back(addLocationSuffix(nameHierarchy.getQualifiedName(), location));
|
||||
return 0;
|
||||
}
|
||||
|
||||
virtual Id onTemplateParameterTypeParsed(
|
||||
virtual void onTemplateParameterTypeParsed(
|
||||
const ParseLocation& location, const NameHierarchy& templateParameterTypeNameHierarchy, bool isImplicit)
|
||||
{
|
||||
templateParameterTypes.push_back(
|
||||
addLocationSuffix(templateParameterTypeNameHierarchy.getQualifiedName(), location)
|
||||
);
|
||||
return 0;
|
||||
);
|
||||
}
|
||||
|
||||
virtual Id onInheritanceParsed(
|
||||
virtual void onLocalSymbolParsed(const std::string& name, const ParseLocation& location)
|
||||
{
|
||||
localSymbols.push_back(name);
|
||||
}
|
||||
|
||||
virtual void onFileParsed(const FileInfo& fileInfo)
|
||||
{
|
||||
files.push_back(fileInfo.path.str());
|
||||
}
|
||||
|
||||
virtual void onMacroExpandParsed(const ParseLocation& location, const NameHierarchy& macroNameHierarchy)
|
||||
{
|
||||
macroUses.push_back(addLocationSuffix(macroNameHierarchy.getQualifiedName() ,location));
|
||||
}
|
||||
|
||||
virtual void onCommentParsed(const ParseLocation& location)
|
||||
{
|
||||
comments.push_back(addLocationSuffix("comment", location));
|
||||
|
||||
}
|
||||
|
||||
virtual void onInheritanceParsed(
|
||||
const ParseLocation& location, const NameHierarchy& childNameHierarchy,
|
||||
const NameHierarchy& parentNameHierarchy, AccessType access)
|
||||
{
|
||||
std::string str = childNameHierarchy.getQualifiedName() + " : " + addAccessPrefix(parentNameHierarchy.getQualifiedName(), access);
|
||||
inheritances.push_back(addLocationSuffix(str, location));
|
||||
return 0;
|
||||
}
|
||||
|
||||
virtual Id onMethodOverrideParsed(
|
||||
virtual void onMethodOverrideParsed(
|
||||
const ParseLocation& location, const NameHierarchy& overridden, const NameHierarchy& overrider)
|
||||
{
|
||||
overrides.push_back(addLocationSuffix(overridden.getQualifiedNameWithSignature() + " -> " + overrider.getQualifiedNameWithSignature(), location));
|
||||
return 0;
|
||||
}
|
||||
|
||||
virtual Id onCallParsed(
|
||||
virtual void onCallParsed(
|
||||
const ParseLocation& location, const NameHierarchy& caller, const NameHierarchy& callee)
|
||||
{
|
||||
std::string callerSignature = caller.getQualifiedNameWithSignature();
|
||||
calls.push_back(addLocationSuffix(caller.getQualifiedNameWithSignature() + " -> " + callee.getQualifiedNameWithSignature(), location));
|
||||
return 0;
|
||||
}
|
||||
|
||||
virtual Id onUsageParsed(
|
||||
const ParseLocation& location, const NameHierarchy& userName, int usedType, const NameHierarchy& usedName)
|
||||
virtual void onUsageParsed(
|
||||
const ParseLocation& location, const NameHierarchy& userName, SymbolType usedType, const NameHierarchy& usedName)
|
||||
{
|
||||
usages.push_back(addLocationSuffix(userName.getQualifiedNameWithSignature() + " -> " + usedName.getQualifiedName(), location));
|
||||
return 0;
|
||||
}
|
||||
|
||||
virtual Id onTypeUsageParsed(const ParseLocation& location, const NameHierarchy& user, const NameHierarchy& used)
|
||||
virtual void onTypeUsageParsed(const ParseLocation& location, const NameHierarchy& user, const NameHierarchy& used)
|
||||
{
|
||||
typeUses.push_back(addLocationSuffix(user.getQualifiedNameWithSignature() + " -> " + used.getQualifiedNameWithSignature(), location));
|
||||
return 0;
|
||||
}
|
||||
|
||||
virtual Id onTemplateArgumentTypeParsed(
|
||||
virtual void onTemplateArgumentTypeParsed(
|
||||
const ParseLocation& location, const NameHierarchy& argumentTypeNameHierarchy,
|
||||
const NameHierarchy& templateNameHierarchy)
|
||||
{
|
||||
templateArgumentTypes.push_back(
|
||||
addLocationSuffix(templateNameHierarchy.getQualifiedNameWithSignature() + "->" + argumentTypeNameHierarchy.getQualifiedName(), location)
|
||||
);
|
||||
return 0;
|
||||
}
|
||||
|
||||
virtual Id onTemplateDefaultArgumentTypeParsed(
|
||||
virtual void onTemplateDefaultArgumentTypeParsed(
|
||||
const ParseLocation& location, const NameHierarchy& defaultArgumentTypeNameHierarchy,
|
||||
const NameHierarchy& templateParameterNameHierarchy)
|
||||
{
|
||||
templateDefaultArgumentTypes.push_back(
|
||||
addLocationSuffix(defaultArgumentTypeNameHierarchy.getQualifiedNameWithSignature() + " -> " + templateParameterNameHierarchy.getQualifiedName(), location)
|
||||
);
|
||||
return 0;
|
||||
}
|
||||
|
||||
virtual Id onTemplateSpecializationParsed(
|
||||
virtual void onTemplateSpecializationParsed(
|
||||
const ParseLocation& location, const NameHierarchy& specializedNameHierarchy,
|
||||
const NameHierarchy& specializedFromNameHierarchy)
|
||||
{
|
||||
templateSpecializations.push_back(addLocationSuffix(
|
||||
specializedNameHierarchy.getQualifiedNameWithSignature() + " -> " + specializedFromNameHierarchy.getQualifiedNameWithSignature(), location
|
||||
));
|
||||
return 0;
|
||||
}
|
||||
|
||||
virtual Id onTemplateMemberFunctionSpecializationParsed(
|
||||
virtual void onTemplateMemberFunctionSpecializationParsed(
|
||||
const ParseLocation& location, const NameHierarchy& instantiatedFunction, const NameHierarchy& specializedFunction)
|
||||
{
|
||||
templateMemberSpecializations.push_back(addLocationSuffix(
|
||||
instantiatedFunction.getQualifiedNameWithSignature() + " -> " + specializedFunction.getQualifiedNameWithSignature(), location
|
||||
));
|
||||
return 0;
|
||||
}
|
||||
|
||||
virtual Id onLocalSymbolParsed(const std::string& name, const ParseLocation& location)
|
||||
{
|
||||
localSymbols.push_back(name);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
virtual Id onFileParsed(const FileInfo& fileInfo)
|
||||
{
|
||||
files.push_back(fileInfo.path.str());
|
||||
return 0;
|
||||
}
|
||||
|
||||
virtual Id onFileIncludeParsed(
|
||||
virtual void onFileIncludeParsed(
|
||||
const ParseLocation& location, const FileInfo& fileInfo, const FileInfo& includedFileInfo)
|
||||
{
|
||||
includes.push_back(fileInfo.path.str() + " -> " + includedFileInfo.path.str());
|
||||
return 0;
|
||||
}
|
||||
|
||||
virtual Id onMacroDefineParsed(
|
||||
virtual void onMacroDefineParsed(
|
||||
const ParseLocation& location, const NameHierarchy& macroNameHierarchy, const ParseLocation& scopeLocation)
|
||||
{
|
||||
macros.push_back(addLocationSuffix(macroNameHierarchy.getQualifiedName(), location, scopeLocation));
|
||||
return 0;
|
||||
}
|
||||
|
||||
virtual Id onMacroExpandParsed(const ParseLocation& location, const NameHierarchy& macroNameHierarchy)
|
||||
{
|
||||
macroUses.push_back(addLocationSuffix(macroNameHierarchy.getQualifiedName() ,location));
|
||||
return 0;
|
||||
}
|
||||
|
||||
virtual Id onCommentParsed(const ParseLocation& location)
|
||||
{
|
||||
comments.push_back(addLocationSuffix("comment", location));
|
||||
return 0;
|
||||
|
||||
}
|
||||
|
||||
std::vector<std::string> errors;
|
||||
|
||||
Reference in New Issue
Block a user