diff options
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.java | 133 |
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); } } } |