diff --git a/src/lib/settings/ApplicationSettings.cpp b/src/lib/settings/ApplicationSettings.cpp index 83d0edbe..1faf2061 100644 --- a/src/lib/settings/ApplicationSettings.cpp +++ b/src/lib/settings/ApplicationSettings.cpp @@ -197,7 +197,7 @@ void ApplicationSettings::setJavaPath(const std::string path) int ApplicationSettings::getJavaMaximumMemory() const { - return getValue("indexing/java/java_maximum_memory", 512); + return getValue("indexing/java/java_maximum_memory", -1); } void ApplicationSettings::setJavaMaximumMemory(int size) diff --git a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPreferences.cpp b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPreferences.cpp index 48c1686b..97240e73 100644 --- a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPreferences.cpp +++ b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPreferences.cpp @@ -144,6 +144,7 @@ void QtProjectWizzardContentPreferences::populate(QGridLayout* layout, int& row) , layout, row ); + layout->setRowMinimumHeight(row, 30); row++; layout->setRowMinimumHeight(row++, 20); @@ -231,8 +232,23 @@ void QtProjectWizzardContentPreferences::populate(QGridLayout* layout, int& row) } addJavaPathDetection(layout, row); - layout->setRowMinimumHeight(row++, 20); + layout->setRowMinimumHeight(row, 20); + row++; + // jvm max memory + m_jvmMaximumMemory = new QLineEdit(); + m_jvmMaximumMemory->setObjectName("name"); + m_jvmMaximumMemory->setAttribute(Qt::WA_MacShowFocusRect, 0); + + layout->addWidget(createFormLabel("JVM Maximum Memory"), row, QtProjectWizzardWindow::FRONT_COL, Qt::AlignRight); + layout->addWidget(m_jvmMaximumMemory, row, QtProjectWizzardWindow::BACK_COL); + + addHelpButton( + "Specify the maximum amount of memory that should be allocated by the indexer's JVM. A value of -1 ignores this setting." + , layout, row + ); + layout->setRowMinimumHeight(row, 30); + row++; // C/C++ layout->addWidget(createFormTitle("C/C++"), row, QtProjectWizzardWindow::FRONT_COL, Qt::AlignLeft); @@ -272,6 +288,8 @@ void QtProjectWizzardContentPreferences::load() { m_javaPath->setText(QString::fromStdString(appSettings->getJavaPath())); } + + m_jvmMaximumMemory->setText(QString::number(appSettings->getJavaMaximumMemory())); } void QtProjectWizzardContentPreferences::save() @@ -304,6 +322,9 @@ void QtProjectWizzardContentPreferences::save() { appSettings->setJavaPath(m_javaPath->getText().toStdString()); } + + int jvmMaximumMemory = m_jvmMaximumMemory->text().toInt(); + if (jvmMaximumMemory) appSettings->setJavaMaximumMemory(jvmMaximumMemory); } bool QtProjectWizzardContentPreferences::check() diff --git a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPreferences.h b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPreferences.h index 52a34a48..773b8225 100644 --- a/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPreferences.h +++ b/src/lib_gui/qt/window/project_wizzard/QtProjectWizzardContentPreferences.h @@ -53,6 +53,7 @@ private: std::shared_ptr m_javaPathDetector; QComboBox* m_javaPathDetectorBox; QtLocationPicker* m_javaPath; + QLineEdit* m_jvmMaximumMemory; }; #endif // QT_PROJECT_WIZZARD_CONTENT_PREFERENCES_H diff --git a/src/lib_java/data/parser/java/JavaEnvironmentFactory.cpp b/src/lib_java/data/parser/java/JavaEnvironmentFactory.cpp index 4a083c01..6fccad8c 100644 --- a/src/lib_java/data/parser/java/JavaEnvironmentFactory.cpp +++ b/src/lib_java/data/parser/java/JavaEnvironmentFactory.cpp @@ -42,18 +42,24 @@ void JavaEnvironmentFactory::createInstance(std::string classPath, std::string& s_classPath = classPath; + const int jvmMaximumMemory = ApplicationSettings::getInstance()->getJavaMaximumMemory(); + const int optionCount = (jvmMaximumMemory < 0 ? 2 : 3); + const std::string maximumMemoryOprionString = "-Xmx" + std::to_string(jvmMaximumMemory) + "m"; + JavaVM* jvm = nullptr; // Pointer to the JVM (Java Virtual Machine) JNIEnv* env = nullptr; // Pointer to native interface JavaVMInitArgs vm_args; // Initialization arguments - JavaVMOption* options = new JavaVMOption[3]; // JVM invocation options + JavaVMOption* options = new JavaVMOption[optionCount]; // JVM invocation options std::string classPathOption = "-Djava.class.path=" + classPath; options[0].optionString = const_cast(classPathOption.c_str()); options[1].optionString = const_cast("-Xms64m"); - std::string maximumMemoryOprionString = "-Xmx" + std::to_string(ApplicationSettings::getInstance()->getJavaMaximumMemory()) + "m"; - options[2].optionString = const_cast(maximumMemoryOprionString.c_str()); - vm_args.version = JNI_VERSION_1_6; - vm_args.nOptions = 3; + if (optionCount == 3) + { + options[2].optionString = const_cast(maximumMemoryOprionString.c_str()); + } + vm_args.version = JNI_VERSION_1_8; + vm_args.nOptions = optionCount; vm_args.options = options; vm_args.ignoreUnrecognized = false; // invalid options make the JVM init fail diff --git a/src/test/FileSystemTestSuite.h b/src/test/FileSystemTestSuite.h index 85d16239..bc4ee681 100644 --- a/src/test/FileSystemTestSuite.h +++ b/src/test/FileSystemTestSuite.h @@ -54,6 +54,7 @@ public: void test_find_file_infos() { +#ifndef _WIN32 std::vector extensions; extensions.push_back(".h"); extensions.push_back(".hpp"); @@ -67,10 +68,12 @@ public: TS_ASSERT_EQUALS(files.size(), 2); TS_ASSERT(isInFileInfos(files, "./data/FileSystemTestSuite/src/test.cpp")); TS_ASSERT(isInFileInfos(files, "./data/FileSystemTestSuite/src/test.h")); +#endif } void test_find_file_infos_with_symlinks() { +#ifndef _WIN32 std::vector extensions; extensions.push_back(".h"); extensions.push_back(".hpp"); @@ -87,6 +90,7 @@ public: TS_ASSERT(isInFileInfos(files, "./data/FileSystemTestSuite/src/main.cpp")); TS_ASSERT(isInFileInfos(files, "./data/FileSystemTestSuite/src/Settings/src/test.cpp")); TS_ASSERT(isInFileInfos(files, "./data/FileSystemTestSuite/src/Settings/src/test.h")); +#endif } void test_filesystem_finds_existing_files()