From 380cb9ce8b698f3a06d2c7b2d35b02e5df211d25 Mon Sep 17 00:00:00 2001 From: Eugene Zhuravlev Date: Wed, 17 Feb 2016 14:07:22 +0100 Subject: [PATCH] 1. ignore generated sources when sending 'unprocessed_sources' event 2. for java modules build target always exclude annotation processors src outputs from source roots --- .../jps/incremental/ModuleBuildTarget.java | 17 +++++++++++++++-- .../jps/incremental/fs/BuildFSState.java | 7 +++++++ 2 files changed, 22 insertions(+), 2 deletions(-) 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; } }