From a15d3978d9996455aa846e1caa7f65d87bf12b65 Mon Sep 17 00:00:00 2001 From: Andrey Starovoyt Date: Tue, 29 Apr 2014 14:52:16 +0400 Subject: [PATCH] cleanup after adding postfix templates preview --- .../settings/PostfixDescriptionPanel.java | 93 ++++++++----------- .../settings/PostfixTemplateMetaData.java | 23 ++++- .../PostfixTemplatesConfigurable.java | 11 +-- .../config/BeforeAfterActionMetaData.java | 9 +- .../config/IntentionDescriptionPanel.java | 3 +- 5 files changed, 71 insertions(+), 68 deletions(-) diff --git a/java/java-impl/src/com/intellij/codeInsight/template/postfix/settings/PostfixDescriptionPanel.java b/java/java-impl/src/com/intellij/codeInsight/template/postfix/settings/PostfixDescriptionPanel.java index a97216fb13a5..190f8dd97f6f 100644 --- a/java/java-impl/src/com/intellij/codeInsight/template/postfix/settings/PostfixDescriptionPanel.java +++ b/java/java-impl/src/com/intellij/codeInsight/template/postfix/settings/PostfixDescriptionPanel.java @@ -20,10 +20,11 @@ import com.intellij.codeInsight.intention.impl.config.TextDescriptor; import com.intellij.openapi.Disposable; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.fileTypes.FileType; +import com.intellij.openapi.fileTypes.PlainTextFileType; import com.intellij.openapi.fileTypes.ex.FileTypeManagerEx; import com.intellij.openapi.util.Disposer; -import com.intellij.ui.TitledSeparator; import com.intellij.util.ArrayUtil; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; @@ -38,52 +39,60 @@ class PostfixDescriptionPanel implements Disposable { private JPanel myBeforePanel; private JEditorPane myDescriptionBrowser; + public PostfixDescriptionPanel() { + initializeExamplePanel(myAfterPanel); + initializeExamplePanel(myBeforePanel); + } - public void reset(PostfixTemplateMetaData actionMetaData) { + + public void reset(@NotNull PostfixTemplateMetaData actionMetaData) { + + final TextDescriptor url = actionMetaData.getDescription(); + final String description = getDescription(url); + myDescriptionBrowser.setText(description); + + showUsages(myBeforePanel, ArrayUtil.getFirstElement(actionMetaData.getExampleUsagesBefore())); + showUsages(myAfterPanel, ArrayUtil.getFirstElement(actionMetaData.getExampleUsagesAfter())); + } + + @NotNull + private static String getDescription(TextDescriptor url) { try { - final TextDescriptor url = actionMetaData.getDescription(); - final String description = url == null ? "" : url.getText(); - myDescriptionBrowser.setText(description); - - showUsages(myBeforePanel, ArrayUtil.getFirstElement(actionMetaData.getExampleUsagesBefore())); - showUsages(myAfterPanel, ArrayUtil.getFirstElement(actionMetaData.getExampleUsagesAfter())); + return url.getText(); } catch (IOException e) { LOG.error(e); } + return ""; } - private void showUsages(final JPanel panel, @Nullable final TextDescriptor exampleUsage) throws IOException { - boolean createMode = exampleUsage == null || panel.getComponents().length == 0; - if (createMode) { - panel.setLayout(new BorderLayout()); - panel.removeAll(); - } - + private static void showUsages(@NotNull JPanel panel, @Nullable TextDescriptor exampleUsage) { + String text = ""; + FileType fileType = PlainTextFileType.INSTANCE; if (exampleUsage != null) { - final String name = exampleUsage.getFileName(); - final FileTypeManagerEx fileTypeManager = FileTypeManagerEx.getInstanceEx(); - final String extension = fileTypeManager.getExtension(name); - final FileType fileType = fileTypeManager.getFileTypeByExtension(extension); - - ActionUsagePanel actionUsagePanel; - if (createMode) { - actionUsagePanel = new ActionUsagePanel(); - Disposer.register(this, actionUsagePanel); + try { + text = exampleUsage.getText(); + String name = exampleUsage.getFileName(); + FileTypeManagerEx fileTypeManager = FileTypeManagerEx.getInstanceEx(); + String extension = fileTypeManager.getExtension(name); + fileType = fileTypeManager.getFileTypeByExtension(extension); } - else { - actionUsagePanel = (ActionUsagePanel)panel.getComponent(0); - } - - actionUsagePanel.reset(exampleUsage.getText(), fileType); - - if (createMode) { - panel.add(actionUsagePanel); + catch (IOException e) { + LOG.error(e); } } + + ((ActionUsagePanel)panel.getComponent(0)).reset(text, fileType); panel.repaint(); } + private void initializeExamplePanel(@NotNull JPanel panel) { + panel.setLayout(new BorderLayout()); + ActionUsagePanel actionUsagePanel = new ActionUsagePanel(); + panel.add(actionUsagePanel); + Disposer.register(this, actionUsagePanel); + } + JPanel getComponent() { return myPanel; } @@ -91,24 +100,4 @@ class PostfixDescriptionPanel implements Disposable { @Override public void dispose() { } - - public void init(final int preferredWidth) { - double height = - (myDescriptionBrowser.getSize().getHeight() + myBeforePanel.getSize().getHeight() + myAfterPanel.getSize().getHeight()) / 3; - Dimension newd = new Dimension(preferredWidth, (int)height); - myDescriptionBrowser.setSize(newd); - myDescriptionBrowser.setPreferredSize(newd); - myDescriptionBrowser.setMaximumSize(newd); - myDescriptionBrowser.setMinimumSize(newd); - - myBeforePanel.setSize(newd); - myBeforePanel.setPreferredSize(newd); - myBeforePanel.setMaximumSize(newd); - myBeforePanel.setMinimumSize(newd); - - myAfterPanel.setSize(newd); - myAfterPanel.setPreferredSize(newd); - myAfterPanel.setMaximumSize(newd); - myAfterPanel.setMinimumSize(newd); - } } diff --git a/java/java-impl/src/com/intellij/codeInsight/template/postfix/settings/PostfixTemplateMetaData.java b/java/java-impl/src/com/intellij/codeInsight/template/postfix/settings/PostfixTemplateMetaData.java index a467b186e62c..fd1def0a3266 100644 --- a/java/java-impl/src/com/intellij/codeInsight/template/postfix/settings/PostfixTemplateMetaData.java +++ b/java/java-impl/src/com/intellij/codeInsight/template/postfix/settings/PostfixTemplateMetaData.java @@ -24,6 +24,7 @@ import com.intellij.openapi.util.text.StringUtil; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.lang.UrlClassLoader; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.io.IOException; import java.net.MalformedURLException; @@ -32,9 +33,18 @@ import java.util.List; public final class PostfixTemplateMetaData extends BeforeAfterActionMetaData { + public static final String KEY = "$key"; + + private static final PostfixTemplateMetaData EMPTY_METADATA = new PostfixTemplateMetaData(); private static final Logger LOG = Logger.getInstance("#com.intellij.codeInsight.template.postfix.settings.PostfixTemplateMetaData"); private static final String DESCRIPTION_FOLDER = "postfixTemplates"; - public static final String KEY = "$key"; + + @NotNull + static PostfixTemplateMetaData createMetaData(@Nullable PostfixTemplate template) { + if (template == null) return EMPTY_METADATA; + + return new PostfixTemplateMetaData(template); + } private URL urlDir = null; private PostfixTemplate myTemplate; @@ -44,14 +54,19 @@ public final class PostfixTemplateMetaData extends BeforeAfterActionMetaData { myTemplate = template; } + PostfixTemplateMetaData() { + super(EMPTY_DESCRIPTION, EMPTY_EXAMPLE, EMPTY_EXAMPLE); + } + @NotNull @Override public TextDescriptor[] getExampleUsagesBefore() { - return decorateTextDescription(super.getExampleUsagesBefore()); + return decorateTextDescriptor(super.getExampleUsagesBefore()); } - private TextDescriptor[] decorateTextDescription(TextDescriptor[] before) { + @NotNull + private TextDescriptor[] decorateTextDescriptor(TextDescriptor[] before) { List list = ContainerUtil.newArrayList(); for (final TextDescriptor descriptor : before) { list.add(new TextDescriptor() { @@ -72,7 +87,7 @@ public final class PostfixTemplateMetaData extends BeforeAfterActionMetaData { @NotNull @Override public TextDescriptor[] getExampleUsagesAfter() { - return decorateTextDescription(super.getExampleUsagesAfter()); + return decorateTextDescriptor(super.getExampleUsagesAfter()); } @Override diff --git a/java/java-impl/src/com/intellij/codeInsight/template/postfix/settings/PostfixTemplatesConfigurable.java b/java/java-impl/src/com/intellij/codeInsight/template/postfix/settings/PostfixTemplatesConfigurable.java index 3356244672a3..a2feeb1d8798 100644 --- a/java/java-impl/src/com/intellij/codeInsight/template/postfix/settings/PostfixTemplatesConfigurable.java +++ b/java/java-impl/src/com/intellij/codeInsight/template/postfix/settings/PostfixTemplatesConfigurable.java @@ -109,18 +109,11 @@ public class PostfixTemplatesConfigurable implements SearchableConfigurable, Edi resetDescriptionPanel(); } }); - myDescriptionPanel.setVisible(false); } private void resetDescriptionPanel() { - assert myTemplatesListPanel != null; - PostfixTemplate template = myTemplatesListPanel.getTemplate(); - if (null != template) { - myDescriptionPanel.setVisible(true); - myInnerPostfixDescriptionPanel.reset(new PostfixTemplateMetaData(template)); - } - else { - myDescriptionPanel.setVisible(false); + if (null != myTemplatesListPanel) { + myInnerPostfixDescriptionPanel.reset(PostfixTemplateMetaData.createMetaData(myTemplatesListPanel.getTemplate())); } } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/intention/impl/config/BeforeAfterActionMetaData.java b/platform/lang-impl/src/com/intellij/codeInsight/intention/impl/config/BeforeAfterActionMetaData.java index 3f0f19e42fa4..610ea0acba07 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/intention/impl/config/BeforeAfterActionMetaData.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/intention/impl/config/BeforeAfterActionMetaData.java @@ -38,6 +38,9 @@ import java.util.List; public abstract class BeforeAfterActionMetaData { private static final Logger LOG = Logger.getInstance("#com.intellij.codeInsight.intention.impl.config.BeforeAfterActionMetaData"); + protected static final TextDescriptor[] EMPTY_EXAMPLE = new TextDescriptor[0]; + protected static final TextDescriptor EMPTY_DESCRIPTION = new PlainTextDescriptor("", ""); + @NonNls protected static final String DESCRIPTION_FILE_NAME = "description.html"; @NonNls static final String EXAMPLE_USAGE_URL_SUFFIX = ".template"; @NonNls private static final String BEFORE_TEMPLATE_PREFIX = "before"; @@ -65,7 +68,6 @@ public abstract class BeforeAfterActionMetaData { myDescription = description; } - @NotNull private static TextDescriptor[] retrieveURLs(@NotNull URL descriptionDirectory, @NotNull String prefix, @NotNull String suffix) throws MalformedURLException { @@ -113,7 +115,7 @@ public abstract class BeforeAfterActionMetaData { descriptionDirectory + "'" + (children == null ? "" : "; directory contents: " + Arrays.asList(children)), cause); - return new TextDescriptor[0]; + return EMPTY_EXAMPLE; } return urls.toArray(new TextDescriptor[urls.size()]); } @@ -126,6 +128,7 @@ public abstract class BeforeAfterActionMetaData { } catch (MalformedURLException e) { LOG.error(e); + return EMPTY_EXAMPLE; } } return myExampleUsagesBefore; @@ -139,6 +142,7 @@ public abstract class BeforeAfterActionMetaData { } catch (MalformedURLException e) { LOG.error(e); + return EMPTY_EXAMPLE; } } return myExampleUsagesAfter; @@ -154,6 +158,7 @@ public abstract class BeforeAfterActionMetaData { } catch (MalformedURLException e) { LOG.error(e); + return EMPTY_DESCRIPTION; } } return myDescription; diff --git a/platform/lang-impl/src/com/intellij/codeInsight/intention/impl/config/IntentionDescriptionPanel.java b/platform/lang-impl/src/com/intellij/codeInsight/intention/impl/config/IntentionDescriptionPanel.java index ff829c87fe61..9aacd7d36cb9 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/intention/impl/config/IntentionDescriptionPanel.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/intention/impl/config/IntentionDescriptionPanel.java @@ -33,6 +33,7 @@ import com.intellij.openapi.fileTypes.ex.FileTypeManagerEx; import com.intellij.openapi.options.ShowSettingsUtil; import com.intellij.openapi.project.Project; import com.intellij.openapi.project.ProjectManager; +import com.intellij.openapi.util.text.StringUtil; import com.intellij.ui.HyperlinkLabel; import com.intellij.ui.TitledSeparator; import com.intellij.xml.util.XmlStringUtil; @@ -66,7 +67,7 @@ public class IntentionDescriptionPanel { public void reset(IntentionActionMetaData actionMetaData, String filter) { try { final TextDescriptor url = actionMetaData.getDescription(); - final String description = url == null ? + final String description = StringUtil.isEmpty(url.getText()) ? CodeInsightBundle.message("under.construction.string") : SearchUtil.markup(url.getText(), filter); myDescriptionBrowser.setText(description);