From 64d7ac0b1c67f0312f62f7dea16c7090b89b3eb8 Mon Sep 17 00:00:00 2001 From: Eugene Zhuravlev Date: Mon, 25 Jun 2012 19:09:50 +0200 Subject: [PATCH] force project rebuild when switching between internal and external make implementations --- .../options/CompilerUIConfigurable.java | 34 ++++++++++++++----- .../compiler/server/BuildManager.java | 6 +++- .../jetbrains/jps/cmdline/BuildSession.java | 5 +++ 3 files changed, 35 insertions(+), 10 deletions(-) diff --git a/java/compiler/impl/src/com/intellij/compiler/options/CompilerUIConfigurable.java b/java/compiler/impl/src/com/intellij/compiler/options/CompilerUIConfigurable.java index 357bcff0f562..3c976195318e 100644 --- a/java/compiler/impl/src/com/intellij/compiler/options/CompilerUIConfigurable.java +++ b/java/compiler/impl/src/com/intellij/compiler/options/CompilerUIConfigurable.java @@ -23,13 +23,16 @@ import com.intellij.openapi.options.Configurable; import com.intellij.openapi.options.ConfigurationException; import com.intellij.openapi.options.SearchableConfigurable; import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.io.FileUtil; import org.jetbrains.annotations.NotNull; import javax.swing.*; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; +import java.io.File; import java.util.ArrayList; import java.util.List; +import java.util.Locale; import java.util.StringTokenizer; public class CompilerUIConfigurable implements SearchableConfigurable, Configurable.NoScroll { @@ -97,7 +100,7 @@ public class CompilerUIConfigurable implements SearchableConfigurable, Configura final CompilerWorkspaceConfiguration workspaceConfiguration = CompilerWorkspaceConfiguration.getInstance(myProject); workspaceConfiguration.AUTO_SHOW_ERRORS_IN_EDITOR = myCbAutoShowFirstError.isSelected(); workspaceConfiguration.CLEAR_OUTPUT_DIRECTORY = myCbClearOutputDirectory.isSelected(); - boolean wasUsing = workspaceConfiguration.USE_COMPILE_SERVER; + boolean wasUsingExternalMake = workspaceConfiguration.USE_COMPILE_SERVER; workspaceConfiguration.USE_COMPILE_SERVER = myCbUseCompileServer.isSelected(); workspaceConfiguration.MAKE_PROJECT_ON_SAVE = myCbMakeProjectOnSave.isSelected(); workspaceConfiguration.ALLOW_AUTOMAKE_WHILE_RUNNING_APPLICATION = myCbAllowAutomakeWhileRunningApplication.isSelected(); @@ -109,14 +112,7 @@ public class CompilerUIConfigurable implements SearchableConfigurable, Configura // this will schedule for compilation all files that might become compilable after resource patterns' changing final TranslatingCompilerFilesMonitor monitor = TranslatingCompilerFilesMonitor.getInstance(); - if (!workspaceConfiguration.USE_COMPILE_SERVER) { - if (wasUsing) { - CompileServerManager.getInstance().shutdownServer(); - monitor.watchProject(myProject); - monitor.scanSourcesForCompilableFiles(myProject); - } - } - else { + if (workspaceConfiguration.USE_COMPILE_SERVER) { monitor.suspendProject(myProject); SwingUtilities.invokeLater(new Runnable() { public void run() { @@ -125,6 +121,26 @@ public class CompilerUIConfigurable implements SearchableConfigurable, Configura } }); } + else { + // use old make + if (wasUsingExternalMake) { + CompileServerManager.getInstance().shutdownServer(); + monitor.watchProject(myProject); + monitor.scanSourcesForCompilableFiles(myProject); + if (!myProject.isDefault()) { + final File buildSystem = BuildManager.getInstance().getBuildSystemDirectory(); + final File[] subdirs = buildSystem.listFiles(); + if (subdirs != null) { + final String prefix = myProject.getName().toLowerCase(Locale.US) + "_"; + for (File subdir : subdirs) { + if (subdir.getName().startsWith(prefix)) { + FileUtil.asyncDelete(subdir); + } + } + } + } + } + } } private static void applyResourcePatterns(String extensionString, final CompilerConfigurationImpl configuration) diff --git a/java/compiler/impl/src/com/intellij/compiler/server/BuildManager.java b/java/compiler/impl/src/com/intellij/compiler/server/BuildManager.java index f69a80666049..c8b61a6c6fca 100644 --- a/java/compiler/impl/src/com/intellij/compiler/server/BuildManager.java +++ b/java/compiler/impl/src/com/intellij/compiler/server/BuildManager.java @@ -746,7 +746,7 @@ public class BuildManager implements ApplicationComponent{ cmdLine.addParameter(Integer.toString(port)); cmdLine.addParameter(sessionId.toString()); - final File workDirectory = new File(mySystemDirectory, SYSTEM_ROOT); + final File workDirectory = getBuildSystemDirectory(); workDirectory.mkdirs(); ensureLogConfigExists(workDirectory); @@ -757,6 +757,10 @@ public class BuildManager implements ApplicationComponent{ return cmdLine.createProcess(); } + public File getBuildSystemDirectory() { + return new File(mySystemDirectory, SYSTEM_ROOT); + } + private static int getMinorVersion(String vs) { final int dashIndex = vs.lastIndexOf('_'); if (dashIndex >= 0) { diff --git a/jps/jps-builders/src/org/jetbrains/jps/cmdline/BuildSession.java b/jps/jps-builders/src/org/jetbrains/jps/cmdline/BuildSession.java index 0f23ddf7c810..9a0a11adbfa3 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/cmdline/BuildSession.java +++ b/jps/jps-builders/src/org/jetbrains/jps/cmdline/BuildSession.java @@ -164,7 +164,12 @@ final class BuildSession implements Runnable, CanceledStatus { boolean forceCleanCaches = false; ProjectDescriptor pd; final Project project = loadProject(projectPath); + final File dataStorageRoot = Utils.getDataStorageRoot(project); + if (!dataStorageRoot.exists()) { + // invoked the very first time for this project. Force full rebuild + buildType = BuildType.PROJECT_REBUILD; + } final boolean inMemoryMappingsDelta = System.getProperty(GlobalOptions.USE_MEMORY_TEMP_CACHE_OPTION) != null; ProjectTimestamps projectTimestamps = null;