bool LoadVMOptions() { TCHAR optionsFileName[_MAX_PATH]; if (LoadString(hInst, IDS_VM_OPTIONS_PATH, optionsFileName, _MAX_PATH-1)) { TCHAR fullOptionsFileName[_MAX_PATH]; ExpandEnvironmentStrings(optionsFileName, fullOptionsFileName, _MAX_PATH-1); if (GetFileAttributes(fullOptionsFileName) == INVALID_FILE_ATTRIBUTES) { GetModuleFileName(NULL, fullOptionsFileName, _MAX_PATH-1); _tcscat_s(fullOptionsFileName, _T(".vmoptions")); } std::vector<std::string> vmOptionLines; if (LoadVMOptionsFile(fullOptionsFileName, vmOptionLines)) { if (!AddClassPathOptions(vmOptionLines)) return false; AddPredefinedVMOptions(vmOptionLines); vmOptionCount = vmOptionLines.size(); vmOptions = (JavaVMOption*) malloc(vmOptionCount * sizeof(JavaVMOption)); for(int i=0; i<vmOptionLines.size(); i++) { vmOptions[i].optionString = _strdup(vmOptionLines[i].c_str()); vmOptions[i].extraInfo = 0; } return true; } } MessageBox(NULL, _T("Cannot find VM options file"), _T("Error launching IntelliJ Platform"), MB_OK); return false; }
//return VMOptions from one of the files in the following order: //$<IDE-NAME>_VM_OPTIONS //$CONFIG_DIRECTORY/<ide-name>[64][.exe].vmoptions //bin/<ide-name>[64][.exe].vmoptions bool FindValidVMOptions(std::vector<std::wstring> files, std::wstring& used, std::vector<std::string>& vmOptionLines) { if (files.size() != 0) { for (int i = 0; i < files.size(); i++) { if (GetFileAttributes(files[i].c_str()) != INVALID_FILE_ATTRIBUTES) { if (LoadVMOptionsFile(files[i].c_str(), vmOptionLines)) { used += (used.size() ? L"," : L"") + files[i]; return true; } } } } return false; }
bool LoadVMOptions() { TCHAR buffer[_MAX_PATH]; TCHAR copy[_MAX_PATH]; std::vector<std::wstring> files; GetModuleFileName(NULL, buffer, _MAX_PATH); std::wstring module(buffer); files.push_back(module + L".vmoptions"); if (LoadString(hInst, IDS_VM_OPTIONS_PATH, buffer, _MAX_PATH)) { ExpandEnvironmentStrings(buffer, copy, _MAX_PATH - 1); std::wstring selector(copy); files.push_back(selector + module.substr(module.find_last_of('\\')) + L".vmoptions"); } if (LoadString(hInst, IDS_VM_OPTIONS_ENV_VAR, buffer, _MAX_PATH)) { if (GetEnvironmentVariableW(buffer, copy, _MAX_PATH)) { ExpandEnvironmentStrings(copy, buffer, _MAX_PATH); files.push_back(std::wstring(buffer)); } } if (files.size() == 0) { std::string error = LoadStdString(IDS_ERROR_LAUNCHING_APP); MessageBoxA(NULL, "Cannot find VM options file", error.c_str(), MB_OK); return false; } std::wstring used; std::vector<std::string> vmOptionLines; for (int i = 0; i < files.size(); i++) { if (GetFileAttributes(files[i].c_str()) != INVALID_FILE_ATTRIBUTES) { if (LoadVMOptionsFile(files[i].c_str(), vmOptionLines)) { used += (used.size() ? L"," : L"") + files[i]; } } } vmOptionLines.push_back(std::string("-Djb.vmOptions=") + EncodeWideACP(used)); if (!AddClassPathOptions(vmOptionLines)) return false; AddPredefinedVMOptions(vmOptionLines); vmOptionCount = vmOptionLines.size(); vmOptions = (JavaVMOption*)malloc(vmOptionCount * sizeof(JavaVMOption)); for (int i = 0; i < vmOptionLines.size(); i++) { vmOptions[i].optionString = _strdup(vmOptionLines[i].c_str()); vmOptions[i].extraInfo = 0; } return true; }