diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/ModuleBuildTarget.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/ModuleBuildTarget.java index 05c185862399..8d3cd7931ebb 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/ModuleBuildTarget.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/ModuleBuildTarget.java @@ -18,6 +18,7 @@ package org.jetbrains.jps.incremental; import com.intellij.openapi.util.io.FileUtil; import com.intellij.util.Consumer; import com.intellij.util.SmartList; +import com.intellij.util.containers.ContainerUtil; import gnu.trove.THashSet; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -135,6 +136,7 @@ public final class ModuleBuildTarget extends JVMModuleBuildTarget excludedRootProviders = JpsServiceManager.getInstance().getExtensions(ExcludedJavaSourceRootProvider.class); final Set moduleExcludes = new THashSet(FileUtil.FILE_HASHING_STRATEGY); moduleExcludes.addAll(index.getModuleExcludes(myModule)); + final JpsJavaCompilerConfiguration compilerConfig = JpsJavaExtensionService.getInstance().getOrCreateCompilerConfiguration(myModule.getProject()); roots_loop: for (JpsTypedModuleSourceRoot sourceRoot : myModule.getSourceRoots(type)) { @@ -147,8 +149,19 @@ public final class ModuleBuildTarget extends JVMModuleBuildTarget 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 = ContainerUtil.newTroveSet(FileUtil.FILE_HASHING_STRATEGY, excludes); + excludes.add(outputDir); + } + } + + roots.add(new JavaSourceRootDescriptor(sourceRoot.getFile(), this, false, false, packagePrefix, excludes)); } return roots; } diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/fs/BuildFSState.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/fs/BuildFSState.java index b7caa0b575f7..7cd3b4685c4a 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/fs/BuildFSState.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/fs/BuildFSState.java @@ -138,11 +138,18 @@ public class BuildFSState { return false; } final CompileScope scope = context.getScope(); + final BuildRootIndex rootIndex = context.getProjectDescriptor().getBuildRootIndex(); try { delta.lockData(); for (Set files : delta.getSourcesToRecompile().values()) { + files_loop: for (File file : files) { if ((getEventRegistrationStamp(file) > targetBuildStart || FileSystemUtil.lastModified(file) > targetBuildStart) && scope.isAffected(target, file)) { + for (BuildRootDescriptor rd : rootIndex.findAllParentDescriptors(file, context)) { + if (rd.isGenerated()) { // do not send notification for generated sources + continue files_loop; + } + } return true; } }