mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
external make: better diagnostic message for fully rebuilt modules
This commit is contained in:
@@ -22,13 +22,10 @@ import org.jetbrains.jps.builders.*;
|
||||
import org.jetbrains.jps.builders.impl.BuildOutputConsumerImpl;
|
||||
import org.jetbrains.jps.builders.impl.BuildTargetChunk;
|
||||
import org.jetbrains.jps.builders.impl.DirtyFilesHolderBase;
|
||||
import org.jetbrains.jps.builders.java.JavaModuleBuildTargetType;
|
||||
import org.jetbrains.jps.builders.logging.ProjectBuilderLogger;
|
||||
import org.jetbrains.jps.builders.storage.SourceToOutputMapping;
|
||||
import org.jetbrains.jps.cmdline.ProjectDescriptor;
|
||||
import org.jetbrains.jps.incremental.fs.BuildFSState;
|
||||
import org.jetbrains.jps.incremental.messages.BuildMessage;
|
||||
import org.jetbrains.jps.incremental.messages.CompilerMessage;
|
||||
import org.jetbrains.jps.incremental.messages.DoneSomethingNotification;
|
||||
import org.jetbrains.jps.incremental.messages.FileDeletedEvent;
|
||||
import org.jetbrains.jps.incremental.storage.BuildDataManager;
|
||||
@@ -51,25 +48,16 @@ public class BuildOperations {
|
||||
final ProjectDescriptor pd = context.getProjectDescriptor();
|
||||
final Timestamps timestamps = pd.timestamps.getStorage();
|
||||
final BuildTargetConfiguration configuration = pd.getTargetsState().getTargetConfiguration(target);
|
||||
boolean isTargetConfigChange = false;
|
||||
if (context.isProjectRebuild()) {
|
||||
FSOperations.markDirtyFiles(context, target, timestamps, true, null, null);
|
||||
pd.fsState.markInitialScanPerformed(target);
|
||||
configuration.save();
|
||||
}
|
||||
else if (context.getScope().isRecompilationForced(target) ||
|
||||
(isTargetConfigChange = configuration.isTargetDirty()) ||
|
||||
configuration.outputRootWasDeleted(context)) {
|
||||
else if (context.getScope().isRecompilationForced(target) || configuration.isTargetDirty(context) || configuration.outputRootWasDeleted(context)) {
|
||||
initTargetFSState(context, target, true);
|
||||
IncProjectBuilder.clearOutputFiles(context, target);
|
||||
pd.dataManager.cleanTargetStorages(target);
|
||||
configuration.save();
|
||||
|
||||
if (isTargetConfigChange && ModuleBuildTarget.REBUILD_ON_DEPENDENCY_CHANGE && JavaModuleBuildTargetType.PRODUCTION.equals(target.getTargetType())) {
|
||||
final String moduleName = ((ModuleBuildTarget)target).getModule().getName();
|
||||
context.processMessage(new CompilerMessage("", BuildMessage.Kind.INFO, "Rebuilding module \"" + moduleName + "\" because of dependencies change"));
|
||||
}
|
||||
|
||||
}
|
||||
else if (!pd.fsState.isInitialScanPerformed(target)) {
|
||||
initTargetFSState(context, target, false);
|
||||
|
||||
@@ -49,10 +49,12 @@ import org.jetbrains.jps.cmdline.ProjectDescriptor;
|
||||
import org.jetbrains.jps.incremental.fs.BuildFSState;
|
||||
import org.jetbrains.jps.incremental.java.ExternalJavacDescriptor;
|
||||
import org.jetbrains.jps.incremental.messages.*;
|
||||
import org.jetbrains.jps.incremental.storage.BuildTargetConfiguration;
|
||||
import org.jetbrains.jps.incremental.storage.OneToManyPathsMapping;
|
||||
import org.jetbrains.jps.indices.ModuleExcludeIndex;
|
||||
import org.jetbrains.jps.model.java.JpsJavaExtensionService;
|
||||
import org.jetbrains.jps.model.java.compiler.JpsJavaCompilerConfiguration;
|
||||
import org.jetbrains.jps.model.module.JpsModule;
|
||||
import org.jetbrains.jps.service.SharedThreadPool;
|
||||
import org.jetbrains.jps.util.JpsPathUtil;
|
||||
|
||||
@@ -177,6 +179,7 @@ public class IncProjectBuilder {
|
||||
context = createContext(scope, isMake, isProjectRebuild);
|
||||
runBuild(context, forceCleanCaches);
|
||||
myProjectDescriptor.dataManager.saveVersion();
|
||||
reportRebuiltModules(context);
|
||||
}
|
||||
catch (ProjectBuildException e) {
|
||||
final Throwable cause = e.getCause();
|
||||
@@ -191,8 +194,9 @@ public class IncProjectBuilder {
|
||||
throw new RebuildRequestedException(cause);
|
||||
}
|
||||
else {
|
||||
reportRebuiltModules(context);
|
||||
if (cause == null) {
|
||||
// some builder desided to stop the build
|
||||
// some builder decided to stop the build
|
||||
// report optional progress message if exists
|
||||
final String msg = e.getMessage();
|
||||
if (!StringUtil.isEmpty(msg)) {
|
||||
@@ -222,6 +226,41 @@ public class IncProjectBuilder {
|
||||
}
|
||||
}
|
||||
|
||||
private static void reportRebuiltModules(CompileContextImpl context) {
|
||||
final Set<JpsModule> modules = BuildTargetConfiguration.MODULES_WITH_TARGET_CONFIG_CHANGED_KEY.get(context);
|
||||
if (modules == null || modules.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
final StringBuilder message = new StringBuilder();
|
||||
if (modules.size() > 1) {
|
||||
message.append("Modules ");
|
||||
final int namesLimit = 5;
|
||||
int idx = 0;
|
||||
for (Iterator<JpsModule> iterator = modules.iterator(); iterator.hasNext(); ) {
|
||||
final JpsModule module = iterator.next();
|
||||
if (idx == namesLimit && iterator.hasNext()) {
|
||||
message.append(" and ").append(modules.size() - namesLimit).append(" others");
|
||||
break;
|
||||
}
|
||||
if (idx > 0) {
|
||||
message.append(", ");
|
||||
}
|
||||
message.append("\"").append(module.getName()).append("\"");
|
||||
idx += 1;
|
||||
}
|
||||
message.append(" were");
|
||||
}
|
||||
else {
|
||||
message.append("Module \"").append(modules.iterator().next().getName()).append("\" was");
|
||||
}
|
||||
message.append(" fully rebuilt due to project configuration");
|
||||
if (ModuleBuildTarget.REBUILD_ON_DEPENDENCY_CHANGE) {
|
||||
message.append("/dependencies");
|
||||
}
|
||||
message.append(" changes");
|
||||
context.processMessage(new CompilerMessage("", BuildMessage.Kind.INFO, message.toString()));
|
||||
}
|
||||
|
||||
private static void flushContext(CompileContext context) {
|
||||
if (context != null) {
|
||||
final ProjectDescriptor pd = context.getProjectDescriptor();
|
||||
|
||||
+15
-1
@@ -16,6 +16,7 @@
|
||||
package org.jetbrains.jps.incremental.storage;
|
||||
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.util.Key;
|
||||
import com.intellij.openapi.util.io.FileUtil;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.util.SmartList;
|
||||
@@ -23,6 +24,8 @@ import gnu.trove.THashSet;
|
||||
import org.jetbrains.jps.builders.BuildTarget;
|
||||
import org.jetbrains.jps.incremental.CompileContext;
|
||||
import org.jetbrains.jps.incremental.GlobalContextKey;
|
||||
import org.jetbrains.jps.incremental.ModuleBuildTarget;
|
||||
import org.jetbrains.jps.model.module.JpsModule;
|
||||
|
||||
import java.io.*;
|
||||
import java.util.Collection;
|
||||
@@ -34,6 +37,7 @@ import java.util.Set;
|
||||
* @author nik
|
||||
*/
|
||||
public class BuildTargetConfiguration {
|
||||
public static final Key<Set<JpsModule>> MODULES_WITH_TARGET_CONFIG_CHANGED_KEY = GlobalContextKey.create("_modules_with_target_config_changed_");
|
||||
private static final Logger LOG = Logger.getInstance(BuildTargetConfiguration.class);
|
||||
private final BuildTarget<?> myTarget;
|
||||
private final BuildTargetsState myTargetsState;
|
||||
@@ -60,7 +64,7 @@ public class BuildTargetConfiguration {
|
||||
return "";
|
||||
}
|
||||
|
||||
public boolean isTargetDirty() {
|
||||
public boolean isTargetDirty(CompileContext context) {
|
||||
final String currentState = getCurrentState();
|
||||
if (!currentState.equals(myConfiguration)) {
|
||||
LOG.debug(myTarget + " configuration was changed:");
|
||||
@@ -69,6 +73,16 @@ public class BuildTargetConfiguration {
|
||||
LOG.debug("New:");
|
||||
LOG.debug(currentState);
|
||||
LOG.debug(myTarget + " will be recompiled");
|
||||
if (myTarget instanceof ModuleBuildTarget) {
|
||||
final JpsModule module = ((ModuleBuildTarget)myTarget).getModule();
|
||||
synchronized (MODULES_WITH_TARGET_CONFIG_CHANGED_KEY) {
|
||||
Set<JpsModule> modules = MODULES_WITH_TARGET_CONFIG_CHANGED_KEY.get(context);
|
||||
if (modules == null) {
|
||||
MODULES_WITH_TARGET_CONFIG_CHANGED_KEY.set(context, modules = new THashSet<JpsModule>());
|
||||
}
|
||||
modules.add(module);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
|
||||
Reference in New Issue
Block a user