From baad1b1b0920df3493927de6de6e53a9e4944d5a Mon Sep 17 00:00:00 2001 From: nik Date: Thu, 20 Dec 2012 19:01:46 +0400 Subject: [PATCH] added listener for changes in 'external build' option --- .../compiler/CompilerConfigurationImpl.java | 34 ++++++++++++++++++- .../options/CompilerUIConfigurable.java | 31 ++--------------- .../options/ExternalBuildOptionListener.java | 29 ++++++++++++++++ 3 files changed, 64 insertions(+), 30 deletions(-) create mode 100644 java/compiler/impl/src/com/intellij/compiler/options/ExternalBuildOptionListener.java diff --git a/java/compiler/impl/src/com/intellij/compiler/CompilerConfigurationImpl.java b/java/compiler/impl/src/com/intellij/compiler/CompilerConfigurationImpl.java index 9742150b7e97..cbf1b6867d25 100644 --- a/java/compiler/impl/src/com/intellij/compiler/CompilerConfigurationImpl.java +++ b/java/compiler/impl/src/com/intellij/compiler/CompilerConfigurationImpl.java @@ -23,11 +23,14 @@ package com.intellij.compiler; import com.intellij.CommonBundle; import com.intellij.ProjectTopics; +import com.intellij.compiler.impl.TranslatingCompilerFilesMonitor; import com.intellij.compiler.impl.javaCompiler.BackendCompiler; import com.intellij.compiler.impl.javaCompiler.api.CompilerAPICompiler; import com.intellij.compiler.impl.javaCompiler.eclipse.EclipseCompiler; import com.intellij.compiler.impl.javaCompiler.eclipse.EclipseEmbeddedCompiler; import com.intellij.compiler.impl.javaCompiler.javac.JavacCompiler; +import com.intellij.compiler.options.ExternalBuildOptionListener; +import com.intellij.compiler.server.BuildManager; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.application.ApplicationNamesInfo; import com.intellij.openapi.application.ex.ApplicationManagerEx; @@ -51,6 +54,7 @@ import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vfs.VfsUtilCore; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.ArrayUtil; +import com.intellij.util.messages.MessageBusConnection; import org.apache.oro.text.regex.*; import org.jdom.Element; import org.jetbrains.annotations.NonNls; @@ -112,7 +116,8 @@ public class CompilerConfigurationImpl extends CompilerConfiguration implements myProject = project; myExcludedEntriesConfiguration = new ExcludedEntriesConfiguration(); Disposer.register(project, myExcludedEntriesConfiguration); - project.getMessageBus().connect(project).subscribe(ProjectTopics.MODULES, new ModuleAdapter() { + MessageBusConnection connection = project.getMessageBus().connect(project); + connection.subscribe(ProjectTopics.MODULES, new ModuleAdapter() { public void beforeModuleRemoved(Project project, Module module) { getAnnotationProcessingConfiguration(module).removeModuleName(module.getName()); } @@ -121,6 +126,33 @@ public class CompilerConfigurationImpl extends CompilerConfiguration implements myProcessorsProfilesMap = null; // clear cache } }); + + connection.subscribe(ExternalBuildOptionListener.TOPIC, new ExternalBuildOptionListener() { + @Override + public void externalBuildOptionChanged(boolean externalBuildEnabled) { + // this will schedule for compilation all files that might become compilable after resource patterns' changing + final TranslatingCompilerFilesMonitor monitor = TranslatingCompilerFilesMonitor.getInstance(); + if (externalBuildEnabled) { + monitor.suspendProject(myProject); + } + else { + 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); + } + } + } + } + } + } + }); } public Element getState() { 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 ee2a2003058a..136d86c03407 100644 --- a/java/compiler/impl/src/com/intellij/compiler/options/CompilerUIConfigurable.java +++ b/java/compiler/impl/src/com/intellij/compiler/options/CompilerUIConfigurable.java @@ -19,25 +19,20 @@ import com.intellij.compiler.CompilerConfiguration; import com.intellij.compiler.CompilerConfigurationImpl; import com.intellij.compiler.CompilerWorkspaceConfiguration; import com.intellij.compiler.MalformedPatternException; -import com.intellij.compiler.impl.TranslatingCompilerFilesMonitor; -import com.intellij.compiler.server.BuildManager; import com.intellij.openapi.compiler.CompilerBundle; import com.intellij.openapi.diagnostic.Logger; 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 com.intellij.ui.components.JBLabel; 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 { @@ -128,30 +123,8 @@ public class CompilerUIConfigurable implements SearchableConfigurable, Configura configuration.removeResourceFilePatterns(); String extensionString = myResourcePatternsField.getText().trim(); applyResourcePatterns(extensionString, (CompilerConfigurationImpl)CompilerConfiguration.getInstance(myProject)); - - // 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) { - monitor.suspendProject(myProject); - } - else { - // use old make - if (wasUsingExternalMake) { - 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); - } - } - } - } - } + if (wasUsingExternalMake != workspaceConfiguration.USE_COMPILE_SERVER) { + myProject.getMessageBus().syncPublisher(ExternalBuildOptionListener.TOPIC).externalBuildOptionChanged(workspaceConfiguration.USE_COMPILE_SERVER); } } diff --git a/java/compiler/impl/src/com/intellij/compiler/options/ExternalBuildOptionListener.java b/java/compiler/impl/src/com/intellij/compiler/options/ExternalBuildOptionListener.java new file mode 100644 index 000000000000..c3c92add51f2 --- /dev/null +++ b/java/compiler/impl/src/com/intellij/compiler/options/ExternalBuildOptionListener.java @@ -0,0 +1,29 @@ +/* + * Copyright 2000-2012 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.compiler.options; + +import com.intellij.util.messages.Topic; + +import java.util.EventListener; + +/** + * @author nik + */ +public interface ExternalBuildOptionListener extends EventListener { + Topic TOPIC = Topic.create("External build option", ExternalBuildOptionListener.class); + + void externalBuildOptionChanged(boolean externalBuildEnabled); +}