@NotNull @Override public Collection<String> suggestHomePaths() { if (!SystemInfo.isWindows) return Collections.singletonList(suggestHomePath()); String property = System.getProperty("java.home"); if (property == null) return Collections.emptyList(); File javaHome = new File(property).getParentFile(); // actually java.home points to to jre home if (javaHome == null || !javaHome.isDirectory() || javaHome.getParentFile() == null) { return Collections.emptyList(); } ArrayList<String> result = new ArrayList<>(); File javasFolder = javaHome.getParentFile(); scanFolder(javasFolder, result); File parentFile = javasFolder.getParentFile(); File root = parentFile != null ? parentFile.getParentFile() : null; String name = parentFile != null ? parentFile.getName() : ""; if (name.contains("Program Files") && root != null) { String x86Suffix = " (x86)"; boolean x86 = name.endsWith(x86Suffix) && name.length() > x86Suffix.length(); File anotherJavasFolder; if (x86) { anotherJavasFolder = new File(root, name.substring(0, name.length() - x86Suffix.length())); } else { anotherJavasFolder = new File(root, name + x86Suffix); } if (anotherJavasFolder.isDirectory()) { scanFolder(new File(anotherJavasFolder, javasFolder.getName()), result); } } return result; }
public void testGetAttributesConvertsToAbsolute() throws Exception { PersistentFS fs = PersistentFS.getInstance(); LocalFileSystem lfs = LocalFileSystem.getInstance(); NewVirtualFile fakeRoot = fs.findRoot("", lfs); assertNotNull(fakeRoot); File userDir = new File(System.getProperty("user.dir")); File[] files = userDir.listFiles(); File fileToQuery; if (files != null && files.length != 0) { fileToQuery = files[0]; } else if (userDir.isDirectory()) { fileToQuery = FileUtil.createTempFile(userDir, getTestName(false), "", true); myFilesToDelete.add(fileToQuery); } else { // can't test return; } FileAttributes attributes = lfs.getAttributes(new FakeVirtualFile(fakeRoot, fileToQuery.getName())); assertNull(attributes); attributes = lfs.getAttributes(new FakeVirtualFile(fakeRoot, "windows")); assertNull(attributes); attributes = lfs.getAttributes(new FakeVirtualFile(fakeRoot, "usr")); assertNull(attributes); attributes = lfs.getAttributes(new FakeVirtualFile(fakeRoot, "Users")); assertNull(attributes); }
private static int computeLoadedFileSize() { int result = (int) PersistentFSConstants.FILE_LENGTH_TO_CACHE_THRESHOLD; final String userLimitKb = System.getProperty(MAX_VCS_LOADED_SIZE_KB); try { return userLimitKb != null ? Math.min(Integer.parseInt(userLimitKb) * 1024, result) : result; } catch (NumberFormatException ignored) { return result; } }
@Override public String suggestHomePath() { if (SystemInfo.isMac) { if (new File("/usr/libexec/java_home").canExecute()) { String path = ExecUtil.execAndReadLine(new GeneralCommandLine("/usr/libexec/java_home")); if (path != null && new File(path).isDirectory()) { return path; } } String home = checkKnownLocations( "/Library/Java/JavaVirtualMachines", "/System/Library/Java/JavaVirtualMachines"); if (home != null) return home; } if (SystemInfo.isLinux) { String home = checkKnownLocations("/usr/java", "/opt/java", "/usr/lib/jvm"); if (home != null) return home; } if (SystemInfo.isSolaris) { String home = checkKnownLocations("/usr/jdk"); if (home != null) return home; } String property = System.getProperty("java.home"); if (property != null) { File javaHome = new File(property); if (javaHome.getName().equals("jre")) { javaHome = javaHome.getParentFile(); } if (javaHome != null && javaHome.isDirectory()) { return javaHome.getAbsolutePath(); } } return null; }
private Process launchBuildProcess(Project project, final int port, final UUID sessionId) throws ExecutionException { // choosing sdk with which the build process should be run final Sdk internalJdk = JavaAwareProjectJdkTableImpl.getInstanceEx().getInternalJdk(); Sdk projectJdk = internalJdk; final String versionString = projectJdk.getVersionString(); JavaSdkVersion sdkVersion = versionString != null ? ((JavaSdk) projectJdk.getSdkType()).getVersion(versionString) : null; if (sdkVersion != null) { final Set<Sdk> candidates = new HashSet<Sdk>(); for (Module module : ModuleManager.getInstance(project).getModules()) { final Sdk sdk = ModuleRootManager.getInstance(module).getSdk(); if (sdk != null && sdk.getSdkType() instanceof JavaSdk) { candidates.add(sdk); } } // now select the latest version from the sdks that are used in the project, but not older // than the internal sdk version for (Sdk candidate : candidates) { final String vs = candidate.getVersionString(); if (vs != null) { final JavaSdkVersion candidateVersion = ((JavaSdk) candidate.getSdkType()).getVersion(vs); if (candidateVersion != null) { if (candidateVersion.compareTo(sdkVersion) > 0) { sdkVersion = candidateVersion; projectJdk = candidate; } } } } } // validate tools.jar presence final File compilerPath; if (projectJdk.equals(internalJdk)) { final JavaCompiler systemCompiler = ToolProvider.getSystemJavaCompiler(); if (systemCompiler == null) { throw new ExecutionException( "No system java compiler is provided by the JRE. Make sure tools.jar is present in IntelliJ IDEA classpath."); } compilerPath = ClasspathBootstrap.getResourcePath(systemCompiler.getClass()); } else { final String path = ((JavaSdk) projectJdk.getSdkType()).getToolsPath(projectJdk); if (path == null) { throw new ExecutionException( "Cannot determine path to 'tools.jar' library for " + projectJdk.getName() + " (" + projectJdk.getHomePath() + ")"); } compilerPath = new File(path); } final GeneralCommandLine cmdLine = new GeneralCommandLine(); final String vmExecutablePath = ((JavaSdkType) projectJdk.getSdkType()).getVMExecutablePath(projectJdk); cmdLine.setExePath(vmExecutablePath); cmdLine.addParameter("-XX:MaxPermSize=150m"); cmdLine.addParameter("-XX:ReservedCodeCacheSize=64m"); final int heapSize = Registry.intValue("compiler.process.heap.size"); final int xms = heapSize / 2; if (xms > 32) { cmdLine.addParameter("-Xms" + xms + "m"); } cmdLine.addParameter("-Xmx" + heapSize + "m"); if (SystemInfo.isMac && sdkVersion != null && JavaSdkVersion.JDK_1_6.equals(sdkVersion) && Registry.is("compiler.process.32bit.vm.on.mac")) { // unfortunately -d32 is supported on jdk 1.6 only cmdLine.addParameter("-d32"); } cmdLine.addParameter("-Djava.awt.headless=true"); final String shouldGenerateIndex = System.getProperty(GlobalOptions.GENERATE_CLASSPATH_INDEX_OPTION); if (shouldGenerateIndex != null) { cmdLine.addParameter( "-D" + GlobalOptions.GENERATE_CLASSPATH_INDEX_OPTION + "=" + shouldGenerateIndex); } final String additionalOptions = Registry.stringValue("compiler.process.vm.options"); if (!StringUtil.isEmpty(additionalOptions)) { final StringTokenizer tokenizer = new StringTokenizer(additionalOptions, " ", false); while (tokenizer.hasMoreTokens()) { cmdLine.addParameter(tokenizer.nextToken()); } } // debugging final int debugPort = Registry.intValue("compiler.process.debug.port"); if (debugPort > 0) { cmdLine.addParameter("-XX:+HeapDumpOnOutOfMemoryError"); cmdLine.addParameter( "-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=" + debugPort); } if (Registry.is("compiler.process.use.memory.temp.cache")) { cmdLine.addParameter("-D" + GlobalOptions.USE_MEMORY_TEMP_CACHE_OPTION); } if (Registry.is("compiler.process.use.external.javac")) { cmdLine.addParameter("-D" + GlobalOptions.USE_EXTERNAL_JAVAC_OPTION); } final String host = NetUtils.getLocalHostString(); cmdLine.addParameter("-D" + GlobalOptions.HOSTNAME_OPTION + "=" + host); // javac's VM should use the same default locale that IDEA uses in order for javac to print // messages in 'correct' language final String lang = System.getProperty("user.language"); if (lang != null) { //noinspection HardCodedStringLiteral cmdLine.addParameter("-Duser.language=" + lang); } final String country = System.getProperty("user.country"); if (country != null) { //noinspection HardCodedStringLiteral cmdLine.addParameter("-Duser.country=" + country); } //noinspection HardCodedStringLiteral final String region = System.getProperty("user.region"); if (region != null) { //noinspection HardCodedStringLiteral cmdLine.addParameter("-Duser.region=" + region); } cmdLine.addParameter("-classpath"); final List<File> cp = ClasspathBootstrap.getBuildProcessApplicationClasspath(); cp.add(compilerPath); cp.addAll(myClasspathManager.getCompileServerPluginsClasspath()); cmdLine.addParameter(classpathToString(cp)); cmdLine.addParameter(BuildMain.class.getName()); cmdLine.addParameter(host); cmdLine.addParameter(Integer.toString(port)); cmdLine.addParameter(sessionId.toString()); final File workDirectory = new File(mySystemDirectory, SYSTEM_ROOT); workDirectory.mkdirs(); ensureLogConfigExists(workDirectory); cmdLine.addParameter(FileUtil.toSystemIndependentName(workDirectory.getPath())); cmdLine.setWorkDirectory(workDirectory); return cmdLine.createProcess(); }