From 5bfd96ed0d165a583defcc26c6e46d801b45d01e Mon Sep 17 00:00:00 2001 From: nik Date: Fri, 12 Oct 2012 15:44:34 +0400 Subject: [PATCH] external compiler: added interface for registering src-to-output mapping, build logging generalized --- .../jps/builders/BuildOutputConsumer.java | 11 ++++ .../logging/ProjectBuilderLoggerBase.java | 48 ++++++++++++++ .../logging/ProjectBuilderLoggerImpl.java | 20 ++++++ .../logging}/BuildLoggingManager.java | 17 ++--- .../logging/ProjectBuilderLogger.java | 17 +++++ .../jetbrains/jps/cmdline/BuildRunner.java | 1 + .../jps/cmdline/ProjectDescriptor.java | 2 +- .../jps/incremental/CompileContext.java | 1 + .../jps/incremental/CompileContextImpl.java | 1 + .../jps/incremental/FSOperations.java | 7 ++- .../jps/incremental/IncProjectBuilder.java | 63 ++++++++++++++----- .../jps/incremental/ProjectBuilderLogger.java | 11 ---- .../incremental/ProjectBuilderLoggerImpl.java | 38 ----------- .../jps/incremental/TargetBuilder.java | 9 +-- .../artifacts/ArtifactSourceFilesState.java | 7 +-- .../artifacts/IncArtifactBuilder.java | 5 +- .../jps/incremental/java/JavaBuilder.java | 21 ++----- .../incremental/java/JavaBuilderLogger.java | 9 --- .../java/JavaBuilderLoggerImpl.java | 20 ------ .../incremental/storage/BuildDataManager.java | 3 +- .../data/b.txt | 0 .../jetbrains/ether/IncrementalTestCase.java | 42 +++---------- .../jps/builders/JpsBuildTestCase.java | 1 + .../artifacts/ArtifactBuilderTestCase.java | 7 +-- .../jps/android/AndroidDexBuilder.java | 7 ++- .../jps/android/AndroidPackagingBuilder.java | 7 ++- 26 files changed, 192 insertions(+), 183 deletions(-) create mode 100644 jps/jps-builders/src/org/jetbrains/jps/builders/BuildOutputConsumer.java create mode 100644 jps/jps-builders/src/org/jetbrains/jps/builders/impl/logging/ProjectBuilderLoggerBase.java create mode 100644 jps/jps-builders/src/org/jetbrains/jps/builders/impl/logging/ProjectBuilderLoggerImpl.java rename jps/jps-builders/src/org/jetbrains/jps/{incremental => builders/logging}/BuildLoggingManager.java (63%) create mode 100644 jps/jps-builders/src/org/jetbrains/jps/builders/logging/ProjectBuilderLogger.java delete mode 100644 jps/jps-builders/src/org/jetbrains/jps/incremental/ProjectBuilderLogger.java delete mode 100644 jps/jps-builders/src/org/jetbrains/jps/incremental/ProjectBuilderLoggerImpl.java delete mode 100644 jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilderLogger.java delete mode 100644 jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilderLoggerImpl.java delete mode 100644 jps/jps-builders/testData/output/artifactIncludesArchiveArtifact/data/b.txt diff --git a/jps/jps-builders/src/org/jetbrains/jps/builders/BuildOutputConsumer.java b/jps/jps-builders/src/org/jetbrains/jps/builders/BuildOutputConsumer.java new file mode 100644 index 000000000000..a1c290e74903 --- /dev/null +++ b/jps/jps-builders/src/org/jetbrains/jps/builders/BuildOutputConsumer.java @@ -0,0 +1,11 @@ +package org.jetbrains.jps.builders; + +import java.io.IOException; +import java.util.Collection; + +/** + * @author nik + */ +public interface BuildOutputConsumer { + void registerOutputFile(String outputFilePath, Collection sourceFiles) throws IOException; +} diff --git a/jps/jps-builders/src/org/jetbrains/jps/builders/impl/logging/ProjectBuilderLoggerBase.java b/jps/jps-builders/src/org/jetbrains/jps/builders/impl/logging/ProjectBuilderLoggerBase.java new file mode 100644 index 000000000000..3fcbe62d5a1a --- /dev/null +++ b/jps/jps-builders/src/org/jetbrains/jps/builders/impl/logging/ProjectBuilderLoggerBase.java @@ -0,0 +1,48 @@ +package org.jetbrains.jps.builders.impl.logging; + +import com.intellij.openapi.util.io.FileUtil; +import org.jetbrains.jps.builders.logging.ProjectBuilderLogger; + +import java.io.File; +import java.io.IOException; +import java.util.Arrays; +import java.util.Collection; +import java.util.Set; + +/** + * @author nik + */ +public abstract class ProjectBuilderLoggerBase implements ProjectBuilderLogger { + @Override + public void logDeletedFiles(Collection outputs) { + if (outputs.isEmpty()) return; + final String[] buffer = new String[outputs.size()]; + int i = 0; + for (final String o : outputs) { + buffer[i++] = o; + } + Arrays.sort(buffer); + logLine("Cleaning output files:"); + for (final String o : buffer) { + logLine(o); + } + logLine("End of files"); + } + + @Override + public void logCompiledFiles(Set files, String builderName, final String description) throws IOException { + logLine(description); + final String[] buffer = new String[files.size()]; + int i = 0; + for (final File f : files) { + buffer[i++] = FileUtil.toSystemIndependentName(f.getCanonicalPath()); + } + Arrays.sort(buffer); + for (final String s : buffer) { + logLine(s); + } + logLine("End of files"); + } + + protected abstract void logLine(String message); +} diff --git a/jps/jps-builders/src/org/jetbrains/jps/builders/impl/logging/ProjectBuilderLoggerImpl.java b/jps/jps-builders/src/org/jetbrains/jps/builders/impl/logging/ProjectBuilderLoggerImpl.java new file mode 100644 index 000000000000..7bce8fe56b39 --- /dev/null +++ b/jps/jps-builders/src/org/jetbrains/jps/builders/impl/logging/ProjectBuilderLoggerImpl.java @@ -0,0 +1,20 @@ +package org.jetbrains.jps.builders.impl.logging; + +import com.intellij.openapi.diagnostic.Logger; + +/** + * @author nik + */ +public class ProjectBuilderLoggerImpl extends ProjectBuilderLoggerBase { + private static final Logger LOG = Logger.getInstance(ProjectBuilderLoggerImpl.class); + + @Override + public boolean isEnabled() { + return LOG.isDebugEnabled(); + } + + @Override + protected void logLine(final String message) { + LOG.debug(message); + } +} diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/BuildLoggingManager.java b/jps/jps-builders/src/org/jetbrains/jps/builders/logging/BuildLoggingManager.java similarity index 63% rename from jps/jps-builders/src/org/jetbrains/jps/incremental/BuildLoggingManager.java rename to jps/jps-builders/src/org/jetbrains/jps/builders/logging/BuildLoggingManager.java index b57023012cae..267efc22454d 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/BuildLoggingManager.java +++ b/jps/jps-builders/src/org/jetbrains/jps/builders/logging/BuildLoggingManager.java @@ -1,24 +1,22 @@ -package org.jetbrains.jps.incremental; +package org.jetbrains.jps.builders.logging; import org.jetbrains.annotations.NotNull; +import org.jetbrains.jps.builders.impl.logging.ProjectBuilderLoggerImpl; import org.jetbrains.jps.incremental.artifacts.ArtifactBuilderLogger; import org.jetbrains.jps.incremental.artifacts.ArtifactBuilderLoggerImpl; -import org.jetbrains.jps.incremental.java.JavaBuilderLogger; -import org.jetbrains.jps.incremental.java.JavaBuilderLoggerImpl; /** * @author nik */ public class BuildLoggingManager { - public static final BuildLoggingManager DEFAULT = new BuildLoggingManager(new ArtifactBuilderLoggerImpl(), new JavaBuilderLoggerImpl(), + public static final BuildLoggingManager DEFAULT = new BuildLoggingManager(new ArtifactBuilderLoggerImpl(), new ProjectBuilderLoggerImpl()); private ArtifactBuilderLogger myArtifactBuilderLogger; - private JavaBuilderLogger myJavaBuilderLogger; private final ProjectBuilderLogger myProjectLogger; - public BuildLoggingManager(@NotNull ArtifactBuilderLogger artifactBuilderLogger, @NotNull JavaBuilderLogger logger, @NotNull ProjectBuilderLogger projectLogger) { + public BuildLoggingManager(@NotNull ArtifactBuilderLogger artifactBuilderLogger, + @NotNull ProjectBuilderLogger projectLogger) { myArtifactBuilderLogger = artifactBuilderLogger; - myJavaBuilderLogger = logger; myProjectLogger = projectLogger; } @@ -27,11 +25,6 @@ public class BuildLoggingManager { return myArtifactBuilderLogger; } - @NotNull - public JavaBuilderLogger getJavaBuilderLogger() { - return myJavaBuilderLogger; - } - @NotNull public ProjectBuilderLogger getProjectBuilderLogger() { return myProjectLogger; diff --git a/jps/jps-builders/src/org/jetbrains/jps/builders/logging/ProjectBuilderLogger.java b/jps/jps-builders/src/org/jetbrains/jps/builders/logging/ProjectBuilderLogger.java new file mode 100644 index 000000000000..db217f9c7818 --- /dev/null +++ b/jps/jps-builders/src/org/jetbrains/jps/builders/logging/ProjectBuilderLogger.java @@ -0,0 +1,17 @@ +package org.jetbrains.jps.builders.logging; + +import java.io.File; +import java.io.IOException; +import java.util.Collection; +import java.util.Set; + +/** + * @author nik + */ +public interface ProjectBuilderLogger { + boolean isEnabled(); + + void logDeletedFiles(Collection paths); + + void logCompiledFiles(Set files, String builderName, String description) throws IOException; +} diff --git a/jps/jps-builders/src/org/jetbrains/jps/cmdline/BuildRunner.java b/jps/jps-builders/src/org/jetbrains/jps/cmdline/BuildRunner.java index 28d397acd634..c5f7c9d4e979 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/cmdline/BuildRunner.java +++ b/jps/jps-builders/src/org/jetbrains/jps/cmdline/BuildRunner.java @@ -15,6 +15,7 @@ import org.jetbrains.jps.builders.impl.BuildDataPathsImpl; import org.jetbrains.jps.builders.impl.BuildRootIndexImpl; import org.jetbrains.jps.builders.impl.BuildTargetIndexImpl; import org.jetbrains.jps.builders.java.dependencyView.Callbacks; +import org.jetbrains.jps.builders.logging.BuildLoggingManager; import org.jetbrains.jps.builders.storage.BuildDataPaths; import org.jetbrains.jps.incremental.*; import org.jetbrains.jps.incremental.fs.BuildFSState; diff --git a/jps/jps-builders/src/org/jetbrains/jps/cmdline/ProjectDescriptor.java b/jps/jps-builders/src/org/jetbrains/jps/cmdline/ProjectDescriptor.java index 7454ac156ea5..098aeaf3a3a6 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/cmdline/ProjectDescriptor.java +++ b/jps/jps-builders/src/org/jetbrains/jps/cmdline/ProjectDescriptor.java @@ -2,7 +2,7 @@ package org.jetbrains.jps.cmdline; import org.jetbrains.jps.builders.BuildRootIndex; import org.jetbrains.jps.builders.BuildTargetIndex; -import org.jetbrains.jps.incremental.BuildLoggingManager; +import org.jetbrains.jps.builders.logging.BuildLoggingManager; import org.jetbrains.jps.incremental.CompilerEncodingConfiguration; import org.jetbrains.jps.incremental.fs.BuildFSState; import org.jetbrains.jps.incremental.storage.BuildDataManager; diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/CompileContext.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/CompileContext.java index 3dd40df94d5b..1c559f9da881 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/CompileContext.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/CompileContext.java @@ -6,6 +6,7 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.jps.ModuleChunk; import org.jetbrains.jps.ProjectPaths; import org.jetbrains.jps.api.CanceledStatus; +import org.jetbrains.jps.builders.logging.BuildLoggingManager; import org.jetbrains.jps.cmdline.ProjectDescriptor; import org.jetbrains.jps.model.java.compiler.ProcessorConfigProfile; import org.jetbrains.jps.model.module.JpsModule; diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/CompileContextImpl.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/CompileContextImpl.java index 9acb359678eb..853fa414bfe4 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/CompileContextImpl.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/CompileContextImpl.java @@ -8,6 +8,7 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.jps.*; import org.jetbrains.jps.api.CanceledStatus; import org.jetbrains.jps.builders.java.JavaModuleBuildTargetType; +import org.jetbrains.jps.builders.logging.BuildLoggingManager; import org.jetbrains.jps.cmdline.ProjectDescriptor; import org.jetbrains.jps.incremental.messages.BuildMessage; import org.jetbrains.jps.incremental.messages.FileDeletedEvent; diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/FSOperations.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/FSOperations.java index 05b519556582..3ddcc71ab079 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/FSOperations.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/FSOperations.java @@ -22,6 +22,7 @@ import org.jetbrains.jps.model.module.JpsModule; import java.io.File; import java.io.IOException; +import java.util.Collections; import java.util.HashSet; import java.util.Set; @@ -128,12 +129,12 @@ public class FSOperations { } static void markDirtyFiles(CompileContext context, - ModuleBuildTarget target, + BuildTarget target, Timestamps timestamps, boolean forceMarkDirty, @Nullable THashSet currentFiles) throws IOException { final ModuleExcludeIndex rootsIndex = context.getProjectDescriptor().getModuleExcludeIndex(); - markDirtyFiles(context, target, timestamps, forceMarkDirty, currentFiles, - new HashSet(rootsIndex.getModuleExcludes(target.getModule()))); + Set excludes = target instanceof ModuleBuildTarget ? new HashSet(rootsIndex.getModuleExcludes(((ModuleBuildTarget)target).getModule())) : Collections.emptySet(); + markDirtyFiles(context, target, timestamps, forceMarkDirty, currentFiles, excludes); } static void markDirtyFiles(CompileContext context, BuildTarget target, Timestamps timestamps, boolean forceMarkDirty, @Nullable THashSet currentFiles, final Set excludes) throws IOException { diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/IncProjectBuilder.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/IncProjectBuilder.java index 9d535ea6c616..6a4837db0175 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/IncProjectBuilder.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/IncProjectBuilder.java @@ -25,6 +25,7 @@ import org.jetbrains.jps.builders.java.JavaBuilderUtil; import org.jetbrains.jps.builders.java.JavaModuleBuildTargetType; import org.jetbrains.jps.builders.java.JavaSourceRootDescriptor; import org.jetbrains.jps.builders.java.dependencyView.Callbacks; +import org.jetbrains.jps.builders.logging.ProjectBuilderLogger; import org.jetbrains.jps.builders.storage.SourceToOutputMapping; import org.jetbrains.jps.cmdline.BuildRunner; import org.jetbrains.jps.cmdline.ProjectDescriptor; @@ -525,8 +526,7 @@ public class IncProjectBuilder { BuildTarget target = targets.iterator().next(); if (target instanceof ModuleBuildTarget) { - ModuleBuildTarget moduleBuildTarget = (ModuleBuildTarget)target; - return runModuleLevelBuilders(context, new ModuleChunk(Collections.singleton(moduleBuildTarget))); + return runModuleLevelBuilders(context, new ModuleChunk(Collections.singleton((ModuleBuildTarget)target))); } else { try { @@ -563,7 +563,9 @@ public class IncProjectBuilder { } }; //noinspection unchecked - ((TargetBuilder)builder).build(target, context, holder); + BuildOutputConsumerImpl outputConsumer = new BuildOutputConsumerImpl(target, context); + ((TargetBuilder)builder).build(target, holder, outputConsumer, context); + outputConsumer.fireFileGeneratedEvent(); context.checkCanceled(); } } @@ -757,9 +759,7 @@ public class IncProjectBuilder { FSOperations.processFilesToRecompile(context, chunk, processor); } }; - if (!context.isProjectRebuild()) { - deleteOutputsOfDirtyFiles(context, dirtyFilesHolder); - } + deleteOutputsOfDirtyFiles(context, dirtyFilesHolder); BUILDER_CATEGORY_LOOP: for (BuilderCategory category : BuilderCategory.values()) { @@ -833,6 +833,10 @@ public class IncProjectBuilder { private static > void deleteOutputsOfDirtyFiles(final CompileContext context, DirtyFilesHolder dirtyFilesHolder) throws ProjectBuildException { + if (context.isProjectRebuild()) { + return; + } + final BuildDataManager dataManager = context.getProjectDescriptor().dataManager; try { ProjectBuilderLogger logger = context.getLoggingManager().getProjectBuilderLogger(); @@ -958,13 +962,12 @@ public class IncProjectBuilder { final Timestamps timestamps = pd.timestamps.getStorage(); final BuildTargetConfiguration configuration = pd.getTargetsState().getTargetConfiguration(target); if (context.isProjectRebuild() || configuration.isTargetDirty() || context.getScope().isRecompilationForced(target)) { + clearOutputFiles(context, target); FSOperations.markDirtyFiles(context, target, timestamps, true, null, Collections.emptySet()); configuration.save(); } - else if (context.isMake()) { - if (pd.fsState.markInitialScanPerformed(target)) { - FSOperations.markDirtyFiles(context, target, timestamps, false, null, Collections.emptySet()); - } + else if (pd.fsState.markInitialScanPerformed(target)) { + FSOperations.markDirtyFiles(context, target, timestamps, false, null, Collections.emptySet()); } } @@ -992,19 +995,21 @@ public class IncProjectBuilder { forceMarkDirty = true; } } - initModuleFSState(context, target, forceMarkDirty); + initTargetFSState(context, target, forceMarkDirty); + updateOutputRootsLayout(context, target); } } else { // forced compilation mode if (context.getScope().isRecompilationForced(target)) { - initModuleFSState(context, target, true); + initTargetFSState(context, target, true); + updateOutputRootsLayout(context, target); } } } } - private static void initModuleFSState(CompileContext context, ModuleBuildTarget target, final boolean forceMarkDirty) throws IOException { + private static void initTargetFSState(CompileContext context, BuildTarget target, final boolean forceMarkDirty) throws IOException { final ProjectDescriptor pd = context.getProjectDescriptor(); final Timestamps timestamps = pd.timestamps.getStorage(); final THashSet currentFiles = new THashSet(FileUtil.FILE_HASHING_STRATEGY); @@ -1022,8 +1027,6 @@ public class IncProjectBuilder { fsState.registerDeleted(target, file, timestamps); } } - - updateOutputRootsLayout(context, target); } private static void updateOutputRootsLayout(CompileContext context, ModuleBuildTarget target) throws IOException { @@ -1119,4 +1122,34 @@ public class IncProjectBuilder { }); } + private static class BuildOutputConsumerImpl implements BuildOutputConsumer { + private final BuildTarget myTarget; + private final CompileContext myContext; + private FileGeneratedEvent myFileGeneratedEvent; + private File myOutputDir; + + public BuildOutputConsumerImpl(BuildTarget target, CompileContext context) { + myTarget = target; + myContext = context; + myFileGeneratedEvent = new FileGeneratedEvent(); + myOutputDir = myTarget.getOutputDir(myContext.getProjectDescriptor().dataManager.getDataPaths()); + } + + @Override + public void registerOutputFile(String outputFilePath, Collection sourceFiles) throws IOException { + String relativePath = FileUtil.getRelativePath(myOutputDir, new File(outputFilePath)); + if (myOutputDir != null && relativePath != null) { + myFileGeneratedEvent.add(myOutputDir.getAbsolutePath(), relativePath); + } + for (String sourceFile : sourceFiles) { + myContext.getProjectDescriptor().dataManager.getSourceToOutputMap(myTarget).appendOutput(sourceFile, outputFilePath); + } + } + + public void fireFileGeneratedEvent() { + if (!myFileGeneratedEvent.getPaths().isEmpty()) { + myContext.processMessage(myFileGeneratedEvent); + } + } + } } diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/ProjectBuilderLogger.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/ProjectBuilderLogger.java deleted file mode 100644 index d9883375c79b..000000000000 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/ProjectBuilderLogger.java +++ /dev/null @@ -1,11 +0,0 @@ -package org.jetbrains.jps.incremental; - -import java.util.Collection; - -/** - * @author nik - */ -public interface ProjectBuilderLogger { - boolean isEnabled(); - void logDeletedFiles(Collection paths); -} diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/ProjectBuilderLoggerImpl.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/ProjectBuilderLoggerImpl.java deleted file mode 100644 index bfb94564f9aa..000000000000 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/ProjectBuilderLoggerImpl.java +++ /dev/null @@ -1,38 +0,0 @@ -package org.jetbrains.jps.incremental; - -import com.intellij.openapi.diagnostic.Logger; - -import java.util.Arrays; -import java.util.Collection; - -/** - * @author nik - */ -public class ProjectBuilderLoggerImpl implements ProjectBuilderLogger { - private static final Logger LOG = Logger.getInstance(ProjectBuilderLoggerImpl.class); - - @Override - public boolean isEnabled() { - return LOG.isDebugEnabled(); - } - - @Override - public void logDeletedFiles(Collection outputs) { - if (outputs.isEmpty()) return; - final String[] buffer = new String[outputs.size()]; - int i = 0; - for (final String o : outputs) { - buffer[i++] = o; - } - Arrays.sort(buffer); - logLine("Cleaning output files:"); - for (final String o : buffer) { - logLine(o); - } - logLine("End of files"); - } - - protected void logLine(final String message) { - LOG.debug(message); - } -} diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/TargetBuilder.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/TargetBuilder.java index 7fea04440365..c3b7c2f58251 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/TargetBuilder.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/TargetBuilder.java @@ -1,10 +1,7 @@ package org.jetbrains.jps.incremental; import org.jetbrains.annotations.NotNull; -import org.jetbrains.jps.builders.BuildRootDescriptor; -import org.jetbrains.jps.builders.BuildTarget; -import org.jetbrains.jps.builders.BuildTargetType; -import org.jetbrains.jps.builders.DirtyFilesHolder; +import org.jetbrains.jps.builders.*; import java.io.IOException; import java.util.Collection; @@ -24,7 +21,7 @@ public abstract class TargetBuilder holder) - throws ProjectBuildException, IOException; + public abstract void build(@NotNull T target, @NotNull DirtyFilesHolder holder, @NotNull BuildOutputConsumer outputConsumer, + @NotNull CompileContext context) throws ProjectBuildException, IOException; } diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/artifacts/ArtifactSourceFilesState.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/artifacts/ArtifactSourceFilesState.java index b3fd9e9345f3..50235786941c 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/artifacts/ArtifactSourceFilesState.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/artifacts/ArtifactSourceFilesState.java @@ -11,10 +11,7 @@ import org.jetbrains.jps.incremental.IncProjectBuilder; import org.jetbrains.jps.incremental.artifacts.instructions.ArtifactRootDescriptor; import org.jetbrains.jps.incremental.artifacts.instructions.SourceFileFilter; import org.jetbrains.jps.incremental.fs.BuildFSState; -import org.jetbrains.jps.incremental.storage.BuildDataManager; -import org.jetbrains.jps.incremental.storage.BuildTargetConfiguration; -import org.jetbrains.jps.incremental.storage.CompositeStorageOwner; -import org.jetbrains.jps.incremental.storage.StorageOwner; +import org.jetbrains.jps.incremental.storage.*; import java.io.File; import java.io.IOException; @@ -58,7 +55,7 @@ public class ArtifactSourceFilesState extends CompositeStorageOwner { BuildTargetConfiguration configuration = myProjectDescriptor.getTargetsState().getTargetConfiguration(myTarget); if (context.isProjectRebuild() || configuration.isTargetDirty() || context.getScope().isRecompilationForced(myTarget)) { IncProjectBuilder.clearOutputFiles(context, myTarget); - myProjectDescriptor.dataManager.getSourceToOutputMap(myTarget).clean(); + ((SourceToOutputMappingImpl)myProjectDescriptor.dataManager.getSourceToOutputMap(myTarget)).clean(); getOrCreateOutSrcMapping().clean(); markDirtyFiles(dataManager, null, true, context); configuration.save(); diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/artifacts/IncArtifactBuilder.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/artifacts/IncArtifactBuilder.java index b8dfb4705efd..f758babfe166 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/artifacts/IncArtifactBuilder.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/artifacts/IncArtifactBuilder.java @@ -7,6 +7,7 @@ import com.intellij.util.containers.MultiMap; import gnu.trove.THashSet; import gnu.trove.TIntObjectHashMap; import org.jetbrains.annotations.NotNull; +import org.jetbrains.jps.builders.BuildOutputConsumer; import org.jetbrains.jps.builders.BuildRootDescriptor; import org.jetbrains.jps.builders.BuildRootIndex; import org.jetbrains.jps.builders.DirtyFilesHolder; @@ -38,8 +39,8 @@ public class IncArtifactBuilder extends TargetBuilder holder) throws ProjectBuildException { + @NotNull DirtyFilesHolder holder, + @NotNull BuildOutputConsumer outputConsumer, @NotNull CompileContext context) throws ProjectBuildException { JpsArtifact artifact = target.getArtifact(); if (StringUtil.isEmpty(artifact.getOutputPath())) { context.processMessage(new CompilerMessage(BUILDER_NAME, BuildMessage.Kind.ERROR, "Cannot build '" + artifact.getName() + "' artifact: output path is not specified")); diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilder.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilder.java index d17bb14d22b8..dca1ab40671d 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilder.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilder.java @@ -38,6 +38,7 @@ import org.jetbrains.jps.builders.java.JavaBuilderUtil; import org.jetbrains.jps.builders.java.JavaSourceRootDescriptor; import org.jetbrains.jps.builders.java.dependencyView.Callbacks; import org.jetbrains.jps.builders.java.dependencyView.Mappings; +import org.jetbrains.jps.builders.logging.ProjectBuilderLogger; import org.jetbrains.jps.cmdline.ProjectDescriptor; import org.jetbrains.jps.incremental.*; import org.jetbrains.jps.incremental.messages.BuildMessage; @@ -234,13 +235,13 @@ public class JavaBuilder extends ModuleLevelBuilder { } } - final JavaBuilderLogger logger = context.getLoggingManager().getJavaBuilderLogger(); + final ProjectBuilderLogger logger = context.getLoggingManager().getProjectBuilderLogger(); if (logger.isEnabled() && context.isMake()) { if (filesToCompile.size() > 0) { - logFiles(filesToCompile, logger, "Compiling files:"); + logger.logCompiledFiles(filesToCompile, BUILDER_NAME, "Compiling files:"); } if (!formsToCompile.isEmpty()) { - logFiles(formsToCompile, logger, "Compiling forms:"); + logger.logCompiledFiles(formsToCompile, FORMS_BUILDER_NAME, "Compiling forms:"); } } @@ -261,20 +262,6 @@ public class JavaBuilder extends ModuleLevelBuilder { } } - private static void logFiles(Set files, JavaBuilderLogger logger, final String description) throws IOException { - logger.log(description); - final String[] buffer = new String[files.size()]; - int i = 0; - for (final File f : files) { - buffer[i++] = FileUtil.toSystemIndependentName(f.getCanonicalPath()); - } - Arrays.sort(buffer); - for (final String s : buffer) { - logger.log(s); - } - logger.log("End of files"); - } - @Override public boolean shouldHonorFileEncodingForCompilation(File file) { return JAVA_SOURCES_FILTER.accept(file) || FORM_SOURCES_FILTER.accept(file); diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilderLogger.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilderLogger.java deleted file mode 100644 index 837183e6a71b..000000000000 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilderLogger.java +++ /dev/null @@ -1,9 +0,0 @@ -package org.jetbrains.jps.incremental.java; - -/** - * @author nik - */ -public interface JavaBuilderLogger { - void log(String line); - boolean isEnabled(); -} diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilderLoggerImpl.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilderLoggerImpl.java deleted file mode 100644 index bca646cef3a7..000000000000 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/java/JavaBuilderLoggerImpl.java +++ /dev/null @@ -1,20 +0,0 @@ -package org.jetbrains.jps.incremental.java; - -import com.intellij.openapi.diagnostic.Logger; - -/** - * @author nik - */ -public class JavaBuilderLoggerImpl implements JavaBuilderLogger { - private static final Logger LOG = Logger.getInstance("#org.jetbrains.jps.incremental.java.JavaBuilderLoggerImpl"); - - @Override - public void log(String line) { - LOG.debug(line); - } - - @Override - public boolean isEnabled() { - return LOG.isDebugEnabled(); - } -} diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/storage/BuildDataManager.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/storage/BuildDataManager.java index cc7603086c65..a040393b2b2e 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/storage/BuildDataManager.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/storage/BuildDataManager.java @@ -7,6 +7,7 @@ import org.jetbrains.jps.builders.BuildTarget; import org.jetbrains.jps.builders.impl.BuildTargetChunk; import org.jetbrains.jps.builders.java.dependencyView.Mappings; import org.jetbrains.jps.builders.storage.BuildDataPaths; +import org.jetbrains.jps.builders.storage.SourceToOutputMapping; import org.jetbrains.jps.incremental.artifacts.ArtifactsBuildData; import java.io.*; @@ -49,7 +50,7 @@ public class BuildDataManager implements StorageOwner { return new File(myDataPaths.getDataStorageRoot(), "output-roots"); } - public SourceToOutputMappingImpl getSourceToOutputMap(final BuildTarget target) throws IOException { + public SourceToOutputMapping getSourceToOutputMap(final BuildTarget target) throws IOException { SourceToOutputMappingImpl mapping; synchronized (mySourceToOutputLock) { mapping = mySourceToOutputs.get(target); diff --git a/jps/jps-builders/testData/output/artifactIncludesArchiveArtifact/data/b.txt b/jps/jps-builders/testData/output/artifactIncludesArchiveArtifact/data/b.txt deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/jps/jps-builders/testSrc/org/jetbrains/ether/IncrementalTestCase.java b/jps/jps-builders/testSrc/org/jetbrains/ether/IncrementalTestCase.java index 8b8a16759c50..97d0b4b1f83a 100644 --- a/jps/jps-builders/testSrc/org/jetbrains/ether/IncrementalTestCase.java +++ b/jps/jps-builders/testSrc/org/jetbrains/ether/IncrementalTestCase.java @@ -19,16 +19,14 @@ import com.intellij.openapi.application.ex.PathManagerEx; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.text.StringUtil; import com.intellij.util.Processor; -import org.jetbrains.jps.builders.CompileScopeTestBuilder; -import org.jetbrains.jps.incremental.*; -import org.jetbrains.jps.util.JpsPathUtil; import org.jetbrains.jps.builders.BuildResult; -import org.jetbrains.jps.builders.BuildTarget; +import org.jetbrains.jps.builders.CompileScopeTestBuilder; import org.jetbrains.jps.builders.JpsBuildTestCase; -import org.jetbrains.jps.builders.java.JavaModuleBuildTargetType; import org.jetbrains.jps.cmdline.ProjectDescriptor; +import org.jetbrains.jps.builders.logging.BuildLoggingManager; +import org.jetbrains.jps.builders.impl.logging.ProjectBuilderLoggerBase; +import org.jetbrains.jps.incremental.Utils; import org.jetbrains.jps.incremental.artifacts.ArtifactBuilderLoggerImpl; -import org.jetbrains.jps.incremental.java.JavaBuilderLogger; import org.jetbrains.jps.model.JpsDummyElement; import org.jetbrains.jps.model.java.JavaSourceRootType; import org.jetbrains.jps.model.java.JpsJavaExtensionService; @@ -37,10 +35,9 @@ import org.jetbrains.jps.model.library.JpsLibrary; import org.jetbrains.jps.model.library.JpsOrderRootType; import org.jetbrains.jps.model.library.sdk.JpsSdk; import org.jetbrains.jps.model.module.JpsModule; +import org.jetbrains.jps.util.JpsPathUtil; import java.io.*; -import java.util.Collections; -import java.util.Set; /** * @author db @@ -173,8 +170,7 @@ public abstract class IncrementalTestCase extends JpsBuildTestCase { protected BuildResult doTestBuild(int makesCount) { StringBuilder log = new StringBuilder(); String rootPath = FileUtil.toSystemIndependentName(workDir.getAbsolutePath()) + "/"; - final TestJavaBuilderLogger builderLogger = new TestJavaBuilderLogger(rootPath, log); - final ProjectDescriptor pd = createProjectDescriptor(new BuildLoggingManager(new ArtifactBuilderLoggerImpl(), builderLogger, + final ProjectDescriptor pd = createProjectDescriptor(new BuildLoggingManager(new ArtifactBuilderLoggerImpl(), new TestProjectBuilderLogger(rootPath, log))); try { doBuild(pd, CompileScopeTestBuilder.rebuild().allModules()).assertSuccessful(); @@ -238,10 +234,6 @@ public abstract class IncrementalTestCase extends JpsBuildTestCase { } } - private static CompileScope createAllModulesScope(final boolean forcedCompilation) { - return new CompileScopeImpl(forcedCompilation, JavaModuleBuildTargetType.ALL_TYPES, Collections.>emptySet(), Collections., Set>emptyMap()); - } - private JpsSdk getOrCreateJdk() { if (myJdk == null) { myJdk = addJdk("IDEA jdk"); @@ -259,27 +251,7 @@ public abstract class IncrementalTestCase extends JpsBuildTestCase { module.addSourceRoot(getUrl(testRootRelativePath), JavaSourceRootType.TEST_SOURCE); } - private static class TestJavaBuilderLogger implements JavaBuilderLogger { - private final String myRoot; - private final StringBuilder myLog; - - public TestJavaBuilderLogger(String root, final StringBuilder log) { - myRoot = root; - myLog = log; - } - - @Override - public void log(String line) { - myLog.append(StringUtil.trimStart(line, myRoot)).append('\n'); - } - - @Override - public boolean isEnabled() { - return true; - } - } - - private static class TestProjectBuilderLogger extends ProjectBuilderLoggerImpl { + private static class TestProjectBuilderLogger extends ProjectBuilderLoggerBase { private final String myRoot; private StringBuilder myLog; diff --git a/jps/jps-builders/testSrc/org/jetbrains/jps/builders/JpsBuildTestCase.java b/jps/jps-builders/testSrc/org/jetbrains/jps/builders/JpsBuildTestCase.java index 81694f5ecc2d..5506b74e4563 100644 --- a/jps/jps-builders/testSrc/org/jetbrains/jps/builders/JpsBuildTestCase.java +++ b/jps/jps-builders/testSrc/org/jetbrains/jps/builders/JpsBuildTestCase.java @@ -11,6 +11,7 @@ import org.jetbrains.jps.api.CanceledStatus; import org.jetbrains.jps.builders.impl.BuildDataPathsImpl; import org.jetbrains.jps.builders.impl.BuildRootIndexImpl; import org.jetbrains.jps.builders.impl.BuildTargetIndexImpl; +import org.jetbrains.jps.builders.logging.BuildLoggingManager; import org.jetbrains.jps.builders.storage.BuildDataPaths; import org.jetbrains.jps.cmdline.ClasspathBootstrap; import org.jetbrains.jps.cmdline.ProjectDescriptor; diff --git a/jps/jps-builders/testSrc/org/jetbrains/jps/incremental/artifacts/ArtifactBuilderTestCase.java b/jps/jps-builders/testSrc/org/jetbrains/jps/incremental/artifacts/ArtifactBuilderTestCase.java index a0329d934dc4..a20b8d561e37 100644 --- a/jps/jps-builders/testSrc/org/jetbrains/jps/incremental/artifacts/ArtifactBuilderTestCase.java +++ b/jps/jps-builders/testSrc/org/jetbrains/jps/incremental/artifacts/ArtifactBuilderTestCase.java @@ -23,9 +23,8 @@ import org.jetbrains.jps.builders.BuildResult; import org.jetbrains.jps.builders.CompileScopeTestBuilder; import org.jetbrains.jps.builders.JpsBuildTestCase; import org.jetbrains.jps.cmdline.ProjectDescriptor; -import org.jetbrains.jps.incremental.BuildLoggingManager; -import org.jetbrains.jps.incremental.ProjectBuilderLoggerImpl; -import org.jetbrains.jps.incremental.java.JavaBuilderLoggerImpl; +import org.jetbrains.jps.builders.logging.BuildLoggingManager; +import org.jetbrains.jps.builders.impl.logging.ProjectBuilderLoggerImpl; import org.jetbrains.jps.model.JpsElementFactory; import org.jetbrains.jps.model.artifact.DirectoryArtifactType; import org.jetbrains.jps.model.artifact.JpsArtifact; @@ -105,7 +104,7 @@ public abstract class ArtifactBuilderTestCase extends JpsBuildTestCase { protected BuildResult doBuild(CompileScopeTestBuilder scope) { BuildResult result; - ProjectDescriptor descriptor = createProjectDescriptor(new BuildLoggingManager(myArtifactBuilderLogger, new JavaBuilderLoggerImpl(), new ProjectBuilderLoggerImpl())); + ProjectDescriptor descriptor = createProjectDescriptor(new BuildLoggingManager(myArtifactBuilderLogger, new ProjectBuilderLoggerImpl())); try { myArtifactBuilderLogger.clear(); result = doBuild(descriptor, scope); diff --git a/plugins/android/jps-plugin/src/org/jetbrains/jps/android/AndroidDexBuilder.java b/plugins/android/jps-plugin/src/org/jetbrains/jps/android/AndroidDexBuilder.java index 7354f9e55e80..66244c2bd099 100644 --- a/plugins/android/jps-plugin/src/org/jetbrains/jps/android/AndroidDexBuilder.java +++ b/plugins/android/jps-plugin/src/org/jetbrains/jps/android/AndroidDexBuilder.java @@ -33,6 +33,7 @@ import org.jetbrains.jps.ProjectPaths; import org.jetbrains.jps.android.builder.AndroidProjectBuildTarget; import org.jetbrains.jps.android.model.JpsAndroidModuleExtension; import org.jetbrains.jps.android.model.JpsAndroidSdkProperties; +import org.jetbrains.jps.builders.BuildOutputConsumer; import org.jetbrains.jps.builders.BuildRootDescriptor; import org.jetbrains.jps.builders.DirtyFilesHolder; import org.jetbrains.jps.builders.java.JavaModuleBuildTargetType; @@ -68,8 +69,10 @@ public class AndroidDexBuilder extends TargetBuilder holder) throws ProjectBuildException { + public void build(@NotNull AndroidProjectBuildTarget target, + @NotNull DirtyFilesHolder holder, + @NotNull BuildOutputConsumer outputConsumer, + @NotNull CompileContext context) throws ProjectBuildException { if (target.getKind() != AndroidProjectBuildTarget.AndroidBuilderKind.DEX && AndroidJpsUtil.isLightBuild(context)) { return; } diff --git a/plugins/android/jps-plugin/src/org/jetbrains/jps/android/AndroidPackagingBuilder.java b/plugins/android/jps-plugin/src/org/jetbrains/jps/android/AndroidPackagingBuilder.java index fb8135121a43..8f8a995d5453 100644 --- a/plugins/android/jps-plugin/src/org/jetbrains/jps/android/AndroidPackagingBuilder.java +++ b/plugins/android/jps-plugin/src/org/jetbrains/jps/android/AndroidPackagingBuilder.java @@ -18,6 +18,7 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.jps.ProjectPaths; import org.jetbrains.jps.android.builder.AndroidProjectBuildTarget; import org.jetbrains.jps.android.model.JpsAndroidModuleExtension; +import org.jetbrains.jps.builders.BuildOutputConsumer; import org.jetbrains.jps.builders.BuildRootDescriptor; import org.jetbrains.jps.builders.DirtyFilesHolder; import org.jetbrains.jps.builders.java.JavaModuleBuildTargetType; @@ -60,8 +61,10 @@ public class AndroidPackagingBuilder extends TargetBuilder holder) throws ProjectBuildException { + public void build(@NotNull AndroidProjectBuildTarget target, + @NotNull DirtyFilesHolder holder, + @NotNull BuildOutputConsumer outputConsumer, + @NotNull CompileContext context) throws ProjectBuildException { if (target.getKind() != AndroidProjectBuildTarget.AndroidBuilderKind.PACKAGING || AndroidJpsUtil.isLightBuild(context)) { return; }