mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
external compiler: added interface for registering src-to-output mapping, build logging generalized
This commit is contained in:
@@ -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;
|
||||
}
|
||||
+48
@@ -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);
|
||||
}
|
||||
+20
@@ -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);
|
||||
}
|
||||
}
|
||||
+5
-12
@@ -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;
|
||||
|
||||
}
|
||||
|
||||
+2
-5
@@ -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();
|
||||
|
||||
+3
-2
@@ -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;
|
||||
|
||||
+3
-4
@@ -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;
|
||||
}
|
||||
|
||||
+5
-2
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user