diff --git a/.gitignore b/.gitignore
index efef3fa3..3de6104d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -2,8 +2,9 @@
/distr/
/deps/
-/bin/app/data/projects/ignored/
/bin/app/data/java/lib/
+/bin/app/data/projects/ignored/
+/bin/app/data/python/
/bin/app/user/log/
/bin/app/user/ApplicationSettings.xml
/bin/app/user/window_settings.ini
diff --git a/CMakeLists.txt b/CMakeLists.txt
index f2863384..6c9c066a 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -38,6 +38,7 @@ set(LIB_UTILITY_PROJECT_NAME "${PROJECT_NAME}_lib_utility")
set(LIB_GUI_PROJECT_NAME "${PROJECT_NAME}_lib_gui")
set(LIB_CXX_PROJECT_NAME "${PROJECT_NAME}_lib_cxx")
set(LIB_JAVA_PROJECT_NAME "${PROJECT_NAME}_lib_java")
+set(LIB_PYTHON_PROJECT_NAME "${PROJECT_NAME}_lib_python")
set(LIB_PROJECT_NAME "${PROJECT_NAME}_lib")
set(LICENSE_GENERATOR_PROJECT_NAME "${PROJECT_NAME}_license_generator")
set(TEST_PROJECT_NAME "${PROJECT_NAME}_test")
@@ -241,6 +242,7 @@ add_subdirectory(src/lib)
add_subdirectory(src/lib_cxx)
add_subdirectory(src/lib_gui)
add_subdirectory(src/lib_java)
+add_subdirectory(src/lib_python)
add_subdirectory(src/lib_license)
add_subdirectory(src/lib_utility)
add_subdirectory(src/license_generator)
@@ -406,6 +408,30 @@ add_custom_command(
)
+# Lib Python ---------------------------------------------------------------------
+
+add_library(${LIB_PYTHON_PROJECT_NAME} ${LIB_PYTHON_FILES})
+
+create_source_groups(${LIB_PYTHON_FILES})
+
+set_property(
+ TARGET ${LIB_PYTHON_PROJECT_NAME}
+ PROPERTY INCLUDE_DIRECTORIES
+ "${LIB_PYTHON_INCLUDE_PATHS}"
+ "${LIB_UTILITY_INCLUDE_PATHS}"
+ "${LIB_INCLUDE_PATHS}"
+# "${LIB_GUI_INCLUDE_PATHS}"
+)
+
+#target_include_directories(${LIB_PYTHON_PROJECT_NAME} SYSTEM
+# PUBLIC ${Boost_INCLUDE_DIRS}
+#)
+
+#link_directories(${Boost_LIBRARY_DIRS})
+
+target_link_libraries(${LIB_PYTHON_PROJECT_NAME} ${LIB_UTILITY_PROJECT_NAME} ${LIB_PROJECT_NAME})
+
+
# Lib Gui ----------------------------------------------------------------------
# Find includes in corresponding build directories
@@ -449,6 +475,7 @@ set_property(
"${LIB_INCLUDE_PATHS}"
"${LIB_CXX_INCLUDE_PATHS}"
"${LIB_JAVA_INCLUDE_PATHS}"
+ "${LIB_PYTHON_INCLUDE_PATHS}" # required for QtProjectWizzardContentPathsSource::getFilePaths()
"${LIB_LICENSE_INCLUDE_PATHS}"
"${CMAKE_BINARY_DIR}/src/lib_gui"
"${CMAKE_BINARY_DIR}/src/lib_license"
@@ -510,7 +537,14 @@ endif ()
create_source_groups(${INDEXER_FILES})
-target_link_libraries(${APP_INDEXER_NAME} ${LIB_GUI_PROJECT_NAME} ${LIB_CXX_PROJECT_NAME} ${LIB_JAVA_PROJECT_NAME} ${LIB_PROJECT_NAME})
+target_link_libraries(
+ ${APP_INDEXER_NAME}
+ ${LIB_PROJECT_NAME}
+ ${LIB_GUI_PROJECT_NAME}
+ ${LIB_CXX_PROJECT_NAME}
+ ${LIB_JAVA_PROJECT_NAME}
+ ${LIB_PYTHON_PROJECT_NAME}
+)
if (APPLE)
find_library(CORE_FOUNDATION CoreFoundation)
@@ -527,6 +561,7 @@ set_property(
"${LIB_LICENSE_INCLUDE_PATHS}"
"${LIB_CXX_INCLUDE_PATHS}"
"${LIB_JAVA_INCLUDE_PATHS}"
+ "${LIB_PYTHON_INCLUDE_PATHS}"
"${CMAKE_BINARY_DIR}/src/lib_gui"
"${CMAKE_BINARY_DIR}/src/lib_license"
)
@@ -571,7 +606,15 @@ endif ()
create_source_groups(${APP_FILES})
-target_link_libraries(${APP_PROJECT_NAME} ${LIB_GUI_PROJECT_NAME} ${LIB_CXX_PROJECT_NAME} ${LIB_JAVA_PROJECT_NAME} ${LIB_PROJECT_NAME} ${LIB_LICENSE_PROJECT_NAME})
+target_link_libraries(
+ ${APP_PROJECT_NAME}
+ ${LIB_PROJECT_NAME}
+ ${LIB_GUI_PROJECT_NAME}
+ ${LIB_LICENSE_PROJECT_NAME}
+ ${LIB_CXX_PROJECT_NAME}
+ ${LIB_JAVA_PROJECT_NAME}
+ ${LIB_PYTHON_PROJECT_NAME}
+)
set_property(
TARGET ${APP_PROJECT_NAME}
@@ -583,6 +626,7 @@ set_property(
"${LIB_LICENSE_INCLUDE_PATHS}"
"${LIB_CXX_INCLUDE_PATHS}"
"${LIB_JAVA_INCLUDE_PATHS}"
+ "${LIB_PYTHON_INCLUDE_PATHS}"
"${CMAKE_BINARY_DIR}/src/lib_gui"
"${CMAKE_BINARY_DIR}/src/lib_license"
)
diff --git a/deployment/dockerfiles/linux/centos6_32/Dockerfile b/deployment/dockerfiles/linux/centos6_32/Dockerfile
index 77c05e9d..4d86f1f6 100755
--- a/deployment/dockerfiles/linux/centos6_32/Dockerfile
+++ b/deployment/dockerfiles/linux/centos6_32/Dockerfile
@@ -23,7 +23,7 @@ yum -y install devtoolset-4-gcc devtoolset-4-gcc-c++ devtoolset-4-binutils \
gperftools gperf libicu-devel boost-devel \
libxslt-devel docbook-style-xsl.noarch python27 \
xz mesa-libEGL-devel mesa-libGL-devel glib-devel \
- java-1.8.0-openjdk-devel ccache re2c ImageMagick vim lftp && \
+ java-1.8.0-openjdk-devel ccache re2c ImageMagick vim lftp unzip && \
yum clean all
# CMake and Maven
diff --git a/deployment/dockerfiles/linux/centos6_64_base/Dockerfile b/deployment/dockerfiles/linux/centos6_64_base/Dockerfile
index c3452a6c..c6e55671 100755
--- a/deployment/dockerfiles/linux/centos6_64_base/Dockerfile
+++ b/deployment/dockerfiles/linux/centos6_64_base/Dockerfile
@@ -15,7 +15,7 @@ yum -y install wget devtoolset-4-gcc devtoolset-4-gcc-c++ devtoolset-4-binutils
gperftools.x86_64 gperf.x86_64 libicu-devel.x86_64 boost-devel.x86_64 \
libxslt-devel.x86_64 python27.x86_64 \
xz mesa-libEGL-devel mesa-libGL-devel glib-devel git19 \
- java-1.8.0-openjdk-devel re2c ccache ImageMagick vim lftp && \
+ java-1.8.0-openjdk-devel re2c ccache ImageMagick vim lftp unzip && \
yum clean all
# CMake
diff --git a/deployment/windows/wixSetup/build.sh b/deployment/windows/wixSetup/build.sh
index 30773c7f..9eb9dee3 100644
--- a/deployment/windows/wixSetup/build.sh
+++ b/deployment/windows/wixSetup/build.sh
@@ -54,23 +54,22 @@ DATA_COLOR_SCHEMES_DIR=$ROOT_DIR/bin/app/data/color_schemes
DATA_CXX_DIR=$ROOT_DIR/bin/app/data/cxx
DATA_FALLBACK_DIR=$ROOT_DIR/bin/app/data/fallback
DATA_FONTS_DIR=$ROOT_DIR/bin/app/data/fonts
-
DATA_GUI_DIR=$ROOT_DIR/bin/app/data/gui
DATA_JAVA_DIR=$ROOT_DIR/bin/app/data/java
+DATA_PYTHON_DIR=$ROOT_DIR/bin/app/data/python
DATA_SYNTAX_HIGHLIGHTING_RULES_DIR=$ROOT_DIR/bin/app/data/syntax_highlighting_rules
+
heat.exe dir $DATA_COLOR_SCHEMES_DIR -cg DataColorSchemesComponentGroup -var var.DataColorSchemesSourceDir -out build/dataColorSchemes.wxs -gg -sfrag -g1 -dr LieutenantCommanderData -t $SCRIPT_DIR/HeatTransform.xslt
heat.exe dir $DATA_CXX_DIR -cg DataCxxComponentGroup -var var.DataCxxSourceDir -out build/dataCxx.wxs -gg -sfrag -g1 -dr LieutenantCommanderData -t $SCRIPT_DIR/HeatTransform.xslt
heat.exe dir $DATA_FALLBACK_DIR -cg DataFallbackComponentGroup -var var.DataFallbackSourceDir -out build/dataFallback.wxs -gg -sfrag -g1 -dr LieutenantCommanderData -t $SCRIPT_DIR/HeatTransform.xslt
heat.exe dir $DATA_FONTS_DIR -cg DataFontsComponentGroup -var var.DataFontsSourceDir -out build/dataFonts.wxs -gg -sfrag -g1 -dr LieutenantCommanderData -t $SCRIPT_DIR/HeatTransform.xslt
-
-
heat.exe dir $DATA_GUI_DIR -cg DataGuiComponentGroup -var var.DataGuiSourceDir -out build/dataGui.wxs -gg -sfrag -g1 -dr LieutenantCommanderData -t $SCRIPT_DIR/HeatTransform.xslt
heat.exe dir $DATA_JAVA_DIR -cg DataJavaComponentGroup -var var.DataJavaSourceDir -out build/dataJava.wxs -gg -sfrag -g1 -dr LieutenantCommanderData -t $SCRIPT_DIR/HeatTransform.xslt
+heat.exe dir $DATA_PYTHON_DIR -cg DataPythonComponentGroup -var var.DataPythonSourceDir -out build/dataPython.wxs -gg -sfrag -g1 -dr LieutenantCommanderData -t $SCRIPT_DIR/HeatTransform.xslt
heat.exe dir $DATA_SYNTAX_HIGHLIGHTING_RULES_DIR -cg DataSyntaxHighlightingRulesComponentGroup -var var.DataSyntaxHighlightingRulesSourceDir -out build/dataSyntaxHighlightingRules.wxs -gg -sfrag -g1 -dr LieutenantCommanderData -t $SCRIPT_DIR/HeatTransform.xslt
-
candle.exe -dProductVersion="$VERSION_STRING" -dProductGuid="$PRODUCT_GUID" -dWin64="$WIN_64" -arch $X_ARCH -out build/ \
-dSampleJavaparserSourceDir="$SAMPLE_JAVAPARSER_DIR" build/sampleJavaparser.wxs \
-dSampleTictactoeSourceDir="$SAMPLE_TICTACTOE_DIR" build/sampleTictactoe.wxs \
@@ -81,6 +80,7 @@ candle.exe -dProductVersion="$VERSION_STRING" -dProductGuid="$PRODUCT_GUID" -dWi
-dDataFontsSourceDir="$DATA_FONTS_DIR" build/dataFonts.wxs \
-dDataGuiSourceDir="$DATA_GUI_DIR" build/dataGui.wxs \
-dDataJavaSourceDir="$DATA_JAVA_DIR" build/dataJava.wxs \
+ -dDataPythonSourceDir="$DATA_PYTHON_DIR" build/dataPython.wxs \
-dDataSyntaxHighlightingRulesSourceDir="$DATA_SYNTAX_HIGHLIGHTING_RULES_DIR" build/dataSyntaxHighlightingRules.wxs \
sourcetrail.wxs customActions.wxs dialogShortcuts.wxs installDir.wxs appDataDir.wxs \
> build/compileLog.txt
@@ -96,6 +96,7 @@ light.exe -ext WixUIExtension \
build/dataFonts.wixobj \
build/dataGui.wixobj \
build/dataJava.wixobj \
+ build/dataPython.wixobj \
build/dataSyntaxHighlightingRules.wixobj \
build/sourcetrail.wixobj build/customActions.wixobj build/dialogShortcuts.wixobj build/installDir.wixobj build/appDataDir.wixobj -out build/sourcetrail.msi \
> build/linkLog.txt
diff --git a/deployment/windows/wixSetup/sourcetrail.wxs b/deployment/windows/wixSetup/sourcetrail.wxs
index 0fba8caf..975052cf 100644
--- a/deployment/windows/wixSetup/sourcetrail.wxs
+++ b/deployment/windows/wixSetup/sourcetrail.wxs
@@ -254,9 +254,9 @@
-
+
diff --git a/script/clean.sh b/script/clean.sh
index 0178737e..e7c66fa6 100755
--- a/script/clean.sh
+++ b/script/clean.sh
@@ -24,7 +24,7 @@ fi
ROOT_DIR=$ROOT_DIR/..
-# Enter masterproject directory
+# Enter sourcetrail root directory
cd $ROOT_DIR/
if [ $PLATFORM == "Windows" ]; then
@@ -41,6 +41,7 @@ if [ $PLATFORM == "Windows" ]; then
fi
# Remove folders and contents
+rm -rf bin/app/data/python
rm -rf java_indexer/bin
rm -rf build
diff --git a/script/download_python_indexer.sh b/script/download_python_indexer.sh
new file mode 100755
index 00000000..1e25330e
--- /dev/null
+++ b/script/download_python_indexer.sh
@@ -0,0 +1,70 @@
+#!/bin/bash
+
+SOURCETRAIL_PYTHON_INDEXER_VERSION="v0_db23_p2"
+
+# Determine current platform
+PLATFORM='unknown'
+if [ "$(uname)" == "Darwin" ]; then
+ PLATFORM='osx'
+elif [ "$(expr substr $(uname -s) 1 5)" == "Linux" ]; then
+ PLATFORM='linux'
+elif [ "$(expr substr $(uname -s) 1 10)" == "MINGW32_NT" ]; then
+ PLATFORM='windows'
+fi
+
+PACKAGE_NAME="SourcetrailPythonIndexer_${SOURCETRAIL_PYTHON_INDEXER_VERSION}-${PLATFORM}"
+PACKAGE_FILE_NAME="${PACKAGE_NAME}.zip"
+PACKAGE_URL="https://github.com/CoatiSoftware/SourcetrailPythonIndexer/releases/download/${SOURCETRAIL_PYTHON_INDEXER_VERSION}/${PACKAGE_FILE_NAME}"
+TEMP_PATH="build/temp"
+TARGET_PATH="bin/app/data/python"
+
+
+ABORT="\033[31mAbort:\033[00m"
+SUCCESS="\033[32mSuccess:\033[00m"
+INFO="\033[33mInfo:\033[00m"
+
+if [ $PLATFORM == "windows" ]; then
+ ORIGINAL_PATH_TO_SCRIPT="${0}"
+ CLEANED_PATH_TO_SCRIPT="${ORIGINAL_PATH_TO_SCRIPT//\\//}"
+ ROOT_DIR=`dirname "$CLEANED_PATH_TO_SCRIPT"`
+else
+ ROOT_DIR="$( cd "$( dirname "$0" )" && pwd )"
+fi
+
+ROOT_DIR=$ROOT_DIR/..
+
+# Enter main directory
+cd $ROOT_DIR/
+
+mkdir -p $TEMP_PATH
+
+echo -e $INFO "starting to download $PACKAGE_FILE_NAME"
+
+if [ $PLATFORM == "linux" ]; then
+ wget -O $TEMP_PATH/$PACKAGE_FILE_NAME $PACKAGE_URL
+elif [ $PLATFORM == "osx" ]; then
+ wget -O $TEMP_PATH/$PACKAGE_FILE_NAME $PACKAGE_URL
+elif [ $PLATFORM == "windows" ]; then
+ certutil.exe -urlcache -split -f $PACKAGE_URL $TEMP_PATH/$PACKAGE_FILE_NAME
+fi
+
+echo -e $INFO "finished downloading $PACKAGE_FILE_NAME"
+
+
+if [ $PLATFORM == "linux" ]; then
+ unzip -d $TEMP_PATH $TEMP_PATH/$PACKAGE_FILE_NAME
+elif [ $PLATFORM == "osx" ]; then
+ unzip -d $TEMP_PATH $TEMP_PATH/$PACKAGE_FILE_NAME
+elif [ $PLATFORM == "windows" ]; then
+ winrar x $TEMP_PATH/$PACKAGE_FILE_NAME $TEMP_PATH
+fi
+
+
+echo -e $INFO "clearing $TARGET_PATH"
+rm -rf $TARGET_PATH
+mkdir -p $TARGET_PATH
+cp -r $TEMP_PATH/$PACKAGE_NAME/* $TARGET_PATH
+
+
+echo -e $INFO "clearing temporary data at $TEMP_PATH"
+rm -rf $TEMP_PATH
diff --git a/script/setup.sh b/script/setup.sh
index 9a4881c0..da70c429 100755
--- a/script/setup.sh
+++ b/script/setup.sh
@@ -34,10 +34,9 @@ echo -e $INFO "install git settings"
git config commit.template setup/git/git_commit_template.txt
git config color.ui true
-if [ -d ".git/hooks" ]
-then
-cp setup/git/git_pre_commit_hook.sh .git/hooks/pre-commit
-cp setup/git/git_pre_push_hook.sh .git/hooks/pre-push
+if [ -d ".git/hooks" ]; then
+ cp setup/git/git_pre_commit_hook.sh .git/hooks/pre-commit
+ cp setup/git/git_pre_push_hook.sh .git/hooks/pre-push
fi
# Create Debug and Release folders
@@ -102,6 +101,12 @@ else
mkdir -p build/Release/test
fi
+if [ $PLATFORM == "Windows" ]; then
+ sh script/download_python_indexer.sh
+else
+ MY_PATH=`dirname "$0"`
+ $MY_PATH/download_python_indexer.sh
+fi
if [ $PLATFORM == "Windows" ]; then
echo -e $INFO "creating program icon"
diff --git a/setup/MacOSX/bundle_install.sh.in b/setup/MacOSX/bundle_install.sh.in
index 9e9ed598..d0793290 100755
--- a/setup/MacOSX/bundle_install.sh.in
+++ b/setup/MacOSX/bundle_install.sh.in
@@ -75,6 +75,7 @@ cp -R ../../../bin/app/data/syntax_highlighting_rules $RES_DIR/data/syntax_highl
cp -R ../../../bin/app/data/fonts $RES_DIR/data/fonts
cp -R ../../../bin/app/data/gui $RES_DIR/data/gui
cp -R ../../../bin/app/data/java $RES_DIR/data/java
+cp -R ../../../bin/app/data/python $RES_DIR/data/python
cp -R ../../../bin/app/data/fallback $RES_DIR/data/fallback
cp -R ../../../bin/app/user/projects $RES_DIR/data/fallback/projects
diff --git a/src/app/main.cpp b/src/app/main.cpp
index e91be77f..a10201b8 100644
--- a/src/app/main.cpp
+++ b/src/app/main.cpp
@@ -9,6 +9,7 @@
#include "SourceGroupFactory.h"
#include "SourceGroupFactoryModuleCxx.h"
#include "SourceGroupFactoryModuleJava.h"
+#include "SourceGroupFactoryModulePython.h"
#include "SourceGroupFactoryModuleCustom.h"
#include "QtNetworkFactory.h"
#include "QtApplication.h"
@@ -46,7 +47,6 @@ void setupLogging()
LogManager* logManager = LogManager::getInstance().get();
std::shared_ptr consoleLogger = std::make_shared();
- // consoleLogger->setLogLevel(Logger::LOG_WARNINGS | Logger::LOG_ERRORS);
consoleLogger->setLogLevel(Logger::LOG_ALL);
logManager->addLogger(consoleLogger);
@@ -186,10 +186,11 @@ void addLanguagePackages()
{
SourceGroupFactory::getInstance()->addModule(std::make_shared());
SourceGroupFactory::getInstance()->addModule(std::make_shared());
+ SourceGroupFactory::getInstance()->addModule(std::make_shared());
SourceGroupFactory::getInstance()->addModule(std::make_shared());
- LanguagePackageManager::getInstance()->addPackage(std::make_shared());
LanguagePackageManager::getInstance()->addPackage(std::make_shared());
+ LanguagePackageManager::getInstance()->addPackage(std::make_shared());
}
QCoreApplication* createApplication(int &argc, char *argv[], bool noGUI = false)
diff --git a/src/lib/CMakeLists.txt b/src/lib/CMakeLists.txt
index 0f9a7fe6..e91597b4 100644
--- a/src/lib/CMakeLists.txt
+++ b/src/lib/CMakeLists.txt
@@ -360,6 +360,8 @@ add_files(
settings/SourceGroupSettingsJavaMaven.h
settings/SourceGroupSettingsJavaSonargraph.cpp
settings/SourceGroupSettingsJavaSonargraph.h
+ settings/SourceGroupSettingsPythonEmpty.cpp
+ settings/SourceGroupSettingsPythonEmpty.h
settings/SourceGroupSettingsWithClasspath.cpp
settings/SourceGroupSettingsWithClasspath.h
settings/SourceGroupSettingsWithCppStandard.cpp
diff --git a/src/lib/data/indexer/IndexerCommandType.cpp b/src/lib/data/indexer/IndexerCommandType.cpp
index 0e48310e..dfe774f8 100644
--- a/src/lib/data/indexer/IndexerCommandType.cpp
+++ b/src/lib/data/indexer/IndexerCommandType.cpp
@@ -8,6 +8,8 @@ std::string indexerCommandTypeToString(IndexerCommandType type)
return "indexer_command_cxx";
case INDEXER_COMMAND_JAVA:
return "indexer_command_java";
+ case INDEXER_COMMAND_PYTHON:
+ return "indexer_command_python";
case INDEXER_COMMAND_CUSTOM:
return "indexer_command_custom";
default:
@@ -20,6 +22,7 @@ IndexerCommandType stringToIndexerCommandType(const std::string& s)
{
if (s == indexerCommandTypeToString(INDEXER_COMMAND_CXX)) return INDEXER_COMMAND_CXX;
if (s == indexerCommandTypeToString(INDEXER_COMMAND_JAVA)) return INDEXER_COMMAND_JAVA;
+ if (s == indexerCommandTypeToString(INDEXER_COMMAND_PYTHON)) return INDEXER_COMMAND_PYTHON;
if (s == indexerCommandTypeToString(INDEXER_COMMAND_CUSTOM)) return INDEXER_COMMAND_CUSTOM;
return INDEXER_COMMAND_UNKNOWN;
}
diff --git a/src/lib/data/indexer/IndexerCommandType.h b/src/lib/data/indexer/IndexerCommandType.h
index 4541bd20..24f425cd 100644
--- a/src/lib/data/indexer/IndexerCommandType.h
+++ b/src/lib/data/indexer/IndexerCommandType.h
@@ -8,6 +8,7 @@ enum IndexerCommandType
INDEXER_COMMAND_UNKNOWN,
INDEXER_COMMAND_CXX,
INDEXER_COMMAND_JAVA,
+ INDEXER_COMMAND_PYTHON,
INDEXER_COMMAND_CUSTOM
};
diff --git a/src/lib/project/Project.cpp b/src/lib/project/Project.cpp
index d3654be5..dec299ce 100644
--- a/src/lib/project/Project.cpp
+++ b/src/lib/project/Project.cpp
@@ -499,7 +499,8 @@ void Project::buildIndex(RefreshInfo info, std::shared_ptr dialogVie
{
if (sourceGroup->getStatus() == SOURCE_GROUP_STATUS_ENABLED)
{
- if (sourceGroup->getType() == SOURCE_GROUP_CUSTOM_COMMAND)
+ if (sourceGroup->getType() == SOURCE_GROUP_CUSTOM_COMMAND ||
+ sourceGroup->getType() == SOURCE_GROUP_PYTHON_EMPTY)
{
customIndexerCommandProvider->addProvider(sourceGroup->getIndexerCommandProvider(info.filesToIndex));
}
diff --git a/src/lib/settings/LanguageType.cpp b/src/lib/settings/LanguageType.cpp
index 97209d0c..059a089f 100644
--- a/src/lib/settings/LanguageType.cpp
+++ b/src/lib/settings/LanguageType.cpp
@@ -10,6 +10,8 @@ std::string languageTypeToString(LanguageType t)
return "C++";
case LANGUAGE_JAVA:
return "Java";
+ case LANGUAGE_PYTHON:
+ return "Python";
case LANGUAGE_CUSTOM:
return "Custom";
case LANGUAGE_UNKNOWN:
@@ -20,19 +22,23 @@ std::string languageTypeToString(LanguageType t)
LanguageType stringToLanguageType(std::string s)
{
- if (s == "C")
+ if (s == languageTypeToString(LANGUAGE_C))
{
return LANGUAGE_C;
}
- else if (s == "C++")
+ else if (s == languageTypeToString(LANGUAGE_CPP))
{
return LANGUAGE_CPP;
}
- else if (s == "Java")
+ else if (s == languageTypeToString(LANGUAGE_JAVA))
{
return LANGUAGE_JAVA;
}
- else if (s == "Custom")
+ else if (s == languageTypeToString(LANGUAGE_PYTHON))
+ {
+ return LANGUAGE_PYTHON;
+ }
+ else if (s == languageTypeToString(LANGUAGE_CUSTOM))
{
return LANGUAGE_CUSTOM;
}
@@ -63,6 +69,8 @@ LanguageType getLanguageTypeForSourceGroupType(SourceGroupType t)
return LANGUAGE_JAVA;
case SOURCE_GROUP_JAVA_SONARGRAPH:
return LANGUAGE_JAVA;
+ case SOURCE_GROUP_PYTHON_EMPTY:
+ return LANGUAGE_PYTHON;
case SOURCE_GROUP_CUSTOM_COMMAND:
return LANGUAGE_CUSTOM;
default:
diff --git a/src/lib/settings/LanguageType.h b/src/lib/settings/LanguageType.h
index 543114cc..2fb5844f 100644
--- a/src/lib/settings/LanguageType.h
+++ b/src/lib/settings/LanguageType.h
@@ -10,6 +10,7 @@ enum LanguageType
LANGUAGE_CPP,
LANGUAGE_C,
LANGUAGE_JAVA,
+ LANGUAGE_PYTHON,
LANGUAGE_CUSTOM,
LANGUAGE_UNKNOWN
};
diff --git a/src/lib/settings/ProjectSettings.cpp b/src/lib/settings/ProjectSettings.cpp
index b86c8ff1..7c1f3ad0 100644
--- a/src/lib/settings/ProjectSettings.cpp
+++ b/src/lib/settings/ProjectSettings.cpp
@@ -13,6 +13,7 @@
#include "SourceGroupSettingsJavaMaven.h"
#include "SourceGroupSettingsJavaGradle.h"
#include "SourceGroupSettingsJavaSonargraph.h"
+#include "SourceGroupSettingsPythonEmpty.h"
#include "logging.h"
#include "utilityString.h"
#include "utilityUuid.h"
@@ -196,6 +197,9 @@ std::vector> ProjectSettings::getAllSourceG
case SOURCE_GROUP_JAVA_SONARGRAPH:
settings = std::make_shared(id, this);
break;
+ case SOURCE_GROUP_PYTHON_EMPTY:
+ settings = std::make_shared(id, this);
+ break;
case SOURCE_GROUP_CUSTOM_COMMAND:
settings = std::make_shared(id, this);
break;
diff --git a/src/lib/settings/SourceGroupSettingsPythonEmpty.cpp b/src/lib/settings/SourceGroupSettingsPythonEmpty.cpp
new file mode 100644
index 00000000..0e1aa776
--- /dev/null
+++ b/src/lib/settings/SourceGroupSettingsPythonEmpty.cpp
@@ -0,0 +1,54 @@
+#include "SourceGroupSettingsPythonEmpty.h"
+#include "FilePath.h"
+
+SourceGroupSettingsPythonEmpty::SourceGroupSettingsPythonEmpty(const std::string& id, const ProjectSettings* projectSettings)
+ : SourceGroupSettings(id, SOURCE_GROUP_PYTHON_EMPTY, projectSettings)
+{
+}
+
+std::shared_ptr SourceGroupSettingsPythonEmpty::createCopy() const
+{
+ return std::make_shared(*this);
+}
+
+void SourceGroupSettingsPythonEmpty::load(std::shared_ptr config)
+{
+ SourceGroupSettings::load(config);
+
+ const std::string key = s_keyPrefix + getId();
+
+ SourceGroupSettingsWithExcludeFilters::load(config, key);
+ SourceGroupSettingsWithSourcePaths::load(config, key);
+ SourceGroupSettingsWithSourceExtensions::load(config, key);
+}
+
+void SourceGroupSettingsPythonEmpty::save(std::shared_ptr config)
+{
+ SourceGroupSettings::save(config);
+
+ const std::string key = s_keyPrefix + getId();
+
+ SourceGroupSettingsWithExcludeFilters::save(config, key);
+ SourceGroupSettingsWithSourcePaths::save(config, key);
+ SourceGroupSettingsWithSourceExtensions::save(config, key);
+}
+
+bool SourceGroupSettingsPythonEmpty::equals(std::shared_ptr other) const
+{
+ std::shared_ptr otherJava = std::dynamic_pointer_cast(other);
+
+ return (
+ otherJava &&
+ SourceGroupSettings::equals(other) &&
+ SourceGroupSettingsWithExcludeFilters::equals(otherJava) &&
+ SourceGroupSettingsWithSourcePaths::equals(otherJava) &&
+ SourceGroupSettingsWithSourceExtensions::equals(otherJava)
+ );
+}
+
+std::vector SourceGroupSettingsPythonEmpty::getDefaultSourceExtensions() const
+{
+ return {
+ L".py"
+ };
+}
diff --git a/src/lib/settings/SourceGroupSettingsPythonEmpty.h b/src/lib/settings/SourceGroupSettingsPythonEmpty.h
new file mode 100644
index 00000000..4bab6886
--- /dev/null
+++ b/src/lib/settings/SourceGroupSettingsPythonEmpty.h
@@ -0,0 +1,30 @@
+#ifndef SOURCE_GROUP_SETTINGS_PYTHON_EMPTY_H
+#define SOURCE_GROUP_SETTINGS_PYTHON_EMPTY_H
+
+#include "SourceGroupSettings.h"
+#include "SourceGroupSettingsWithExcludeFilters.h"
+#include "SourceGroupSettingsWithSourceExtensions.h"
+#include "SourceGroupSettingsWithSourcePaths.h"
+
+class SourceGroupSettingsPythonEmpty
+ : public SourceGroupSettings
+ , public SourceGroupSettingsWithExcludeFilters
+ , public SourceGroupSettingsWithSourceExtensions
+ , public SourceGroupSettingsWithSourcePaths
+{
+public:
+ SourceGroupSettingsPythonEmpty(const std::string& id, const ProjectSettings* projectSettings);
+
+ std::shared_ptr createCopy() const override;
+
+ void load(std::shared_ptr config) override;
+ void save(std::shared_ptr config) override;
+
+ bool equals(std::shared_ptr other) const override;
+
+private:
+ std::vector getDefaultSourceExtensions() const override;
+
+};
+
+#endif // SOURCE_GROUP_SETTINGS_PYTHON_EMPTY_H
diff --git a/src/lib/settings/SourceGroupType.cpp b/src/lib/settings/SourceGroupType.cpp
index 00273ed5..68c716b6 100644
--- a/src/lib/settings/SourceGroupType.cpp
+++ b/src/lib/settings/SourceGroupType.cpp
@@ -24,6 +24,8 @@ std::string sourceGroupTypeToString(SourceGroupType v)
return "Java Source Group from Gradle";
case SOURCE_GROUP_JAVA_SONARGRAPH:
return "Java from Sonargraph";
+ case SOURCE_GROUP_PYTHON_EMPTY:
+ return "Python Source Group";
case SOURCE_GROUP_CUSTOM_COMMAND:
return "Custom Command Source Group";
case SOURCE_GROUP_UNKNOWN:
@@ -56,6 +58,8 @@ std::string sourceGroupTypeToProjectSetupString(SourceGroupType v)
return "Java Source Group from Gradle";
case SOURCE_GROUP_JAVA_SONARGRAPH:
return "Java from Sonargraph";
+ case SOURCE_GROUP_PYTHON_EMPTY:
+ return "Empty Python Source Group";
case SOURCE_GROUP_CUSTOM_COMMAND:
return "Custom Command Source Group";
case SOURCE_GROUP_UNKNOWN:
@@ -106,6 +110,10 @@ SourceGroupType stringToSourceGroupType(const std::string& v)
{
return SOURCE_GROUP_JAVA_SONARGRAPH;
}
+ else if (v == sourceGroupTypeToString(SOURCE_GROUP_PYTHON_EMPTY))
+ {
+ return SOURCE_GROUP_PYTHON_EMPTY;
+ }
else if (v == sourceGroupTypeToString(SOURCE_GROUP_CUSTOM_COMMAND))
{
return SOURCE_GROUP_CUSTOM_COMMAND;
diff --git a/src/lib/settings/SourceGroupType.h b/src/lib/settings/SourceGroupType.h
index 0a77a9f3..e48b7e55 100644
--- a/src/lib/settings/SourceGroupType.h
+++ b/src/lib/settings/SourceGroupType.h
@@ -15,6 +15,7 @@ enum SourceGroupType
SOURCE_GROUP_JAVA_MAVEN,
SOURCE_GROUP_JAVA_GRADLE,
SOURCE_GROUP_JAVA_SONARGRAPH,
+ SOURCE_GROUP_PYTHON_EMPTY,
SOURCE_GROUP_CUSTOM_COMMAND,
SOURCE_GROUP_UNKNOWN
};
diff --git a/src/lib/utility/ResourcePaths.cpp b/src/lib/utility/ResourcePaths.cpp
index b61c4438..e7a3aef1 100644
--- a/src/lib/utility/ResourcePaths.cpp
+++ b/src/lib/utility/ResourcePaths.cpp
@@ -32,6 +32,11 @@ FilePath ResourcePaths::getJavaPath()
return AppPath::getAppPath().concatenate(L"data/java/");
}
+FilePath ResourcePaths::getPythonPath()
+{
+ return AppPath::getAppPath().concatenate(L"data/python/");
+}
+
FilePath ResourcePaths::getCxxCompilerHeaderPath()
{
return AppPath::getAppPath().concatenate(L"data/cxx/include/").getCanonical();
diff --git a/src/lib/utility/ResourcePaths.h b/src/lib/utility/ResourcePaths.h
index 438aff2d..a8cc1093 100644
--- a/src/lib/utility/ResourcePaths.h
+++ b/src/lib/utility/ResourcePaths.h
@@ -14,6 +14,7 @@ public:
static FilePath getFontsPath();
static FilePath getGuiPath();
static FilePath getJavaPath();
+ static FilePath getPythonPath();
static FilePath getCxxCompilerHeaderPath();
};
diff --git a/src/lib_cxx/project/SourceGroupCxxEmpty.cpp b/src/lib_cxx/project/SourceGroupCxxEmpty.cpp
index 18e91099..cd9dd422 100644
--- a/src/lib_cxx/project/SourceGroupCxxEmpty.cpp
+++ b/src/lib_cxx/project/SourceGroupCxxEmpty.cpp
@@ -1,13 +1,13 @@
#include "SourceGroupCxxEmpty.h"
-#include "CxxIndexerCommandProvider.h"
-#include "IndexerCommandCxx.h"
#include "ApplicationSettings.h"
+#include "CxxIndexerCommandProvider.h"
+#include "FileManager.h"
+#include "IndexerCommandCxx.h"
#include "SourceGroupSettingsCEmpty.h"
#include "SourceGroupSettingsCppEmpty.h"
#include "SourceGroupSettingsWithCppStandard.h"
#include "SourceGroupSettingsWithCStandard.h"
-#include "FileManager.h"
#include "utility.h"
SourceGroupCxxEmpty::SourceGroupCxxEmpty(std::shared_ptr settings)
diff --git a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzard.cpp b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzard.cpp
index 26f59b24..178ac2a3 100644
--- a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzard.cpp
+++ b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzard.cpp
@@ -35,6 +35,7 @@
#include "SourceGroupSettingsJavaGradle.h"
#include "SourceGroupSettingsJavaMaven.h"
#include "SourceGroupSettingsJavaSonargraph.h"
+#include "SourceGroupSettingsPythonEmpty.h"
#include "MessageLoadProject.h"
#include "MessageStatus.h"
#include "ResourcePaths.h"
@@ -404,6 +405,22 @@ namespace
return pages;
}
+
+ template<>
+ std::vector> getSourceGroupWizzardPages()
+ {
+ std::vector> pages;
+ {
+ QtSourceGroupWizzardPage page("Indexed Paths", 750, 600);
+ page.addContentCreatorWithSettings(WIZZARD_CONTENT_CONTEXT_ALL);
+ page.addContentCreatorWithSettings(WIZZARD_CONTENT_CONTEXT_ALL);
+ page.addContentCreatorWithSettings(WIZZARD_CONTENT_CONTEXT_ALL);
+ pages.push_back(page);
+ }
+
+ return pages;
+ }
+
template<>
std::vector> getSourceGroupWizzardPages()
{
@@ -656,7 +673,7 @@ void QtProjectWizzard::executeSourceGroupSetup(std::shared_ptr set
settings,
std::bind(&QtProjectWizzard::cancelSourceGroup, this),
std::bind(&QtProjectWizzard::createSourceGroup, this, std::placeholders::_1)
- );
+ );
for (const QtSourceGroupWizzardPage& page : getSourceGroupWizzardPages())
{
@@ -842,6 +859,10 @@ void QtProjectWizzard::selectedSourceGroupChanged(int index)
{
fillSummary(summary, settings, this);
}
+ else if (std::shared_ptr settings = std::dynamic_pointer_cast(group))
+ {
+ fillSummary(summary, settings, this);
+ }
else if (std::shared_ptr settings = std::dynamic_pointer_cast(group))
{
fillSummary(summary, settings, this);
@@ -1100,6 +1121,12 @@ void QtProjectWizzard::selectedProjectType(SourceGroupType sourceGroupType)
executeSourceGroupSetup(settings);
}
break;
+ case SOURCE_GROUP_PYTHON_EMPTY:
+ {
+ std::shared_ptr settings = std::make_shared(sourceGroupId, m_projectSettings.get());
+ executeSourceGroupSetup(settings);
+ }
+ break;
case SOURCE_GROUP_CUSTOM_COMMAND:
{
std::shared_ptr settings = std::make_shared(sourceGroupId, m_projectSettings.get());
diff --git a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPaths.cpp b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPaths.cpp
index 8bf53bf9..00d54051 100644
--- a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPaths.cpp
+++ b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPaths.cpp
@@ -14,6 +14,7 @@
#include "SourceGroupCustomCommand.h"
#include "SourceGroupCxxEmpty.h"
#include "SourceGroupJavaEmpty.h"
+#include "SourceGroupPythonEmpty.h"
#include "ApplicationSettings.h"
#include "ResourcePaths.h"
#include "SourceGroupSettingsCustomCommand.h"
@@ -22,6 +23,7 @@
#include "SourceGroupSettingsCxxCodeblocks.h"
#include "SourceGroupSettingsCxxSonargraph.h"
#include "SourceGroupSettingsJavaEmpty.h"
+#include "SourceGroupSettingsPythonEmpty.h"
#include "SourceGroupSettingsWithClasspath.h"
#include "SourceGroupSettingsWithIndexedHeaderPaths.h"
#include "SourceGroupSettingsWithExcludeFilters.h"
@@ -261,6 +263,10 @@ std::vector QtProjectWizzardContentPathsSource::getFilePaths() const
{
allSourceFilePaths = SourceGroupJavaEmpty(settings).getAllSourceFilePaths();
}
+ else if (std::shared_ptr settings = std::dynamic_pointer_cast(m_settings))
+ {
+ allSourceFilePaths = SourceGroupPythonEmpty(settings).getAllSourceFilePaths();
+ }
else if (std::shared_ptr settings = std::dynamic_pointer_cast(m_settings))
{
allSourceFilePaths = SourceGroupCustomCommand(settings).getAllSourceFilePaths();
diff --git a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentSelect.cpp b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentSelect.cpp
index 251dd526..f6cb0f34 100644
--- a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentSelect.cpp
+++ b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentSelect.cpp
@@ -47,6 +47,7 @@ void QtProjectWizzardContentSelect::populate(QGridLayout* layout, int& row)
sourceGroupInfos[LANGUAGE_JAVA].push_back(SourceGroupInfo(SOURCE_GROUP_JAVA_GRADLE));
sourceGroupInfos[LANGUAGE_JAVA].push_back(SourceGroupInfo(SOURCE_GROUP_JAVA_SONARGRAPH));
sourceGroupInfos[LANGUAGE_JAVA].push_back(SourceGroupInfo(SOURCE_GROUP_JAVA_EMPTY));
+ sourceGroupInfos[LANGUAGE_PYTHON].push_back(SourceGroupInfo(SOURCE_GROUP_PYTHON_EMPTY));
sourceGroupInfos[LANGUAGE_CUSTOM].push_back(SourceGroupInfo(SOURCE_GROUP_CUSTOM_COMMAND));
// define which icons should be used for which kind of source group
@@ -60,6 +61,7 @@ void QtProjectWizzardContentSelect::populate(QGridLayout* layout, int& row)
m_sourceGroupTypeIconName[SOURCE_GROUP_JAVA_MAVEN] = L"mvn_icon";
m_sourceGroupTypeIconName[SOURCE_GROUP_JAVA_GRADLE] = L"gradle_icon";
m_sourceGroupTypeIconName[SOURCE_GROUP_JAVA_SONARGRAPH] = L"sonargraph_icon";
+ m_sourceGroupTypeIconName[SOURCE_GROUP_PYTHON_EMPTY] = L"empty_icon";
m_sourceGroupTypeIconName[SOURCE_GROUP_CUSTOM_COMMAND] = L"empty_icon";
// define descriptions for each kind of Source Group
@@ -85,6 +87,8 @@ void QtProjectWizzardContentSelect::populate(QGridLayout* layout, int& row)
m_sourceGroupTypeDescriptions[SOURCE_GROUP_JAVA_GRADLE] = "Create a new Source Group from an existing Gradle project.";
m_sourceGroupTypeDescriptions[SOURCE_GROUP_JAVA_SONARGRAPH] =
"Create a new Source Group from an existing Sonargraph project file.";
+ m_sourceGroupTypeDescriptions[SOURCE_GROUP_PYTHON_EMPTY] = "Create a new Sourcetrail Source Group by defining which Python files will be indexed. Note "
+ "that this Source Group type uses the SourcetrailPythonIndexer in the background.";
m_sourceGroupTypeDescriptions[SOURCE_GROUP_CUSTOM_COMMAND] = "Create a new Source Group executing a custom command on each source file. "
"This Source Group type can be used on SourcetrailDB binaries that add "
"custom language support to Sourcetrail.
Current Database Version: " + std::to_string(SqliteIndexStorage::getStorageVersion());
diff --git a/src/lib_java/data/indexer/IndexerJava.cpp b/src/lib_java/data/indexer/IndexerJava.cpp
index c552df9c..5acf66f8 100644
--- a/src/lib_java/data/indexer/IndexerJava.cpp
+++ b/src/lib_java/data/indexer/IndexerJava.cpp
@@ -8,9 +8,9 @@ IndexerJava::~IndexerJava()
}
void IndexerJava::doIndex(
- std::shared_ptr indexerCommand,
- std::shared_ptr parserClient,
- std::shared_ptr m_indexerStateInfo
+ std::shared_ptr indexerCommand,
+ std::shared_ptr parserClient,
+ std::shared_ptr m_indexerStateInfo
){
JavaParser(parserClient, m_indexerStateInfo).buildIndex(indexerCommand);
}
diff --git a/src/lib_python/CMakeLists.txt b/src/lib_python/CMakeLists.txt
new file mode 100644
index 00000000..407d60d6
--- /dev/null
+++ b/src/lib_python/CMakeLists.txt
@@ -0,0 +1,9 @@
+
+add_files(
+ LIB_PYTHON
+
+ project/SourceGroupFactoryModulePython.h
+ project/SourceGroupFactoryModulePython.cpp
+ project/SourceGroupPythonEmpty.h
+ project/SourceGroupPythonEmpty.cpp
+)
diff --git a/src/lib_python/project/SourceGroupFactoryModulePython.cpp b/src/lib_python/project/SourceGroupFactoryModulePython.cpp
new file mode 100644
index 00000000..b9bc39f5
--- /dev/null
+++ b/src/lib_python/project/SourceGroupFactoryModulePython.cpp
@@ -0,0 +1,26 @@
+#include "SourceGroupFactoryModulePython.h"
+
+#include "SourceGroupPythonEmpty.h"
+#include "SourceGroupSettingsPythonEmpty.h"
+
+bool SourceGroupFactoryModulePython::supports(SourceGroupType type) const
+{
+ switch (type)
+ {
+ case SOURCE_GROUP_PYTHON_EMPTY:
+ return true;
+ default:
+ break;
+ }
+ return false;
+}
+
+std::shared_ptr SourceGroupFactoryModulePython::createSourceGroup(std::shared_ptr settings) const
+{
+ std::shared_ptr sourceGroup;
+ if (std::shared_ptr pythonSettings = std::dynamic_pointer_cast(settings))
+ {
+ sourceGroup = std::shared_ptr(new SourceGroupPythonEmpty(pythonSettings));
+ }
+ return sourceGroup;
+}
diff --git a/src/lib_python/project/SourceGroupFactoryModulePython.h b/src/lib_python/project/SourceGroupFactoryModulePython.h
new file mode 100644
index 00000000..aba0fd6a
--- /dev/null
+++ b/src/lib_python/project/SourceGroupFactoryModulePython.h
@@ -0,0 +1,13 @@
+#ifndef SOURCE_GROUP_FACTORY_MODULE_PYTHON_H
+#define SOURCE_GROUP_FACTORY_MODULE_PYTHON_H
+
+#include "SourceGroupFactoryModule.h"
+
+class SourceGroupFactoryModulePython: public SourceGroupFactoryModule
+{
+public:
+ bool supports(SourceGroupType type) const override;
+ std::shared_ptr createSourceGroup(std::shared_ptr settings) const override;
+};
+
+#endif // SOURCE_GROUP_FACTORY_MODULE_PYTHON_H
diff --git a/src/lib_python/project/SourceGroupPythonEmpty.cpp b/src/lib_python/project/SourceGroupPythonEmpty.cpp
new file mode 100644
index 00000000..7c1474d0
--- /dev/null
+++ b/src/lib_python/project/SourceGroupPythonEmpty.cpp
@@ -0,0 +1,66 @@
+#include "SourceGroupPythonEmpty.h"
+
+#include "FileManager.h"
+#include "IndexerCommandCustom.h"
+#include "ProjectSettings.h"
+#include "ResourcePaths.h"
+#include "SourceGroupSettingsPythonEmpty.h"
+#include "SqliteIndexStorage.h"
+#include "utility.h"
+
+SourceGroupPythonEmpty::SourceGroupPythonEmpty(std::shared_ptr settings)
+ : m_settings(settings)
+{
+}
+
+std::set SourceGroupPythonEmpty::filterToContainedFilePaths(const std::set& filePaths) const
+{
+ return SourceGroup::filterToContainedFilePaths(
+ filePaths,
+ std::set(),
+ utility::toSet(m_settings->getSourcePathsExpandedAndAbsolute()),
+ m_settings->getExcludeFiltersExpandedAndAbsolute()
+ );
+}
+
+std::set SourceGroupPythonEmpty::getAllSourceFilePaths() const
+{
+ FileManager fileManager;
+ fileManager.update(
+ m_settings->getSourcePathsExpandedAndAbsolute(),
+ m_settings->getExcludeFiltersExpandedAndAbsolute(),
+ m_settings->getSourceExtensions()
+ );
+ return fileManager.getAllSourceFilePaths();
+}
+
+std::vector> SourceGroupPythonEmpty::getIndexerCommands(const std::set& filesToIndex) const
+{
+ std::vector> indexerCommands;
+ for (const FilePath& sourceFilePath : getAllSourceFilePaths())
+ {
+ if (filesToIndex.find(sourceFilePath) != filesToIndex.end())
+ {
+ indexerCommands.push_back(std::make_shared(
+ L"\"" + ResourcePaths::getPythonPath().wstr() + L"SourcetrailPythonIndexer\" --source-file-path=%{SOURCE_FILE_PATH} --database-file-path=%{DATABASE_FILE_PATH}",
+ m_settings->getProjectSettings()->getProjectFilePath(),
+ m_settings->getProjectSettings()->getTempDBFilePath(),
+ std::to_wstring(SqliteIndexStorage::getStorageVersion()),
+ sourceFilePath,
+ true
+ ));
+ }
+ }
+
+ return indexerCommands;
+}
+
+std::shared_ptr SourceGroupPythonEmpty::getSourceGroupSettings()
+{
+ return m_settings;
+}
+
+std::shared_ptr SourceGroupPythonEmpty::getSourceGroupSettings() const
+{
+ return m_settings;
+}
diff --git a/src/lib_python/project/SourceGroupPythonEmpty.h b/src/lib_python/project/SourceGroupPythonEmpty.h
new file mode 100644
index 00000000..2bbc0024
--- /dev/null
+++ b/src/lib_python/project/SourceGroupPythonEmpty.h
@@ -0,0 +1,27 @@
+#ifndef SOURCE_GROUP_PYTHON_EMPTY_H
+#define SOURCE_GROUP_PYTHON_EMPTY_H
+
+#include
+#include
+
+#include "SourceGroup.h"
+
+class SourceGroupSettingsPythonEmpty;
+
+class SourceGroupPythonEmpty: public SourceGroup
+{
+public:
+ SourceGroupPythonEmpty(std::shared_ptr settings);
+
+ std::set filterToContainedFilePaths(const std::set& filePaths) const override;
+ std::set getAllSourceFilePaths() const override;
+ std::vector> getIndexerCommands(const std::set& filesToIndex) const override;
+
+private:
+ std::shared_ptr getSourceGroupSettings() override;
+ std::shared_ptr getSourceGroupSettings() const override;
+
+ std::shared_ptr m_settings;
+};
+
+#endif // SOURCE_GROUP_PYTHON_EMPTY_H