diff --git a/src/lib/CMakeLists.txt b/src/lib/CMakeLists.txt index 6449018e..6c097355 100644 --- a/src/lib/CMakeLists.txt +++ b/src/lib/CMakeLists.txt @@ -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 diff --git a/src/lib/data/parser/ParserClient.h b/src/lib/data/parser/ParserClient.h index da288bcb..77b82965 100644 --- a/src/lib/data/parser/ParserClient.h +++ b/src/lib/data/parser/ParserClient.h @@ -5,6 +5,7 @@ #include #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 diff --git a/src/lib/data/parser/ParserClientImpl.cpp b/src/lib/data/parser/ParserClientImpl.cpp index 0a7979ae..46233d58 100644 --- a/src/lib/data/parser/ParserClientImpl.cpp +++ b/src/lib/data/parser/ParserClientImpl.cpp @@ -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) diff --git a/src/lib/data/parser/ParserClientImpl.h b/src/lib/data/parser/ParserClientImpl.h index 8df51521..a609b973 100644 --- a/src/lib/data/parser/ParserClientImpl.h +++ b/src/lib/data/parser/ParserClientImpl.h @@ -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); diff --git a/src/lib/data/parser/SymbolType.h b/src/lib/data/parser/SymbolType.h new file mode 100644 index 00000000..66b1bd70 --- /dev/null +++ b/src/lib/data/parser/SymbolType.h @@ -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 diff --git a/src/lib_parser/data/parser/cxx/ASTVisitor.cpp b/src/lib_parser/data/parser/cxx/ASTVisitor.cpp index f49ab8e0..8ecf92bc 100644 --- a/src/lib_parser/data/parser/cxx/ASTVisitor.cpp +++ b/src/lib_parser/data/parser/cxx/ASTVisitor.cpp @@ -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(d)) { if (llvm::isa(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(d)) { - symbolType = ST_Enumerator; + symbolType = SYMBOL_ENUM_CONSTANT; } else if (clang::isa(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(fd)) { - if (llvm::isa(fd)) - symbolType = ST_Constructor; - else if (llvm::isa(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(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(d)) { - RecordDeclRef(nd, loc, RT_Declaration, ST_Field); + RecordDeclRef(nd, loc, RT_Declaration, SYMBOL_FIELD); } else if (llvm::isa(d)) { - RecordDeclRef(nd, loc, RT_Declaration, ST_Typedef); + RecordDeclRef(nd, loc, RT_Declaration, SYMBOL_TYPEDEF); } else if (llvm::isa(d)) { - RecordDeclRef(nd, loc, RT_Declaration, ST_Namespace); + RecordDeclRef(nd, loc, RT_Declaration, SYMBOL_NAMESPACE); } else if (llvm::isa(d)) { - RecordDeclRef(nd, loc, RT_Declaration, ST_Enumerator); + RecordDeclRef(nd, loc, RT_Declaration, SYMBOL_ENUM_CONSTANT); } else if ( llvm::isa(d) || llvm::isa(d) || llvm::isa(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(d)) { @@ -1183,7 +1180,7 @@ void ASTVisitor::RecordDeclRef( { switch (symbolType) { - case ST_Typedef: + case SYMBOL_TYPEDEF: if (clang::TypedefDecl* typedefDecl = clang::dyn_cast(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(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(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(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(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(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(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(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; diff --git a/src/lib_parser/data/parser/cxx/ASTVisitor.h b/src/lib_parser/data/parser/cxx/ASTVisitor.h index e2a45ba6..950f2af0 100644 --- a/src/lib_parser/data/parser/cxx/ASTVisitor.h +++ b/src/lib_parser/data/parser/cxx/ASTVisitor.h @@ -9,6 +9,7 @@ #include #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; diff --git a/src/test/CxxParserTestSuite.h b/src/test/CxxParserTestSuite.h index 36f12bc8..c113f005 100644 --- a/src/test/CxxParserTestSuite.h +++ b/src/test/CxxParserTestSuite.h @@ -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 errors;