List<JavaSourceRootDescriptor> (@NotNull JpsModel model, @NotNull ModuleExcludeIndex index, @NotNull IgnoredFileIndex ignoredFileIndex, @NotNull BuildDataPaths dataPaths) { List<JavaSourceRootDescriptor> roots = new ArrayList<>(); JavaSourceRootType type = isTests() ? JavaSourceRootType.TEST_SOURCE : JavaSourceRootType.SOURCE; Iterable<ExcludedJavaSourceRootProvider> excludedRootProviders = JpsServiceManager.getInstance().getExtensions(ExcludedJavaSourceRootProvider.class); final JpsJavaCompilerConfiguration compilerConfig = JpsJavaExtensionService.getInstance().getCompilerConfiguration(myModule.getProject()); roots_loop: for (JpsTypedModuleSourceRoot<JavaSourceRootProperties> sourceRoot : myModule.getSourceRoots(type)) { if (index.isExcludedFromModule(sourceRoot.getFile(), myModule)) { continue; } for (ExcludedJavaSourceRootProvider provider : excludedRootProviders) { if (provider.isExcludedFromCompilation(myModule, sourceRoot)) { continue roots_loop; } } final String packagePrefix = sourceRoot.getProperties().getPackagePrefix(); // consider annotation processors output for generated sources, if contained under some source root Set<File> excludes = computeRootExcludes(sourceRoot.getFile(), index); final ProcessorConfigProfile profile = compilerConfig.getAnnotationProcessingProfile(myModule); if (profile.isEnabled()) { final File outputDir = ProjectPaths.getAnnotationProcessorGeneratedSourcesOutputDir(myModule, JavaSourceRootType.TEST_SOURCE == sourceRoot.getRootType(), profile); if (outputDir != null && FileUtil.isAncestor(sourceRoot.getFile(), outputDir, true)) { excludes = FileCollectionFactory.createCanonicalFileSet(excludes); excludes.add(outputDir); } } FileFilter filterForExcludedPatterns = index.getModuleFileFilterHonorExclusionPatterns(myModule); roots.add(new JavaSourceRootDescriptor(sourceRoot.getFile(), this, false, false, packagePrefix, excludes, filterForExcludedPatterns)); } return roots; }