diff options
Diffstat (limited to 'platform/lang-impl/src/com/intellij/diagnostic/logging')
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); } } } |