diff --git a/java/java-impl/src/com/intellij/unscramble/UnscrambleDialog.form b/java/java-impl/src/com/intellij/unscramble/UnscrambleDialog.form index 96720321c9fe..27b043d37bea 100644 --- a/java/java-impl/src/com/intellij/unscramble/UnscrambleDialog.form +++ b/java/java-impl/src/com/intellij/unscramble/UnscrambleDialog.form @@ -3,7 +3,7 @@ - + @@ -25,8 +25,8 @@ - - + + @@ -60,7 +60,7 @@ - + @@ -75,6 +75,14 @@ + + + + + + + + diff --git a/java/java-impl/src/com/intellij/unscramble/UnscrambleDialog.java b/java/java-impl/src/com/intellij/unscramble/UnscrambleDialog.java index 66be836490c7..c374fe0f28b5 100644 --- a/java/java-impl/src/com/intellij/unscramble/UnscrambleDialog.java +++ b/java/java-impl/src/com/intellij/unscramble/UnscrambleDialog.java @@ -34,12 +34,10 @@ import com.intellij.openapi.util.registry.Registry; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vcs.ProjectLevelVcsManager; import com.intellij.openapi.vcs.configurable.VcsContentAnnotationConfigurable; -import com.intellij.openapi.vfs.VirtualFile; import com.intellij.ui.GuiUtils; import com.intellij.ui.ListCellRendererWrapper; import com.intellij.ui.TextFieldWithHistory; import com.intellij.util.ArrayUtil; -import com.intellij.util.Consumer; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.text.CharArrayUtil; import org.jetbrains.annotations.NonNls; @@ -78,6 +76,7 @@ public class UnscrambleDialog extends DialogWrapper { private JPanel myUnscramblePanel; private JCheckBox myOnTheFly; private JPanel myBottomPanel; + private JPanel mySettingsPanel; protected AnalyzeStacktraceUtil.StacktraceEditorPanel myStacktraceEditorPanel; private VcsContentAnnotationConfigurable myConfigurable; @@ -91,6 +90,7 @@ public class UnscrambleDialog extends DialogWrapper { public void actionPerformed(ActionEvent e) { UnscrambleSupport unscrambleSupport = getSelectedUnscrambler(); GuiUtils.enableChildren(myLogFileChooserPanel, unscrambleSupport != null); + updateUnscramblerSettings(); } }); myUseUnscrambler.addActionListener(new ActionListener() { @@ -117,6 +117,20 @@ public class UnscrambleDialog extends DialogWrapper { private void useUnscramblerChanged() { boolean selected = myUseUnscrambler.isSelected(); GuiUtils.enableChildren(myUnscramblePanel, selected, myUseUnscrambler); + if (selected) { + updateUnscramblerSettings(); + } + } + + private void updateUnscramblerSettings() { + UnscrambleSupport unscrambleSupport = (UnscrambleSupport)myUnscrambleChooser.getSelectedItem(); + + JComponent settingsComponent = unscrambleSupport == null ? null : unscrambleSupport.createSettingsComponent(); + mySettingsPanel.removeAll(); + if (settingsComponent != null) { + mySettingsPanel.add(settingsComponent, BorderLayout.CENTER); + } + myUnscramblePanel.validate(); } private void reset() { @@ -155,6 +169,7 @@ public class UnscrambleDialog extends DialogWrapper { } useUnscramblerChanged(); + updateUnscramblerSettings(); myStacktraceEditorPanel.pasteTextFromClipboard(); } @@ -386,15 +401,17 @@ public class UnscrambleDialog extends DialogWrapper { private boolean performUnscramble() { UnscrambleSupport selectedUnscrambler = getSelectedUnscrambler(); - return showUnscrambledText(selectedUnscrambler, myLogFile.getText(), myProject, myStacktraceEditorPanel.getText()) != null; + JComponent settings = mySettingsPanel.getComponentCount() == 0 ? null : (JComponent)mySettingsPanel.getComponent(0); + return showUnscrambledText(selectedUnscrambler, myLogFile.getText(), settings, myProject, myStacktraceEditorPanel.getText()) != null; } @Nullable - static RunContentDescriptor showUnscrambledText(@Nullable UnscrambleSupport unscrambleSupport, - String logName, - Project project, - String textToUnscramble) { - String unscrambledTrace = unscrambleSupport == null ? textToUnscramble : unscrambleSupport.unscramble(project,textToUnscramble, logName); + static RunContentDescriptor showUnscrambledText(@Nullable UnscrambleSupport unscrambleSupport, + String logName, + @Nullable T settings, + Project project, + String textToUnscramble) { + String unscrambledTrace = unscrambleSupport == null ? textToUnscramble : unscrambleSupport.unscramble(project,textToUnscramble, logName, settings); if (unscrambledTrace == null) return null; List threadStates = ThreadDumpParser.parse(unscrambledTrace); return addConsole(project, threadStates, unscrambledTrace); diff --git a/java/java-tests/testSrc/com/intellij/unscramble/UnscrambleDialogTest.java b/java/java-tests/testSrc/com/intellij/unscramble/UnscrambleDialogTest.java index 13ab0392285b..fb1c9cdd4f81 100644 --- a/java/java-tests/testSrc/com/intellij/unscramble/UnscrambleDialogTest.java +++ b/java/java-tests/testSrc/com/intellij/unscramble/UnscrambleDialogTest.java @@ -75,7 +75,7 @@ public class UnscrambleDialogTest extends JavaCodeInsightFixtureTestCase { } private void showText(String unscramble) { - RunContentDescriptor descriptor = UnscrambleDialog.showUnscrambledText(null, "foo", getProject(), unscramble); + RunContentDescriptor descriptor = UnscrambleDialog.showUnscrambledText(null, "foo", null, getProject(), unscramble); assertNotNull(descriptor); Disposer.register(getTestRootDisposable(), descriptor); myContent = descriptor; diff --git a/java/openapi/src/com/intellij/unscramble/UnscrambleSupport.java b/java/openapi/src/com/intellij/unscramble/UnscrambleSupport.java index 0035c608b1a8..ec51394c4082 100644 --- a/java/openapi/src/com/intellij/unscramble/UnscrambleSupport.java +++ b/java/openapi/src/com/intellij/unscramble/UnscrambleSupport.java @@ -15,14 +15,22 @@ */ package com.intellij.unscramble; -import com.intellij.openapi.project.Project; import com.intellij.openapi.extensions.ExtensionPointName; +import com.intellij.openapi.project.Project; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -public interface UnscrambleSupport { +import javax.swing.*; + +public interface UnscrambleSupport { ExtensionPointName EP_NAME = ExtensionPointName.create("com.intellij.unscrambleSupport"); - @Nullable - String unscramble(Project project, String text, String logName); + @NotNull String getPresentableName(); + + @Nullable + T createSettingsComponent(); + + @Nullable + String unscramble(@NotNull Project project, @NotNull String text, @NotNull String logName, @Nullable T settings); } \ No newline at end of file