summaryrefslogtreecommitdiff
path: root/platform/lang-impl/src/com/intellij/diagnostic/logging/LogFilesManager.java
diff options
context:
space:
mode:
Diffstat (limited to 'platform/lang-impl/src/com/intellij/diagnostic/logging/LogFilesManager.java')
-rw-r--r--platform/lang-impl/src/com/intellij/diagnostic/logging/LogFilesManager.java133
1 files changed, 31 insertions, 102 deletions
diff --git a/platform/lang-impl/src/com/intellij/diagnostic/logging/LogFilesManager.java b/platform/lang-impl/src/com/intellij/diagnostic/logging/LogFilesManager.java
index a581a15ed6b8..0f95b541ce8a 100644
--- a/platform/lang-impl/src/com/intellij/diagnostic/logging/LogFilesManager.java
+++ b/platform/lang-impl/src/com/intellij/diagnostic/logging/LogFilesManager.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2009 JetBrains s.r.o.
+ * Copyright 2000-2014 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.
@@ -13,135 +13,64 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
package com.intellij.diagnostic.logging;
import com.intellij.execution.configurations.LogFileOptions;
import com.intellij.execution.configurations.RunConfigurationBase;
import com.intellij.execution.process.ProcessHandler;
-import com.intellij.openapi.Disposable;
-import com.intellij.openapi.diagnostic.Logger;
-import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Condition;
import com.intellij.openapi.util.Conditions;
-import com.intellij.openapi.util.Disposer;
-import com.intellij.util.Alarm;
-import gnu.trove.THashSet;
import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
-import javax.swing.*;
import java.io.File;
-import java.util.*;
-
-/**
- * User: anna
- * Date: 01-Feb-2006
- */
-public class LogFilesManager implements Disposable {
- public static final Logger LOG = Logger.getInstance(LogFilesManager.class);
+import java.util.Set;
+import java.util.TreeMap;
- private static final int UPDATE_INTERVAL = 500;
-
- private final Map<LogFileOptions, Set<String>> myLogFileManagerMap = new LinkedHashMap<LogFileOptions, Set<String>>();
- private final Runnable myUpdateRequest;
+public class LogFilesManager {
private final LogConsoleManager myManager;
- private final Alarm myUpdateAlarm = new Alarm(Alarm.ThreadToUse.POOLED_THREAD, this);
- private boolean myDisposed;
- public LogFilesManager(@NotNull final Project project, LogConsoleManager manager, Disposable parentDisposable) {
+ public LogFilesManager(@NotNull LogConsoleManager manager) {
myManager = manager;
- Disposer.register(parentDisposable, this);
-
- myUpdateRequest = new Runnable() {
- @Override
- public void run() {
- if (project.isDisposed() || myDisposed) return;
- myUpdateAlarm.cancelAllRequests();
- for (final LogFileOptions logFile : myLogFileManagerMap.keySet()) {
- final Set<String> oldFiles = myLogFileManagerMap.get(logFile);
- final Set<String> newFiles = logFile.getPaths(); // should not be called in UI thread
- myLogFileManagerMap.put(logFile, newFiles);
-
- final Set<String> obsoleteFiles = new THashSet<String>(oldFiles);
- obsoleteFiles.removeAll(newFiles);
-
- SwingUtilities.invokeLater(new Runnable() {
- @Override
- public void run() {
- if (project.isDisposed() || myDisposed) return;
-
- addConfigurationConsoles(logFile, new Condition<String>() {
- @Override
- public boolean value(final String file) {
- return !oldFiles.contains(file);
- }
- }, newFiles);
- for (String each : obsoleteFiles) {
- myManager.removeLogConsole(each);
- }
- myUpdateAlarm.addRequest(myUpdateRequest, UPDATE_INTERVAL);
- }
- });
- }
- }
- };
}
- public void registerFileMatcher(@NotNull RunConfigurationBase runConfiguration) {
- final ArrayList<LogFileOptions> logFiles = runConfiguration.getAllLogFiles();
- for (LogFileOptions logFile : logFiles) {
- if (logFile.isEnabled()) {
- myLogFileManagerMap.put(logFile, logFile.getPaths());
+ public void addLogConsoles(@NotNull RunConfigurationBase runConfiguration, @Nullable ProcessHandler startedProcess) {
+ for (LogFileOptions logFileOptions : runConfiguration.getAllLogFiles()) {
+ if (logFileOptions.isEnabled()) {
+ addConfigurationConsoles(logFileOptions, Conditions.<String>alwaysTrue(), logFileOptions.getPaths(), runConfiguration);
}
}
- Alarm updateAlarm = myUpdateAlarm;
- if (updateAlarm != null) {
- updateAlarm.addRequest(myUpdateRequest, UPDATE_INTERVAL);
- }
+ runConfiguration.createAdditionalTabComponents(myManager, startedProcess);
}
- @Override
- public void dispose() {
- myDisposed = true;
- if (myUpdateAlarm != null) {
- myUpdateAlarm.cancelAllRequests();
+ private void addConfigurationConsoles(@NotNull LogFileOptions logFile, @NotNull Condition<String> shouldInclude, @NotNull Set<String> paths, @NotNull RunConfigurationBase runConfiguration) {
+ if (paths.isEmpty()) {
+ return;
}
- }
- public void initLogConsoles(@NotNull RunConfigurationBase base, ProcessHandler startedProcess) {
- List<LogFileOptions> logFiles = base.getAllLogFiles();
- for (LogFileOptions logFile : logFiles) {
- if (logFile.isEnabled()) {
- addConfigurationConsoles(logFile, Conditions.<String>alwaysTrue(), logFile.getPaths());
+ TreeMap<String, String> titleToPath = new TreeMap<String, String>();
+ if (paths.size() == 1) {
+ String path = paths.iterator().next();
+ if (shouldInclude.value(path)) {
+ titleToPath.put(logFile.getName(), path);
}
}
- base.createAdditionalTabComponents(myManager, startedProcess);
- }
-
- private void addConfigurationConsoles(final LogFileOptions logFile, Condition<String> shouldInclude, final Set<String> paths) {
- if (!paths.isEmpty()) {
- final TreeMap<String, String> title2Path = new TreeMap<String, String>();
- if (paths.size() == 1) {
- final String path = paths.iterator().next();
+ else {
+ for (String path : paths) {
if (shouldInclude.value(path)) {
- title2Path.put(logFile.getName(), path);
- }
- }
- else {
- for (String path : paths) {
- if (shouldInclude.value(path)) {
- String title = new File(path).getName();
- if (title2Path.containsKey(title)) {
- title = path;
- }
- title2Path.put(title, path);
+ String title = new File(path).getName();
+ if (titleToPath.containsKey(title)) {
+ title = path;
}
+ titleToPath.put(title, path);
}
}
- for (final String title : title2Path.keySet()) {
- final String path = title2Path.get(title);
- myManager.addLogConsole(title, path, logFile.getCharset(), logFile.isSkipContent() ? new File(path).length() : 0);
- }
+ }
+
+ for (String title : titleToPath.keySet()) {
+ String path = titleToPath.get(title);
+ assert path != null;
+ myManager.addLogConsole(title, path, logFile.getCharset(), logFile.isSkipContent() ? new File(path).length() : 0, runConfiguration);
}
}
}