external compiler: added interface for registering src-to-output mapping, build logging generalized

This commit is contained in:
nik
2012-10-12 15:44:34 +04:00
parent 12f77aaa9e
commit 5bfd96ed0d
26 changed files with 192 additions and 183 deletions
@@ -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<String> sourceFiles) throws IOException;
}
@@ -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<String> 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<File> 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);
}
@@ -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);
}
}
@@ -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;
@@ -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<String> paths);
void logCompiledFiles(Set<File> files, String builderName, String description) throws IOException;
}
@@ -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;
@@ -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;
@@ -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;
@@ -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;
@@ -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<File> currentFiles) throws IOException {
final ModuleExcludeIndex rootsIndex = context.getProjectDescriptor().getModuleExcludeIndex();
markDirtyFiles(context, target, timestamps, forceMarkDirty, currentFiles,
new HashSet<File>(rootsIndex.getModuleExcludes(target.getModule())));
Set<File> excludes = target instanceof ModuleBuildTarget ? new HashSet<File>(rootsIndex.getModuleExcludes(((ModuleBuildTarget)target).getModule())) : Collections.<File>emptySet();
markDirtyFiles(context, target, timestamps, forceMarkDirty, currentFiles, excludes);
}
static void markDirtyFiles(CompileContext context, BuildTarget<?> target, Timestamps timestamps, boolean forceMarkDirty, @Nullable THashSet<File> currentFiles, final Set<File> excludes) throws IOException {
@@ -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<R,T>)builder).build(target, context, holder);
BuildOutputConsumerImpl outputConsumer = new BuildOutputConsumerImpl(target, context);
((TargetBuilder<R,T>)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 <R extends BuildRootDescriptor,T extends BuildTarget<R>>
void deleteOutputsOfDirtyFiles(final CompileContext context, DirtyFilesHolder<R, T> 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.<File>emptySet());
configuration.save();
}
else if (context.isMake()) {
if (pd.fsState.markInitialScanPerformed(target)) {
FSOperations.markDirtyFiles(context, target, timestamps, false, null, Collections.<File>emptySet());
}
else if (pd.fsState.markInitialScanPerformed(target)) {
FSOperations.markDirtyFiles(context, target, timestamps, false, null, Collections.<File>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<File> currentFiles = new THashSet<File>(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<String> 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);
}
}
}
}
@@ -1,11 +0,0 @@
package org.jetbrains.jps.incremental;
import java.util.Collection;
/**
* @author nik
*/
public interface ProjectBuilderLogger {
boolean isEnabled();
void logDeletedFiles(Collection<String> paths);
}
@@ -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<String> 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);
}
}
@@ -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<R extends BuildRootDescriptor, T extends Bui
return myTargetTypes;
}
public abstract void build(@NotNull T target, @NotNull CompileContext context, DirtyFilesHolder<R, T> holder)
throws ProjectBuildException, IOException;
public abstract void build(@NotNull T target, @NotNull DirtyFilesHolder<R, T> holder, @NotNull BuildOutputConsumer outputConsumer,
@NotNull CompileContext context) throws ProjectBuildException, IOException;
}
@@ -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();
@@ -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<ArtifactRootDescriptor, Ar
@Override
public void build(@NotNull ArtifactBuildTarget target,
@NotNull CompileContext context,
DirtyFilesHolder<ArtifactRootDescriptor, ArtifactBuildTarget> holder) throws ProjectBuildException {
@NotNull DirtyFilesHolder<ArtifactRootDescriptor, ArtifactBuildTarget> 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"));
@@ -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<File> 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);
@@ -1,9 +0,0 @@
package org.jetbrains.jps.incremental.java;
/**
* @author nik
*/
public interface JavaBuilderLogger {
void log(String line);
boolean isEnabled();
}
@@ -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();
}
}
@@ -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);
@@ -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.<BuildTarget<?>>emptySet(), Collections.<BuildTarget<?>, Set<File>>emptyMap());
}
private JpsSdk<JpsDummyElement> 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;
@@ -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;
@@ -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);
@@ -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<BuildRootDescriptor,Android
}
@Override
public void build(@NotNull AndroidProjectBuildTarget target, @NotNull CompileContext context,
DirtyFilesHolder<BuildRootDescriptor, AndroidProjectBuildTarget> holder) throws ProjectBuildException {
public void build(@NotNull AndroidProjectBuildTarget target,
@NotNull DirtyFilesHolder<BuildRootDescriptor, AndroidProjectBuildTarget> holder,
@NotNull BuildOutputConsumer outputConsumer,
@NotNull CompileContext context) throws ProjectBuildException {
if (target.getKind() != AndroidProjectBuildTarget.AndroidBuilderKind.DEX && AndroidJpsUtil.isLightBuild(context)) {
return;
}
@@ -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<BuildRootDescriptor,
}
@Override
public void build(@NotNull AndroidProjectBuildTarget target, @NotNull CompileContext context,
DirtyFilesHolder<BuildRootDescriptor, AndroidProjectBuildTarget> holder) throws ProjectBuildException {
public void build(@NotNull AndroidProjectBuildTarget target,
@NotNull DirtyFilesHolder<BuildRootDescriptor, AndroidProjectBuildTarget> holder,
@NotNull BuildOutputConsumer outputConsumer,
@NotNull CompileContext context) throws ProjectBuildException {
if (target.getKind() != AndroidProjectBuildTarget.AndroidBuilderKind.PACKAGING || AndroidJpsUtil.isLightBuild(context)) {
return;
}