added listener for changes in 'external build' option

This commit is contained in:
nik
2012-12-24 15:10:49 +04:00
parent 7602c52a0b
commit baad1b1b09
3 changed files with 64 additions and 30 deletions
@@ -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() {
@@ -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);
}
}
@@ -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<ExternalBuildOptionListener> TOPIC = Topic.create("External build option", ExternalBuildOptionListener.class);
void externalBuildOptionChanged(boolean externalBuildEnabled);
}