Set<String> (Project project) { Set<String> rootsToWatch = new HashSet<>(); for (Module module : ModuleManager.getInstance(project).getModules()) { CompilerModuleExtension extension = CompilerModuleExtension.getInstance(module); if (extension != null && !extension.isCompilerOutputPathInherited()) { String outputUrl = extension.getCompilerOutputUrl(); if (outputUrl != null && outputUrl.startsWith(StandardFileSystems.FILE_PROTOCOL_PREFIX)) { rootsToWatch.add(ProjectRootManagerImpl.Companion.extractLocalPath(outputUrl)); } String testOutputUrl = extension.getCompilerOutputUrlForTests(); if (testOutputUrl!= null && testOutputUrl.startsWith(StandardFileSystems.FILE_PROTOCOL_PREFIX)) { rootsToWatch.add(ProjectRootManagerImpl.Companion.extractLocalPath(testOutputUrl)); } } // otherwise, the module output path is beneath the CompilerProjectExtension.getCompilerOutputUrl() which is added below } CompilerProjectExtension extension = CompilerProjectExtension.getInstance(project); if (extension != null) { String compilerOutputUrl = extension.getCompilerOutputUrl(); if (compilerOutputUrl != null && compilerOutputUrl.startsWith(StandardFileSystems.FILE_PROTOCOL_PREFIX)) { rootsToWatch.add(ProjectRootManagerImpl.Companion.extractLocalPath(compilerOutputUrl)); } } return rootsToWatch; }