diff --git a/bin/app/data/color_schemes/bad_rainbow.xml b/bin/app/data/color_schemes/bad_rainbow.xml
index 9ae6aa10..d8f0ff7e 100644
--- a/bin/app/data/color_schemes/bad_rainbow.xml
+++ b/bin/app/data/color_schemes/bad_rainbow.xml
@@ -349,6 +349,9 @@
#B05151
+
+ namespace
+
namespace
diff --git a/bin/app/data/color_schemes/bright.xml b/bin/app/data/color_schemes/bright.xml
index c73d4ca1..337fa5a8 100644
--- a/bin/app/data/color_schemes/bright.xml
+++ b/bin/app/data/color_schemes/bright.xml
@@ -338,6 +338,9 @@
#FFDEDE
+
+ namespace
+
namespace
diff --git a/bin/app/data/color_schemes/dark.xml b/bin/app/data/color_schemes/dark.xml
index 984180c8..e0157f6f 100644
--- a/bin/app/data/color_schemes/dark.xml
+++ b/bin/app/data/color_schemes/dark.xml
@@ -341,6 +341,9 @@
#521B1F
+
+ namespace
+
namespace
diff --git a/java_indexer/src/main/java/com/sourcetrail/SymbolKind.java b/java_indexer/src/main/java/com/sourcetrail/SymbolKind.java
index 7f821ad7..469e9a75 100644
--- a/java_indexer/src/main/java/com/sourcetrail/SymbolKind.java
+++ b/java_indexer/src/main/java/com/sourcetrail/SymbolKind.java
@@ -11,18 +11,17 @@ public enum SymbolKind
FUNCTION(7),
GLOBAL_VARIABLE(8),
INTERFACE(9),
- LOCAL_VARIABLE(10),
- MACRO(11),
- METHOD(12),
+ MACRO(10),
+ METHOD(11),
+ MODULE(12),
NAMESPACE(13),
PACKAGE(14),
- PARAMETER(15),
- STRUCT(16),
- TEMPLATE_PARAMETER(17),
- TYPEDEF(18),
- TYPE_PARAMETER(19),
- UNION(20),
- TYPE_MAX(21);
+ STRUCT(15),
+ TEMPLATE_PARAMETER(16),
+ TYPEDEF(17),
+ TYPE_PARAMETER(18),
+ UNION(19),
+ TYPE_MAX(20);
private final int m_value;
diff --git a/src/lib/component/controller/GraphController.cpp b/src/lib/component/controller/GraphController.cpp
index ead358fd..c51db66d 100644
--- a/src/lib/component/controller/GraphController.cpp
+++ b/src/lib/component/controller/GraphController.cpp
@@ -2377,6 +2377,8 @@ void GraphController::createLegendGraph()
addNode(NodeType::NODE_MACRO, L"Macro", Vec2i(x, y + dy * ++i));
addNode(NodeType::NODE_ANNOTATION, L"Annotation", Vec2i(x, y + dy * ++i));
+ addNode(NodeType::NODE_MODULE, L"module", Vec2i(x, y + dy * ++i));
+ y -= 15;
addNode(NodeType::NODE_NAMESPACE, L"namespace", Vec2i(x, y + dy * ++i));
y -= 15;
addNode(NodeType::NODE_PACKAGE, L"package", Vec2i(x, y + dy * ++i));
diff --git a/src/lib/data/NodeType.cpp b/src/lib/data/NodeType.cpp
index e00135cd..6eeea415 100644
--- a/src/lib/data/NodeType.cpp
+++ b/src/lib/data/NodeType.cpp
@@ -9,6 +9,7 @@ std::vector NodeType::getOverviewBundleNodeTypesOrdered()
NodeType(NodeType::NODE_FILE),
NodeType(NodeType::NODE_MACRO),
NodeType(NodeType::NODE_ANNOTATION),
+ NodeType(NodeType::NODE_MODULE),
NodeType(NodeType::NODE_NAMESPACE),
NodeType(NodeType::NODE_PACKAGE),
NodeType(NodeType::NODE_CLASS),
@@ -36,6 +37,8 @@ NodeType::Type NodeType::intToType(int value)
return NodeType::NODE_TYPE;
case NodeType::NODE_BUILTIN_TYPE:
return NodeType::NODE_BUILTIN_TYPE;
+ case NodeType::NODE_MODULE:
+ return NodeType::NODE_MODULE;
case NodeType::NODE_NAMESPACE:
return NodeType::NODE_NAMESPACE;
case NodeType::NODE_PACKAGE:
@@ -87,6 +90,8 @@ std::string NodeType::getReadableTypeString(NodeType::Type type)
return "built-in type";
case NodeType::NODE_TYPE:
return "type";
+ case NodeType::NODE_MODULE:
+ return "module";
case NodeType::NODE_NAMESPACE:
return "namespace";
case NodeType::NODE_PACKAGE:
@@ -211,6 +216,7 @@ bool NodeType::isInheritable() const
bool NodeType::isPackage() const
{
const NodeType::TypeMask mask =
+ NodeType::NODE_MODULE |
NodeType::NODE_NAMESPACE |
NodeType::NODE_PACKAGE;
return ((m_type & mask) > 0);
@@ -288,6 +294,7 @@ bool NodeType::hasSearchFilter() const
{
const NodeType::TypeMask mask =
NodeType::NODE_BUILTIN_TYPE |
+ NodeType::NODE_MODULE |
NodeType::NODE_NAMESPACE |
NodeType::NODE_PACKAGE |
NodeType::NODE_STRUCT |
@@ -327,6 +334,8 @@ Tree NodeType::getOverviewBundleTree() const
));
return tree;
}
+ case NodeType::NODE_MODULE:
+ return Tree(BundleInfo(L"Modules"));
case NodeType::NODE_PACKAGE:
return Tree(BundleInfo(L"Packages"));
case NodeType::NODE_CLASS:
@@ -401,6 +410,7 @@ NodeType::StyleType NodeType::getNodeStyle() const
{
switch (m_type)
{
+ case NodeType::NODE_MODULE:
case NodeType::NODE_NAMESPACE:
case NodeType::NODE_PACKAGE:
return STYLE_PACKAGE;
diff --git a/src/lib/data/NodeType.h b/src/lib/data/NodeType.h
index 83d771e3..2989a16b 100644
--- a/src/lib/data/NodeType.h
+++ b/src/lib/data/NodeType.h
@@ -21,25 +21,26 @@ public:
NODE_TYPE = 1 << 1,
NODE_BUILTIN_TYPE = 1 << 2,
- NODE_NAMESPACE = 1 << 3,
- NODE_PACKAGE = 1 << 4,
- NODE_STRUCT = 1 << 5,
- NODE_CLASS = 1 << 6,
- NODE_INTERFACE = 1 << 7,
- NODE_ANNOTATION = 1 << 8,
- NODE_GLOBAL_VARIABLE = 1 << 9,
- NODE_FIELD = 1 << 10,
- NODE_FUNCTION = 1 << 11,
- NODE_METHOD = 1 << 12,
- NODE_ENUM = 1 << 13,
- NODE_ENUM_CONSTANT = 1 << 14,
- NODE_TYPEDEF = 1 << 15,
- NODE_TEMPLATE_PARAMETER = 1 << 16,
- NODE_TYPE_PARAMETER = 1 << 17,
+ NODE_MODULE = 1 << 3,
+ NODE_NAMESPACE = 1 << 4,
+ NODE_PACKAGE = 1 << 5,
+ NODE_STRUCT = 1 << 6,
+ NODE_CLASS = 1 << 7,
+ NODE_INTERFACE = 1 << 8,
+ NODE_ANNOTATION = 1 << 9,
+ NODE_GLOBAL_VARIABLE = 1 << 10,
+ NODE_FIELD = 1 << 11,
+ NODE_FUNCTION = 1 << 12,
+ NODE_METHOD = 1 << 13,
+ NODE_ENUM = 1 << 14,
+ NODE_ENUM_CONSTANT = 1 << 15,
+ NODE_TYPEDEF = 1 << 16,
+ NODE_TEMPLATE_PARAMETER = 1 << 17,
+ NODE_TYPE_PARAMETER = 1 << 18,
- NODE_FILE = 1 << 18,
- NODE_MACRO = 1 << 19,
- NODE_UNION = 1 << 20,
+ NODE_FILE = 1 << 19,
+ NODE_MACRO = 1 << 20,
+ NODE_UNION = 1 << 21,
NODE_MAX_VALUE = NODE_UNION
};
diff --git a/src/lib/data/NodeTypeSet.cpp b/src/lib/data/NodeTypeSet.cpp
index b12c7379..63c3bff5 100644
--- a/src/lib/data/NodeTypeSet.cpp
+++ b/src/lib/data/NodeTypeSet.cpp
@@ -176,6 +176,7 @@ const std::vector NodeTypeSet::s_allNodeTypes = {
NodeType(NodeType::NODE_SYMBOL),
NodeType(NodeType::NODE_TYPE),
NodeType(NodeType::NODE_BUILTIN_TYPE),
+ NodeType(NodeType::NODE_MODULE),
NodeType(NodeType::NODE_NAMESPACE),
NodeType(NodeType::NODE_PACKAGE),
NodeType(NodeType::NODE_STRUCT),
diff --git a/src/lib/data/parser/ParserClientImpl.cpp b/src/lib/data/parser/ParserClientImpl.cpp
index bd72c502..b96d441f 100644
--- a/src/lib/data/parser/ParserClientImpl.cpp
+++ b/src/lib/data/parser/ParserClientImpl.cpp
@@ -120,6 +120,8 @@ NodeType ParserClientImpl::symbolKindToNodeType(SymbolKind symbolKind) const
return NodeType::NODE_MACRO;
case SYMBOL_METHOD:
return NodeType::NODE_METHOD;
+ case SYMBOL_MODULE:
+ return NodeType::NODE_MODULE;
case SYMBOL_NAMESPACE:
return NodeType::NODE_NAMESPACE;
case SYMBOL_PACKAGE:
diff --git a/src/lib/data/parser/SymbolKind.cpp b/src/lib/data/parser/SymbolKind.cpp
index 86b948fe..3615902a 100644
--- a/src/lib/data/parser/SymbolKind.cpp
+++ b/src/lib/data/parser/SymbolKind.cpp
@@ -22,18 +22,16 @@ SymbolKind intToSymbolKind(int v)
return SYMBOL_GLOBAL_VARIABLE;
case SYMBOL_INTERFACE:
return SYMBOL_INTERFACE;
- case SYMBOL_LOCAL_VARIABLE:
- return SYMBOL_LOCAL_VARIABLE;
case SYMBOL_MACRO:
return SYMBOL_MACRO;
case SYMBOL_METHOD:
return SYMBOL_METHOD;
+ case SYMBOL_MODULE:
+ return SYMBOL_MODULE;
case SYMBOL_NAMESPACE:
return SYMBOL_NAMESPACE;
case SYMBOL_PACKAGE:
return SYMBOL_PACKAGE;
- case SYMBOL_PARAMETER:
- return SYMBOL_PARAMETER;
case SYMBOL_STRUCT:
return SYMBOL_STRUCT;
case SYMBOL_TEMPLATE_PARAMETER:
@@ -52,4 +50,3 @@ int symbolKindToInt(SymbolKind t)
{
return t;
}
-
diff --git a/src/lib/data/parser/SymbolKind.h b/src/lib/data/parser/SymbolKind.h
index 685fe278..17e51702 100644
--- a/src/lib/data/parser/SymbolKind.h
+++ b/src/lib/data/parser/SymbolKind.h
@@ -12,18 +12,17 @@ enum SymbolKind
SYMBOL_FUNCTION = 7,
SYMBOL_GLOBAL_VARIABLE = 8,
SYMBOL_INTERFACE = 9,
- SYMBOL_LOCAL_VARIABLE = 10,
- SYMBOL_MACRO = 11,
- SYMBOL_METHOD = 12,
+ SYMBOL_MACRO = 10,
+ SYMBOL_METHOD = 11,
+ SYMBOL_MODULE = 12,
SYMBOL_NAMESPACE = 13,
SYMBOL_PACKAGE = 14,
- SYMBOL_PARAMETER = 15,
- SYMBOL_STRUCT = 16,
- SYMBOL_TEMPLATE_PARAMETER = 17,
- SYMBOL_TYPEDEF = 18,
- SYMBOL_TYPE_PARAMETER = 19,
- SYMBOL_UNION = 20,
- SYMBOL_KIND_MAX = 21
+ SYMBOL_STRUCT = 15,
+ SYMBOL_TEMPLATE_PARAMETER = 16,
+ SYMBOL_TYPEDEF = 17,
+ SYMBOL_TYPE_PARAMETER = 18,
+ SYMBOL_UNION = 19,
+ SYMBOL_KIND_MAX = 20
};
SymbolKind intToSymbolKind(int v);
diff --git a/src/lib/data/storage/sqlite/SqliteIndexStorage.cpp b/src/lib/data/storage/sqlite/SqliteIndexStorage.cpp
index 5e1de877..51b8a301 100644
--- a/src/lib/data/storage/sqlite/SqliteIndexStorage.cpp
+++ b/src/lib/data/storage/sqlite/SqliteIndexStorage.cpp
@@ -11,7 +11,7 @@
#include "SourceLocationFile.h"
#include "utilityString.h"
-const size_t SqliteIndexStorage::s_storageVersion = 21;
+const size_t SqliteIndexStorage::s_storageVersion = 22;
namespace
{
diff --git a/src/lib_cxx/data/parser/cxx/CxxAstVisitorComponentIndexer.cpp b/src/lib_cxx/data/parser/cxx/CxxAstVisitorComponentIndexer.cpp
index 42e38c06..c8e8d9e7 100644
--- a/src/lib_cxx/data/parser/cxx/CxxAstVisitorComponentIndexer.cpp
+++ b/src/lib_cxx/data/parser/cxx/CxxAstVisitorComponentIndexer.cpp
@@ -122,8 +122,7 @@ void CxxAstVisitorComponentIndexer::beginTraverseLambdaCapture(clang::LambdaExpr
if ((!lambdaExpr->isInitCapture(capture)) && (capture->capturesVariable()))
{
clang::VarDecl* d = capture->getCapturedVar();
- SymbolKind symbolKind = utility::getSymbolKind(d);
- if (symbolKind == SYMBOL_LOCAL_VARIABLE || symbolKind == SYMBOL_PARAMETER)
+ if (utility::isLocalVariable(d) || utility::isParameter(d))
{
if (!d->getNameAsString().empty()) // don't record anonymous parameters
{
@@ -205,8 +204,7 @@ void CxxAstVisitorComponentIndexer::visitVarDecl(clang::VarDecl* d)
{
if (getAstVisitor()->shouldVisitDecl(d))
{
- SymbolKind symbolKind = utility::getSymbolKind(d);
- if (symbolKind == SYMBOL_LOCAL_VARIABLE || symbolKind == SYMBOL_PARAMETER)
+ if (utility::isLocalVariable(d) || utility::isParameter(d))
{
if (!d->getNameAsString().empty()) // don't record anonymous parameters
{
@@ -215,6 +213,7 @@ void CxxAstVisitorComponentIndexer::visitVarDecl(clang::VarDecl* d)
}
else
{
+ const SymbolKind symbolKind = utility::getSymbolKind(d);
const ParseLocation location = getParseLocation(d->getLocation());
Id symbolId = getOrCreateSymbolId(d);
diff --git a/src/lib_cxx/data/parser/cxx/utilityClang.cpp b/src/lib_cxx/data/parser/cxx/utilityClang.cpp
index d02974a5..2f6470e6 100644
--- a/src/lib_cxx/data/parser/cxx/utilityClang.cpp
+++ b/src/lib_cxx/data/parser/cxx/utilityClang.cpp
@@ -85,15 +85,25 @@ SymbolKind utility::convertTagKind(const clang::TagTypeKind tagKind)
}
}
+bool utility::isLocalVariable(const clang::VarDecl* d)
+{
+ if (!llvm::isa(d) && !(d->getParentFunctionOrMethod() == nullptr))
+ {
+ return true;
+ }
+ return false;
+}
+
+bool utility::isParameter(const clang::VarDecl* d)
+{
+ return llvm::isa(d);
+}
+
SymbolKind utility::getSymbolKind(const clang::VarDecl* d)
{
SymbolKind symbolKind = SYMBOL_KIND_MAX;
- if (llvm::isa(d))
- {
- symbolKind = SYMBOL_PARAMETER;
- }
- else if (d->getParentFunctionOrMethod() == nullptr)
+ if (d->getParentFunctionOrMethod() == nullptr)
{
if (d->getAccess() == clang::AS_none)
{
@@ -104,10 +114,6 @@ SymbolKind utility::getSymbolKind(const clang::VarDecl* d)
symbolKind = SYMBOL_FIELD;
}
}
- else
- {
- symbolKind = SYMBOL_LOCAL_VARIABLE;
- }
return symbolKind;
}
diff --git a/src/lib_cxx/data/parser/cxx/utilityClang.h b/src/lib_cxx/data/parser/cxx/utilityClang.h
index 80c11173..0fad3b06 100644
--- a/src/lib_cxx/data/parser/cxx/utilityClang.h
+++ b/src/lib_cxx/data/parser/cxx/utilityClang.h
@@ -24,6 +24,8 @@ namespace utility
bool isImplicit(const clang::Decl* d);
AccessKind convertAccessSpecifier(clang::AccessSpecifier access);
SymbolKind convertTagKind(const clang::TagTypeKind tagKind);
+ bool isLocalVariable(const clang::VarDecl* d);
+ bool isParameter(const clang::VarDecl* d);
SymbolKind getSymbolKind(const clang::VarDecl* d);
std::wstring getFileNameOfFileEntry(const clang::FileEntry* entry);
diff --git a/src/lib_gui/qt/view/QtGraphView.cpp b/src/lib_gui/qt/view/QtGraphView.cpp
index 5cacac8c..154ef315 100644
--- a/src/lib_gui/qt/view/QtGraphView.cpp
+++ b/src/lib_gui/qt/view/QtGraphView.cpp
@@ -171,7 +171,7 @@ void QtGraphView::initView()
m_groupNamespaceButton->setObjectName("group_left_button");
m_groupFileButton->setToolTip("group by file");
- m_groupNamespaceButton->setToolTip("group by package/namespace");
+ m_groupNamespaceButton->setToolTip("group by package/namespace/module");
m_groupFileButton->setCheckable(true);
m_groupNamespaceButton->setCheckable(true);
diff --git a/src/test/helper/TestIntermediateStorage.h b/src/test/helper/TestIntermediateStorage.h
index 716566eb..1a1e09c6 100644
--- a/src/test/helper/TestIntermediateStorage.h
+++ b/src/test/helper/TestIntermediateStorage.h
@@ -299,6 +299,7 @@ public:
std::vector globalVariables;
std::vector methods;
std::vector namespaces;
+ std::vector modules;
std::vector structs;
std::vector macros;
std::vector templateParameterTypes;
@@ -349,6 +350,8 @@ private:
return L"SYMBOL_MACRO";
case NodeType::NODE_METHOD:
return L"SYMBOL_METHOD";
+ case NodeType::NODE_MODULE:
+ return L"SYMBOL_MODULE";
case NodeType::NODE_NAMESPACE:
return L"SYMBOL_NAMESPACE";
case NodeType::NODE_PACKAGE:
@@ -437,6 +440,8 @@ private:
return &globalVariables;
case NodeType::NODE_METHOD:
return &methods;
+ case NodeType::NODE_MODULE:
+ return &modules;
case NodeType::NODE_NAMESPACE:
return &namespaces;
case NodeType::NODE_STRUCT: