summaryrefslogtreecommitdiff
path: root/platform/lang-impl/src/com/intellij/diagnostic/logging
diff options
context:
space:
mode:
Diffstat (limited to 'platform/lang-impl/src/com/intellij/diagnostic/logging')
-rw-r--r--platform/lang-impl/src/com/intellij/diagnostic/logging/DebuggerLogConsoleManager.java1
-rw-r--r--platform/lang-impl/src/com/intellij/diagnostic/logging/LogConfigurationPanel.java37
-rw-r--r--platform/lang-impl/src/com/intellij/diagnostic/logging/LogConsoleBase.java1
-rw-r--r--platform/lang-impl/src/com/intellij/diagnostic/logging/LogConsoleImpl.java34
-rw-r--r--platform/lang-impl/src/com/intellij/diagnostic/logging/LogConsoleManager.java16
-rw-r--r--platform/lang-impl/src/com/intellij/diagnostic/logging/LogConsoleManagerBase.java96
-rw-r--r--platform/lang-impl/src/com/intellij/diagnostic/logging/LogFilesManager.java133
7 files changed, 97 insertions, 221 deletions
diff --git a/platform/lang-impl/src/com/intellij/diagnostic/logging/DebuggerLogConsoleManager.java b/platform/lang-impl/src/com/intellij/diagnostic/logging/DebuggerLogConsoleManager.java
index 6f619641acc0..c24c0e869b97 100644
--- a/platform/lang-impl/src/com/intellij/diagnostic/logging/DebuggerLogConsoleManager.java
+++ b/platform/lang-impl/src/com/intellij/diagnostic/logging/DebuggerLogConsoleManager.java
@@ -16,6 +16,7 @@
package com.intellij.diagnostic.logging;
+@Deprecated
/**
* User: anna
* Date: 01-Feb-2006
diff --git a/platform/lang-impl/src/com/intellij/diagnostic/logging/LogConfigurationPanel.java b/platform/lang-impl/src/com/intellij/diagnostic/logging/LogConfigurationPanel.java
index b043b3e294a2..305af75de669 100644
--- a/platform/lang-impl/src/com/intellij/diagnostic/logging/LogConfigurationPanel.java
+++ b/platform/lang-impl/src/com/intellij/diagnostic/logging/LogConfigurationPanel.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,7 +13,6 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
package com.intellij.diagnostic.logging;
import com.intellij.diagnostic.DiagnosticBundle;
@@ -32,10 +31,12 @@ import com.intellij.openapi.util.text.StringUtil;
import com.intellij.ui.*;
import com.intellij.ui.components.JBCheckBox;
import com.intellij.ui.table.TableView;
+import com.intellij.util.SmartList;
import com.intellij.util.ui.AbstractTableCellEditor;
import com.intellij.util.ui.CellEditorComponentWithBrowseButton;
import com.intellij.util.ui.ColumnInfo;
import com.intellij.util.ui.ListTableModel;
+import gnu.trove.THashMap;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
@@ -44,7 +45,6 @@ import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
-import java.util.HashMap;
import java.util.List;
import java.util.Map;
@@ -61,19 +61,20 @@ public class LogConfigurationPanel<T extends RunConfigurationBase> extends Setti
private TextFieldWithBrowseButton myOutputFile;
private JCheckBox myShowConsoleOnStdOutCb;
private JCheckBox myShowConsoleOnStdErrCb;
- private final Map<LogFileOptions, PredefinedLogFile> myLog2Predefined = new HashMap<LogFileOptions, PredefinedLogFile>();
- private final List<PredefinedLogFile> myUnresolvedPredefined = new ArrayList<PredefinedLogFile>();
-
- private final ColumnInfo<LogFileOptions, Boolean> IS_SHOW = new MyIsActiveColumnInfo();
- private final ColumnInfo<LogFileOptions, LogFileOptions> FILE = new MyLogFileColumnInfo();
- private final ColumnInfo<LogFileOptions, Boolean> IS_SKIP_CONTENT = new MyIsSkipColumnInfo();
+ private final Map<LogFileOptions, PredefinedLogFile> myLog2Predefined = new THashMap<LogFileOptions, PredefinedLogFile>();
+ private final List<PredefinedLogFile> myUnresolvedPredefined = new SmartList<PredefinedLogFile>();
public LogConfigurationPanel() {
+ ColumnInfo<LogFileOptions, Boolean> IS_SHOW = new MyIsActiveColumnInfo();
+ ColumnInfo<LogFileOptions, LogFileOptions> FILE = new MyLogFileColumnInfo();
+ ColumnInfo<LogFileOptions, Boolean> IS_SKIP_CONTENT = new MyIsSkipColumnInfo();
+
myModel = new ListTableModel<LogFileOptions>(IS_SHOW, FILE, IS_SKIP_CONTENT);
myFilesTable = new TableView<LogFileOptions>(myModel);
myFilesTable.getEmptyText().setText(DiagnosticBundle.message("log.monitor.no.files"));
final JTableHeader tableHeader = myFilesTable.getTableHeader();
+ @SuppressWarnings("ConstantConditions")
final FontMetrics fontMetrics = tableHeader.getFontMetrics(tableHeader.getFont());
int preferredWidth = fontMetrics.stringWidth(IS_SHOW.getName()) + 20;
@@ -109,7 +110,7 @@ public class LogConfigurationPanel<T extends RunConfigurationBase> extends Setti
public void run(AnActionButton button) {
TableUtil.stopEditing(myFilesTable);
final int[] selected = myFilesTable.getSelectedRows();
- if (selected == null || selected.length == 0) return;
+ if (selected.length == 0) return;
for (int i = selected.length - 1; i >= 0; i--) {
myModel.removeRow(selected[i]);
}
@@ -130,8 +131,8 @@ public class LogConfigurationPanel<T extends RunConfigurationBase> extends Setti
@Override
public void run(AnActionButton button) {
final int selectedRow = myFilesTable.getSelectedRow();
- final LogFileOptions selectedOptions = myFilesTable.getSelectedObject();
- showEditorDialog(selectedOptions);
+ //noinspection ConstantConditions
+ showEditorDialog(myFilesTable.getSelectedObject());
myModel.fireTableDataChanged();
myFilesTable.setRowSelectionInterval(selectedRow, selectedRow);
}
@@ -156,7 +157,7 @@ public class LogConfigurationPanel<T extends RunConfigurationBase> extends Setti
TextComponentAccessor.TEXT_FIELD_WHOLE_TEXT);
myRedirectOutputCb.addActionListener(new ActionListener() {
@Override
- public void actionPerformed(ActionEvent e) {
+ public void actionPerformed(@NotNull ActionEvent e) {
myOutputFile.setEnabled(myRedirectOutputCb.isSelected());
}
});
@@ -218,14 +219,14 @@ public class LogConfigurationPanel<T extends RunConfigurationBase> extends Setti
@Override
protected void resetEditorFrom(final RunConfigurationBase configuration) {
ArrayList<LogFileOptions> list = new ArrayList<LogFileOptions>();
- final ArrayList<LogFileOptions> logFiles = configuration.getLogFiles();
+ final List<LogFileOptions> logFiles = configuration.getLogFiles();
for (LogFileOptions setting : logFiles) {
list.add(
new LogFileOptions(setting.getName(), setting.getPathPattern(), setting.isEnabled(), setting.isSkipContent(), setting.isShowAll()));
}
myLog2Predefined.clear();
myUnresolvedPredefined.clear();
- final ArrayList<PredefinedLogFile> predefinedLogFiles = configuration.getPredefinedLogFiles();
+ final List<PredefinedLogFile> predefinedLogFiles = configuration.getPredefinedLogFiles();
for (PredefinedLogFile predefinedLogFile : predefinedLogFiles) {
PredefinedLogFile logFile = new PredefinedLogFile(predefinedLogFile);
final LogFileOptions options = configuration.getOptionsForPredefinedLogFile(logFile);
@@ -306,8 +307,9 @@ public class LogConfigurationPanel<T extends RunConfigurationBase> extends Setti
@Override
public TableCellRenderer getRenderer(final LogFileOptions p0) {
return new DefaultTableCellRenderer() {
+ @NotNull
@Override
- public Component getTableCellRendererComponent(JTable table,
+ public Component getTableCellRendererComponent(@NotNull JTable table,
Object value,
boolean isSelected,
boolean hasFocus,
@@ -315,6 +317,7 @@ public class LogConfigurationPanel<T extends RunConfigurationBase> extends Setti
int column) {
final Component renderer = super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
setText(((LogFileOptions)value).getName());
+ //noinspection ConstantConditions
setBackground(isSelected ? table.getSelectionBackground() : table.getBackground());
setBorder(null);
return renderer;
@@ -418,7 +421,7 @@ public class LogConfigurationPanel<T extends RunConfigurationBase> extends Setti
getChildComponent().setBorder(null);
myComponent.getComponentWithButton().getButton().addActionListener(new ActionListener() {
@Override
- public void actionPerformed(ActionEvent e) {
+ public void actionPerformed(@NotNull ActionEvent e) {
showEditorDialog(myLogFileOptions);
JTextField textField = getChildComponent();
textField.setText(myLogFileOptions.getName());
diff --git a/platform/lang-impl/src/com/intellij/diagnostic/logging/LogConsoleBase.java b/platform/lang-impl/src/com/intellij/diagnostic/logging/LogConsoleBase.java
index c6226b65035e..f5882d92bcb4 100644
--- a/platform/lang-impl/src/com/intellij/diagnostic/logging/LogConsoleBase.java
+++ b/platform/lang-impl/src/com/intellij/diagnostic/logging/LogConsoleBase.java
@@ -249,6 +249,7 @@ public abstract class LogConsoleBase extends AdditionalTabComponent implements L
activate();
}
+ @NotNull
@Override
public String getTabTitle() {
return myTitle;
diff --git a/platform/lang-impl/src/com/intellij/diagnostic/logging/LogConsoleImpl.java b/platform/lang-impl/src/com/intellij/diagnostic/logging/LogConsoleImpl.java
index 5933634dfcbc..1f8a48d7c605 100644
--- a/platform/lang-impl/src/com/intellij/diagnostic/logging/LogConsoleImpl.java
+++ b/platform/lang-impl/src/com/intellij/diagnostic/logging/LogConsoleImpl.java
@@ -17,7 +17,7 @@
package com.intellij.diagnostic.logging;
import com.intellij.openapi.project.Project;
-import com.intellij.openapi.util.io.FileUtil;
+import com.intellij.openapi.util.io.FileUtilRt;
import com.intellij.psi.search.GlobalSearchScope;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
@@ -44,7 +44,7 @@ public abstract class LogConsoleImpl extends LogConsoleBase {
@NotNull File file,
@NotNull Charset charset,
long skippedContents,
- String title,
+ @NotNull String title,
final boolean buildInActions) {
this(project, file, charset, skippedContents, title, buildInActions, GlobalSearchScope.allScope(project));
}
@@ -53,7 +53,7 @@ public abstract class LogConsoleImpl extends LogConsoleBase {
@NotNull File file,
@NotNull Charset charset,
long skippedContents,
- String title,
+ @NotNull String title,
final boolean buildInActions,
final GlobalSearchScope searchScope) {
super(project, getReader(file, charset, skippedContents), title, buildInActions, new DefaultLogFilterModel(project),
@@ -64,27 +64,30 @@ public abstract class LogConsoleImpl extends LogConsoleBase {
}
@Nullable
- private static Reader getReader(@NotNull final File file, @NotNull final Charset charset, final long skippedContents) {
- Reader reader = null;
+ private static Reader getReader(@NotNull File file, @NotNull Charset charset, long skippedContents) {
try {
try {
- final FileInputStream inputStream = new FileInputStream(file);
- reader = new BufferedReader(new InputStreamReader(inputStream, charset));
- if (file.length() >= skippedContents) { //do not skip forward
- //noinspection ResultOfMethodCallIgnored
- inputStream.skip(skippedContents);
+ @SuppressWarnings("IOResourceOpenedButNotSafelyClosed")
+ FileInputStream inputStream = new FileInputStream(file);
+ //do not skip forward
+ if (file.length() >= skippedContents) {
+ long skipped = 0;
+ while (skipped < skippedContents) {
+ skipped += inputStream.skip(skippedContents - skipped);
+ }
}
+ return new BufferedReader(new InputStreamReader(inputStream, charset));
}
catch (FileNotFoundException ignored) {
- if (FileUtil.createIfDoesntExist(file)) {
- reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), charset));
+ if (FileUtilRt.createIfNotExists(file)) {
+ return new BufferedReader(new InputStreamReader(new FileInputStream(file), charset));
}
+ return null;
}
}
catch (Throwable ignored) {
- reader = null;
+ return null;
}
- return reader;
}
@Override
@@ -104,9 +107,10 @@ public abstract class LogConsoleImpl extends LogConsoleBase {
return null;
}
- final long length = myFile.length();
+ long length = myFile.length();
if (length < myOldLength) {
reader.close();
+ //noinspection IOResourceOpenedButNotSafelyClosed
reader = new BufferedReader(new InputStreamReader(new FileInputStream(myFile), myCharset));
}
myOldLength = length;
diff --git a/platform/lang-impl/src/com/intellij/diagnostic/logging/LogConsoleManager.java b/platform/lang-impl/src/com/intellij/diagnostic/logging/LogConsoleManager.java
index 08407236006d..e5807c674b97 100644
--- a/platform/lang-impl/src/com/intellij/diagnostic/logging/LogConsoleManager.java
+++ b/platform/lang-impl/src/com/intellij/diagnostic/logging/LogConsoleManager.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,22 +13,16 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
package com.intellij.diagnostic.logging;
import com.intellij.execution.configurations.AdditionalTabComponentManager;
+import com.intellij.execution.configurations.RunConfigurationBase;
import org.jetbrains.annotations.NotNull;
import java.nio.charset.Charset;
-import java.io.Reader;
-
-/**
- * User: anna
- * Date: 01-Feb-2006
- */
public interface LogConsoleManager extends AdditionalTabComponentManager {
- void addLogConsole(final String name, final String path, @NotNull Charset charset, final long skippedContent);
- void addLogConsole(final String name, Reader reader, final String id);
- void removeLogConsole(final String pathOrId);
+ void addLogConsole(@NotNull String name, @NotNull String path, @NotNull Charset charset, long skippedContent, @NotNull RunConfigurationBase runConfiguration);
+
+ void removeLogConsole(@NotNull String pathOrId);
}
diff --git a/platform/lang-impl/src/com/intellij/diagnostic/logging/LogConsoleManagerBase.java b/platform/lang-impl/src/com/intellij/diagnostic/logging/LogConsoleManagerBase.java
index cb034daeaf5a..6e65ede4e04e 100644
--- a/platform/lang-impl/src/com/intellij/diagnostic/logging/LogConsoleManagerBase.java
+++ b/platform/lang-impl/src/com/intellij/diagnostic/logging/LogConsoleManagerBase.java
@@ -1,5 +1,5 @@
/*
- * Copyright 2000-2012 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.
@@ -16,8 +16,8 @@
package com.intellij.diagnostic.logging;
import com.intellij.execution.configurations.RunConfigurationBase;
+import com.intellij.execution.configurations.RunProfile;
import com.intellij.execution.process.ProcessHandler;
-import com.intellij.execution.runners.ExecutionEnvironment;
import com.intellij.execution.ui.RunnerLayoutUi;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.project.Project;
@@ -28,93 +28,42 @@ import com.intellij.ui.content.Content;
import com.intellij.ui.content.ContentManagerAdapter;
import com.intellij.ui.content.ContentManagerEvent;
import com.intellij.util.ArrayUtil;
+import gnu.trove.THashMap;
import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
import javax.swing.*;
import java.io.File;
-import java.io.Reader;
import java.nio.charset.Charset;
-import java.util.HashMap;
import java.util.Map;
-/**
- * Created by IntelliJ IDEA.
- * User: michael.golubev
- */
public abstract class LogConsoleManagerBase implements LogConsoleManager, Disposable {
-
private final Project myProject;
-
- private final Map<AdditionalTabComponent, Content> myAdditionalContent = new HashMap<AdditionalTabComponent, Content>();
-
- private ExecutionEnvironment myEnvironment;
+ private final Map<AdditionalTabComponent, Content> myAdditionalContent = new THashMap<AdditionalTabComponent, Content>();
private final GlobalSearchScope mySearchScope;
- /**
- * @deprecated use {@link #LogConsoleManagerBase(com.intellij.openapi.project.Project, com.intellij.psi.search.GlobalSearchScope)}
- * to remove in IDEA 15
- */
- @SuppressWarnings("UnusedDeclaration")
- protected LogConsoleManagerBase(@NotNull Project project) {
- this(project, GlobalSearchScope.allScope(project));
- }
-
protected LogConsoleManagerBase(@NotNull Project project, @NotNull GlobalSearchScope searchScope) {
myProject = project;
mySearchScope = searchScope;
}
- protected final Project getProject() {
- return myProject;
- }
-
- public void setEnvironment(@NotNull ExecutionEnvironment environment) {
- myEnvironment = environment;
- }
-
- protected final ExecutionEnvironment getEnvironment() {
- return myEnvironment;
- }
-
@Override
- public void addLogConsole(final String name, final String path, @NotNull Charset charset, final long skippedContent) {
- addLogConsole(name, path, charset, skippedContent, getDefaultIcon());
+ public void addLogConsole(@NotNull String name, @NotNull String path, @NotNull Charset charset, long skippedContent, @NotNull RunConfigurationBase runConfiguration) {
+ addLogConsole(name, path, charset, skippedContent, getDefaultIcon(), runConfiguration);
}
- public void addLogConsole(final String name, final String path, @NotNull Charset charset, final long skippedContent, Icon icon) {
+ public void addLogConsole(final String name, final String path, @NotNull Charset charset, final long skippedContent, Icon icon, @Nullable RunProfile runProfile) {
doAddLogConsole(new LogConsoleImpl(myProject, new File(path), charset, skippedContent, name, false, mySearchScope) {
-
@Override
public boolean isActive() {
return isConsoleActive(path);
}
- }, path, icon);
- }
-
- @Override
- public void addLogConsole(String name, Reader reader, final String id) {
- addLogConsole(name, reader, id, getDefaultIcon());
- }
-
- public void addLogConsole(String name, Reader reader, final String id, Icon icon) {
- doAddLogConsole(new LogConsoleBase(myProject,
- reader,
- name,
- false,
- new DefaultLogFilterModel(myProject), mySearchScope) {
-
- @Override
- public boolean isActive() {
- return isConsoleActive(id);
- }
- }, id, icon);
+ }, path, icon, runProfile);
}
- private void doAddLogConsole(final LogConsoleBase log,
- final String id,
- Icon icon) {
- if (myEnvironment != null && myEnvironment.getRunProfile() instanceof RunConfigurationBase) {
- ((RunConfigurationBase)myEnvironment.getRunProfile()).customizeLogConsole(log);
+ private void doAddLogConsole(@NotNull final LogConsoleBase log, String id, Icon icon, @Nullable RunProfile runProfile) {
+ if (runProfile instanceof RunConfigurationBase) {
+ ((RunConfigurationBase)runProfile).customizeLogConsole(log);
}
log.attachStopLogConsoleTrackingListener(getProcessHandler());
addAdditionalTabComponent(log, id, icon);
@@ -133,33 +82,28 @@ public abstract class LogConsoleManagerBase implements LogConsoleManager, Dispos
}
@Override
- public void removeLogConsole(final String path) {
- final Content content = getUi().findContent(path);
+ public void removeLogConsole(@NotNull String path) {
+ Content content = getUi().findContent(path);
if (content != null) {
- final LogConsoleBase log = (LogConsoleBase)content.getComponent();
- removeAdditionalTabComponent(log);
+ removeAdditionalTabComponent((LogConsoleBase)content.getComponent());
}
}
@Override
- public void addAdditionalTabComponent(final AdditionalTabComponent tabComponent, final String id) {
+ public void addAdditionalTabComponent(@NotNull AdditionalTabComponent tabComponent, @NotNull String id) {
addAdditionalTabComponent(tabComponent, id, getDefaultIcon());
}
- public Content addAdditionalTabComponent(final AdditionalTabComponent tabComponent, String id, Icon icon) {
- final Content logContent = createLogContent(tabComponent, id, icon);
+ public Content addAdditionalTabComponent(@NotNull AdditionalTabComponent tabComponent, @NotNull String id, @Nullable Icon icon) {
+ Content logContent = getUi().createContent(id, (ComponentWithActions)tabComponent, tabComponent.getTabTitle(), icon,
+ tabComponent.getPreferredFocusableComponent());
myAdditionalContent.put(tabComponent, logContent);
getUi().addContent(logContent);
return logContent;
}
- protected Content createLogContent(AdditionalTabComponent tabComponent, String id, Icon icon) {
- return getUi().createContent(id, (ComponentWithActions)tabComponent, tabComponent.getTabTitle(), icon,
- tabComponent.getPreferredFocusableComponent());
- }
-
@Override
- public void removeAdditionalTabComponent(AdditionalTabComponent component) {
+ public void removeAdditionalTabComponent(@NotNull AdditionalTabComponent component) {
Disposer.dispose(component);
final Content content = myAdditionalContent.remove(component);
if (!getUi().isDisposed()) {
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);
}
}
}