diff --git a/java/idea-ui/src/com/intellij/facet/impl/ui/libraries/LibraryOptionsPanel.java b/java/idea-ui/src/com/intellij/facet/impl/ui/libraries/LibraryOptionsPanel.java index f9bf66fe3977..e96687310423 100644 --- a/java/idea-ui/src/com/intellij/facet/impl/ui/libraries/LibraryOptionsPanel.java +++ b/java/idea-ui/src/com/intellij/facet/impl/ui/libraries/LibraryOptionsPanel.java @@ -51,6 +51,7 @@ import com.intellij.util.PathUtil; import com.intellij.util.PlatformIcons; import com.intellij.util.download.DownloadableFileSetVersions; import com.intellij.util.ui.RadioButtonEnumModel; +import com.intellij.xml.util.XmlStringUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -374,7 +375,7 @@ public class LibraryOptionsPanel implements Disposable { "name", 10)); } ((CardLayout)myConfigurationPanel.getLayout()).show(myConfigurationPanel, showConfigurePanel ? "configure" : "empty"); - myMessageLabel.setText("" + message + ""); + myMessageLabel.setText(XmlStringUtil.wrapInHtml(message)); } private String getDownloadFilesMessage() { diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/ArtifactErrorPanel.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/ArtifactErrorPanel.java index 73749bb6f08e..45e6a53084b8 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/ArtifactErrorPanel.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/ArtifactErrorPanel.java @@ -23,6 +23,7 @@ import com.intellij.openapi.ui.popup.util.BaseListPopupStep; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.ui.update.Activatable; import com.intellij.util.ui.update.UiNotifyConnector; +import com.intellij.xml.util.XmlStringUtil; import org.jetbrains.annotations.NotNull; import javax.swing.*; @@ -86,7 +87,7 @@ public class ArtifactErrorPanel { public void showError(@NotNull String message, @NotNull List quickFixes) { myErrorLabel.setVisible(true); - final String errorText = "" + message + ""; + final String errorText = XmlStringUtil.wrapInHtml(message); if (myErrorLabel.isShowing()) { myErrorLabel.setText(errorText); } diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/nodes/PackagingElementNode.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/nodes/PackagingElementNode.java index 064ec573b096..590023877144 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/nodes/PackagingElementNode.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/nodes/PackagingElementNode.java @@ -31,6 +31,7 @@ import com.intellij.ui.treeStructure.SimpleNode; import com.intellij.util.ArrayUtil; import com.intellij.util.SmartList; import com.intellij.util.StringBuilderSpinAllocator; +import com.intellij.xml.util.XmlStringUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -60,7 +61,7 @@ public class PackagingElementNode> extends Artifac myPackagingElements.add(packagingElement); } - @Nullable + @Nullable public CompositePackagingElement getParentElement(PackagingElement element) { return myParentElements.get(element); } @@ -105,13 +106,11 @@ public class PackagingElementNode> extends Artifac final String tooltip; boolean isError = false; try { - buffer.append(""); for (ArtifactProblemDescription problem : problems) { isError |= problem.getSeverity() == ProjectStructureProblemType.Severity.ERROR; buffer.append(problem.getMessage(false)).append("
"); } - buffer.append(""); - tooltip = buffer.toString(); + tooltip = XmlStringUtil.wrapInHtml(buffer); } finally { StringBuilderSpinAllocator.dispose(buffer); diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/classpath/LibraryItem.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/classpath/LibraryItem.java index 54a43d8387b4..06ffc86d6760 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/classpath/LibraryItem.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/classpath/LibraryItem.java @@ -23,6 +23,7 @@ import com.intellij.openapi.roots.libraries.Library; import com.intellij.openapi.roots.ui.configuration.libraries.LibraryPresentationManager; import com.intellij.openapi.roots.ui.configuration.projectRoot.StructureConfigurableContext; import com.intellij.openapi.util.text.StringUtil; +import com.intellij.xml.util.XmlStringUtil; import java.util.List; @@ -60,6 +61,6 @@ class LibraryItem extends ClasspathTableItem { final List descriptions = LibraryPresentationManager.getInstance().getDescriptions(library, myContext); if (descriptions.isEmpty()) return null; - return "" + StringUtil.join(descriptions, "
") + ""; + return XmlStringUtil.wrapInHtml(StringUtil.join(descriptions, "
")); } } diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/daemon/LibraryProjectStructureElement.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/daemon/LibraryProjectStructureElement.java index b44ab87d8ae9..930cb514a80a 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/daemon/LibraryProjectStructureElement.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/projectRoot/daemon/LibraryProjectStructureElement.java @@ -36,6 +36,7 @@ import com.intellij.openapi.ui.NamedConfigurable; import com.intellij.openapi.util.ActionCallback; import com.intellij.openapi.util.text.StringUtil; import com.intellij.util.PathUtil; +import com.intellij.xml.util.XmlStringUtil; import org.jetbrains.annotations.NotNull; import java.lang.reflect.InvocationHandler; @@ -93,14 +94,12 @@ public class LibraryProjectStructureElement extends ProjectStructureElement { private static String createInvalidRootsDescription(List invalidClasses, String rootName, String libraryName) { StringBuilder buffer = new StringBuilder(); - buffer.append(""); buffer.append("Library '").append(StringUtil.escapeXml(libraryName)).append("' has broken " + rootName + " " + StringUtil.pluralize("path", invalidClasses.size()) + ":"); for (String url : invalidClasses) { buffer.append("
  "); buffer.append(PathUtil.toPresentableUrl(url)); } - buffer.append(""); - return buffer.toString(); + return XmlStringUtil.wrapInHtml(buffer); } @NotNull @@ -134,7 +133,7 @@ public class LibraryProjectStructureElement extends ProjectStructureElement { final Library source = realLibrary instanceof LibraryImpl? ((LibraryImpl)realLibrary).getSource() : null; return source != null ? source : myLibrary; } - + @Override public int hashCode() { return System.identityHashCode(getSourceOrThis()); diff --git a/java/java-impl/src/com/intellij/refactoring/typeCook/TypeCookDialog.java b/java/java-impl/src/com/intellij/refactoring/typeCook/TypeCookDialog.java index 91387299d8af..c176555283d4 100644 --- a/java/java-impl/src/com/intellij/refactoring/typeCook/TypeCookDialog.java +++ b/java/java-impl/src/com/intellij/refactoring/typeCook/TypeCookDialog.java @@ -18,13 +18,13 @@ package com.intellij.refactoring.typeCook; import com.intellij.openapi.help.HelpManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.text.StringUtil; -import com.intellij.psi.*; +import com.intellij.psi.PsiElement; import com.intellij.refactoring.HelpID; import com.intellij.refactoring.JavaRefactoringSettings; import com.intellij.refactoring.RefactoringBundle; import com.intellij.refactoring.ui.RefactoringDialog; -import com.intellij.ui.IdeBorderFactory; import com.intellij.usageView.UsageViewUtil; +import com.intellij.xml.util.XmlStringUtil; import javax.swing.*; import java.awt.*; @@ -56,7 +56,7 @@ public class TypeCookDialog extends RefactoringDialog { init(); - StringBuffer name = new StringBuffer(""); + StringBuffer name = new StringBuffer(); myElements = elements; for (int i = 0; i < elements.length; i++) { @@ -69,9 +69,7 @@ public class TypeCookDialog extends RefactoringDialog { } } - name.append(""); - - myClassNameLabel.setText(name.toString()); + myClassNameLabel.setText(XmlStringUtil.wrapInHtml(name)); } protected JComponent createCenterPanel() { diff --git a/platform/lang-api/src/com/intellij/codeInspection/ProblemsHolder.java b/platform/lang-api/src/com/intellij/codeInspection/ProblemsHolder.java index 027366df9a2a..bbb2d2c5a7cd 100644 --- a/platform/lang-api/src/com/intellij/codeInspection/ProblemsHolder.java +++ b/platform/lang-api/src/com/intellij/codeInspection/ProblemsHolder.java @@ -30,6 +30,7 @@ import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.psi.PsiReference; import com.intellij.psi.util.PsiTreeUtil; +import com.intellij.xml.util.XmlStringUtil; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -100,13 +101,7 @@ public class ProblemsHolder { assert vFile != null; final String path = FileUtil.toSystemIndependentName(vFile.getPath()); - String description = problem.getDescriptionTemplate(); - if (description.startsWith("")) { - description = description.replace("", "").replace("", ""); - } - if (description.startsWith("")) { - description = description.replace("", "").replace("", ""); - } + String description = XmlStringUtil.stripHtml(problem.getDescriptionTemplate()); final String template = InspectionsBundle.message("inspection.redirect.template", diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/HighlightInfo.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/HighlightInfo.java index da876dd5839d..550698b8c485 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/HighlightInfo.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/HighlightInfo.java @@ -111,13 +111,13 @@ public class HighlightInfo implements Segment { String description = this.description; if (toolTip == null || description == null || !toolTip.contains(DESCRIPTION_PLACEHOLDER)) return toolTip; String decoded = toolTip.replace(DESCRIPTION_PLACEHOLDER, XmlStringUtil.escapeString(description)); - String niceTooltip = wrapInHtml(decoded); + String niceTooltip = XmlStringUtil.wrapInHtml(decoded); return niceTooltip; } private static String encodeTooltip(String toolTip, String description) { if (toolTip == null || description == null) return toolTip; - String unescaped = StringUtil.unescapeXml(stripHtml(toolTip)); + String unescaped = StringUtil.unescapeXml(XmlStringUtil.stripHtml(toolTip)); if (unescaped.contains(description)) { String encoded = unescaped.replace(description, DESCRIPTION_PLACEHOLDER); @@ -248,7 +248,7 @@ public class HighlightInfo implements Segment { @Nullable @NonNls private static String htmlEscapeToolTip(@Nullable String unescapedTooltip) { - return unescapedTooltip == null ? null : wrapInHtml(XmlStringUtil.escapeString(unescapedTooltip)); + return unescapedTooltip == null ? null : XmlStringUtil.wrapInHtml(XmlStringUtil.escapeString(unescapedTooltip)); } @NotNull @@ -844,26 +844,6 @@ public class HighlightInfo implements Segment { return highlighter.getDocument().getText(TextRange.create(highlighter)); } - @NonNls private static final String HTML_HEADER = ""; - @NonNls private static final String BODY_HEADER = ""; - @NonNls private static final String HTML_FOOTER = ""; - @NonNls private static final String BODY_FOOTER = ""; - @NotNull - protected static String wrapInHtml(@NotNull CharSequence result) { - return HTML_HEADER + result + HTML_FOOTER; - } - - @NotNull - protected static String stripHtml(@NotNull String toolTip) { - toolTip = StringUtil.trimStart(toolTip, HTML_HEADER); - toolTip = StringUtil.trimStart(toolTip, BODY_HEADER); - toolTip = StringUtil.trimEnd(toolTip, HTML_FOOTER); - toolTip = StringUtil.trimEnd(toolTip, BODY_FOOTER); - return toolTip; - } - - - // Deprecated methods for plugin compatibility diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/HighlightInfoComposite.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/HighlightInfoComposite.java index 5c852b04508b..bb25859de6fb 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/HighlightInfoComposite.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/HighlightInfoComposite.java @@ -23,6 +23,7 @@ import com.intellij.openapi.editor.RangeMarker; import com.intellij.openapi.util.Pair; import com.intellij.openapi.util.TextRange; import com.intellij.util.containers.ContainerUtil; +import com.intellij.xml.util.XmlStringUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -84,13 +85,13 @@ public class HighlightInfoComposite extends HighlightInfo { if (result.length() != 0) { result.append(LINE_BREAK); } - toolTip = stripHtml(toolTip); + toolTip = XmlStringUtil.stripHtml(toolTip); result.append(toolTip); } } if (result.length() == 0) { return null; } - return wrapInHtml(result); + return XmlStringUtil.wrapInHtml(result); } } diff --git a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/LocalInspectionsPass.java b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/LocalInspectionsPass.java index 2c5870612130..1e8b5771921d 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/LocalInspectionsPass.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/daemon/impl/LocalInspectionsPass.java @@ -653,7 +653,7 @@ public class LocalInspectionsPass extends ProgressableTextEditorHighlightingPass if (!inspectionProfile.isToolEnabled(key, myFile)) return null; HighlightInfoType type = new HighlightInfoType.HighlightInfoTypeImpl(level.getSeverity(element), level.getAttributesKey()); - final String plainMessage = message.startsWith("") ? StringUtil.unescapeXml(message.replaceAll("<[^>]*>", "")) : message; + final String plainMessage = message.startsWith("") ? StringUtil.unescapeXml(XmlStringUtil.stripHtml(message).replaceAll("<[^>]*>", "")) : message; @NonNls final String link = " ")) { - tooltip = HighlightInfo.wrapInHtml(HighlightInfo.stripHtml(message) + link); + tooltip = XmlStringUtil.wrapInHtml(XmlStringUtil.stripHtml(message) + link); } else { - tooltip = HighlightInfo.wrapInHtml(XmlStringUtil.escapeString(message) + link); + tooltip = XmlStringUtil.wrapInHtml(XmlStringUtil.escapeString(message) + link); } } HighlightInfo highlightInfo = highlightInfoFromDescriptor(descriptor, type, plainMessage, tooltip,element); diff --git a/platform/lang-impl/src/com/intellij/codeInsight/hint/ParameterInfoComponent.java b/platform/lang-impl/src/com/intellij/codeInsight/hint/ParameterInfoComponent.java index cb8f275d2a51..1ba508a96b1e 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/hint/ParameterInfoComponent.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/hint/ParameterInfoComponent.java @@ -28,6 +28,7 @@ import com.intellij.ui.JBColor; import com.intellij.ui.ScrollPaneFactory; import com.intellij.ui.SideBorder; import com.intellij.util.ui.UIUtil; +import com.intellij.xml.util.XmlStringUtil; import org.jetbrains.annotations.NotNull; import javax.swing.*; @@ -387,7 +388,7 @@ class ParameterInfoComponent extends JPanel { faultMap.put(highlightRange.getEndOffset(), endTag.length()); } - return "" + labelText.toString() + ""; + return XmlStringUtil.wrapInHtml(labelText); } private String getTag(@NotNull final String tagValue) { diff --git a/platform/lang-impl/src/com/intellij/codeInspection/export/HTMLExporter.java b/platform/lang-impl/src/com/intellij/codeInspection/export/HTMLExporter.java index 95ceb7b3d419..a6e25849d3aa 100644 --- a/platform/lang-impl/src/com/intellij/codeInspection/export/HTMLExporter.java +++ b/platform/lang-impl/src/com/intellij/codeInspection/export/HTMLExporter.java @@ -82,7 +82,7 @@ public class HTMLExporter { buf.append("
"); } - public static void writeFile(String folder, @NonNls String fileName, StringBuffer buf, final Project project) { + public static void writeFile(String folder, @NonNls String fileName, CharSequence buf, final Project project) { ProgressIndicator indicator = ProgressManager.getInstance().getProgressIndicator(); final String fullPath = folder + File.separator + fileName; diff --git a/platform/lang-impl/src/com/intellij/codeInspection/ui/Browser.java b/platform/lang-impl/src/com/intellij/codeInspection/ui/Browser.java index 2d7d9a2d8327..01cff42c8729 100644 --- a/platform/lang-impl/src/com/intellij/codeInspection/ui/Browser.java +++ b/platform/lang-impl/src/com/intellij/codeInspection/ui/Browser.java @@ -39,6 +39,7 @@ import com.intellij.psi.util.PsiModificationTracker; import com.intellij.ui.ScrollPaneFactory; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.ui.UIUtil; +import com.intellij.xml.util.XmlStringUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.Nullable; @@ -422,7 +423,7 @@ class Browser extends JPanel { showEmpty(); return; } - @NonNls StringBuffer page = new StringBuffer(""); + @NonNls StringBuffer page = new StringBuffer(); page.append(""); page.append("
"); HTMLComposer.appendHeading(page, InspectionsBundle.message("inspection.tool.in.browser.id.title")); @@ -446,9 +447,10 @@ class Browser extends JPanel { page.append(UIUtil.getHtmlBody(description)); page.append("
"); - myHTMLViewer.setText(page.toString()); + myHTMLViewer.setText(XmlStringUtil.wrapInHtml(page)); setupStyle(); - } finally { + } + finally { myCurrentEntity = null; } } diff --git a/platform/lang-impl/src/com/intellij/conversion/impl/ui/ConvertProjectDialog.java b/platform/lang-impl/src/com/intellij/conversion/impl/ui/ConvertProjectDialog.java index fc7dbd5daf1b..e6eaf0c3b608 100644 --- a/platform/lang-impl/src/com/intellij/conversion/impl/ui/ConvertProjectDialog.java +++ b/platform/lang-impl/src/com/intellij/conversion/impl/ui/ConvertProjectDialog.java @@ -28,6 +28,7 @@ import com.intellij.openapi.ui.DialogWrapper; import com.intellij.openapi.ui.Messages; import com.intellij.openapi.util.io.FileUtil; import com.intellij.util.containers.HashSet; +import com.intellij.xml.util.XmlStringUtil; import org.jetbrains.annotations.NonNls; import javax.swing.*; @@ -67,7 +68,7 @@ public class ConvertProjectDialog extends DialogWrapper { myBackupDir = ProjectConversionUtil.getBackupDir(context.getProjectBaseDir()); myTextPane.setSize(new Dimension(350, Integer.MAX_VALUE)); - StringBuilder message = new StringBuilder(""); + StringBuilder message = new StringBuilder(); if (myConversionRunners.size() == 1 && myConversionRunners.get(0).getProvider().getConversionDialogText(context) != null) { message.append(myConversionRunners.get(0).getProvider().getConversionDialogText(context)); } @@ -76,8 +77,7 @@ public class ConvertProjectDialog extends DialogWrapper { ApplicationNamesInfo.getInstance().getFullProductName())); } message.append(IdeBundle.message("conversion.dialog.text.2", myBackupDir.getAbsolutePath())); - message.append(""); - Messages.configureMessagePaneUi(myTextPane, message.toString(), false); + Messages.configureMessagePaneUi(myTextPane, XmlStringUtil.wrapInHtml(message), false); myTextPane.addHyperlinkListener(new HyperlinkListener() { @Override diff --git a/platform/lang-impl/src/com/intellij/packageDependencies/ui/DependenciesPanel.java b/platform/lang-impl/src/com/intellij/packageDependencies/ui/DependenciesPanel.java index e12eac5ac439..08cd1900d7e1 100644 --- a/platform/lang-impl/src/com/intellij/packageDependencies/ui/DependenciesPanel.java +++ b/platform/lang-impl/src/com/intellij/packageDependencies/ui/DependenciesPanel.java @@ -61,6 +61,7 @@ import com.intellij.usageView.UsageViewBundle; import com.intellij.util.*; import com.intellij.util.ui.UIUtil; import com.intellij.util.ui.tree.TreeUtil; +import com.intellij.xml.util.XmlStringUtil; import org.jdom.Document; import org.jdom.Element; import org.jetbrains.annotations.NonNls; @@ -806,7 +807,7 @@ public class DependenciesPanel extends JPanel implements Disposable, DataProvide return true; } }); - final JEditorPane pane = new JEditorPane(UIUtil.HTML_MIME, "" + buf.toString()+ ""); + final JEditorPane pane = new JEditorPane(UIUtil.HTML_MIME, XmlStringUtil.wrapInHtml(buf)); pane.setForeground(JBColor.foreground()); pane.setBackground(HintUtil.INFORMATION_COLOR); pane.setOpaque(true); diff --git a/platform/lang-impl/src/com/intellij/refactoring/rename/RenameDialog.java b/platform/lang-impl/src/com/intellij/refactoring/rename/RenameDialog.java index d24d56aebcde..00d9b8d7eed1 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/rename/RenameDialog.java +++ b/platform/lang-impl/src/com/intellij/refactoring/rename/RenameDialog.java @@ -36,6 +36,7 @@ import com.intellij.ui.NonFocusableCheckBox; import com.intellij.usageView.UsageViewUtil; import com.intellij.util.ArrayUtil; import com.intellij.util.Function; +import com.intellij.xml.util.XmlStringUtil; import com.intellij.xml.util.XmlTagUtilBase; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -78,7 +79,8 @@ public class RenameDialog extends RefactoringDialog { createNewNameComponent(); init(); - myNameLabel.setText("" + XmlTagUtilBase.escapeString(RefactoringBundle.message("rename.0.and.its.usages.to", getFullName()), false) + ""); + myNameLabel.setText(XmlStringUtil.wrapInHtml( + XmlTagUtilBase.escapeString(RefactoringBundle.message("rename.0.and.its.usages.to", getFullName()), false))); boolean toSearchInComments = isToSearchInCommentsForRename(); myCbSearchInComments.setSelected(toSearchInComments); diff --git a/platform/lang-impl/src/com/intellij/unscramble/AnnotateStackTraceAction.java b/platform/lang-impl/src/com/intellij/unscramble/AnnotateStackTraceAction.java index 7e6c5ea51ed8..50af08d3dddb 100644 --- a/platform/lang-impl/src/com/intellij/unscramble/AnnotateStackTraceAction.java +++ b/platform/lang-impl/src/com/intellij/unscramble/AnnotateStackTraceAction.java @@ -53,6 +53,7 @@ import com.intellij.openapi.vcs.history.VcsRevisionNumber; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.text.DateFormatUtil; import com.intellij.vcsUtil.VcsUtil; +import com.intellij.xml.util.XmlStringUtil; import org.jetbrains.annotations.NotNull; import java.awt.*; @@ -145,13 +146,13 @@ class AnnotateStackTraceAction extends AnAction { public String getToolTip(int line, Editor editor) { final VcsFileRevision revision = cache.get(line); if (revision != null) { - return "" + - revision.getAuthor() + - " " + - DateFormatUtil.formatDateTime(revision.getRevisionDate()) + - "
" + - revision.getCommitMessage() + - ""; + return XmlStringUtil.wrapInHtml( + revision.getAuthor() + + " " + + DateFormatUtil.formatDateTime(revision.getRevisionDate()) + + "
" + + revision.getCommitMessage() + ); } return null; } diff --git a/platform/platform-api/src/com/intellij/openapi/ui/PanelWithText.java b/platform/platform-api/src/com/intellij/openapi/ui/PanelWithText.java index c3a626f37def..172772139ccf 100644 --- a/platform/platform-api/src/com/intellij/openapi/ui/PanelWithText.java +++ b/platform/platform-api/src/com/intellij/openapi/ui/PanelWithText.java @@ -22,7 +22,7 @@ */ package com.intellij.openapi.ui; -import org.jetbrains.annotations.NonNls; +import com.intellij.xml.util.XmlStringUtil; import javax.swing.*; import java.awt.*; @@ -37,17 +37,11 @@ public class PanelWithText extends JPanel { public PanelWithText(String text) { super(new GridBagLayout()); setBorder(BorderFactory.createEtchedBorder()); - myLabel.setText(wrapText(text)); + myLabel.setText(XmlStringUtil.wrapInHtml(text)); add(myLabel, new GridBagConstraints(0, 0, 1, 1, 1, 1, GridBagConstraints.NORTH, GridBagConstraints.HORIZONTAL, new Insets(8,8,8,8), 0, 0)); } - private static String wrapText(final String text) { - @NonNls String opentTag = ""; - @NonNls String closeTag = ""; - return opentTag + text + closeTag; - } - public void setText(String text){ - myLabel.setText(wrapText(text)); + myLabel.setText(XmlStringUtil.wrapInHtml(text)); } } diff --git a/platform/platform-api/src/com/intellij/ui/components/labels/BoldLabel.java b/platform/platform-api/src/com/intellij/ui/components/labels/BoldLabel.java index 0ea769b1c1a8..35a3fe579595 100644 --- a/platform/platform-api/src/com/intellij/ui/components/labels/BoldLabel.java +++ b/platform/platform-api/src/com/intellij/ui/components/labels/BoldLabel.java @@ -15,6 +15,7 @@ */ package com.intellij.ui.components.labels; +import com.intellij.xml.util.XmlStringUtil; import org.intellij.lang.annotations.JdkConstants; import javax.swing.*; @@ -54,6 +55,8 @@ public class BoldLabel extends JLabel { private static String toHtml(String text) { if (text.startsWith("")) return text; - return "" + text.replaceAll("\\n", "
") + "
"; + return XmlStringUtil.wrapInHtml( + "" + text.replaceAll("\\n", "
") + "
" + ); } } diff --git a/platform/platform-api/src/com/intellij/xml/util/XmlStringUtil.java b/platform/platform-api/src/com/intellij/xml/util/XmlStringUtil.java index 844be9811c0a..8e4042b79739 100644 --- a/platform/platform-api/src/com/intellij/xml/util/XmlStringUtil.java +++ b/platform/platform-api/src/com/intellij/xml/util/XmlStringUtil.java @@ -16,12 +16,20 @@ package com.intellij.xml.util; +import com.intellij.openapi.util.text.StringUtil; +import org.jetbrains.annotations.NonNls; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; /** * @author yole */ public class XmlStringUtil { + @NonNls private static final String HTML_HEADER = ""; + @NonNls private static final String BODY_HEADER = ""; + @NonNls private static final String HTML_FOOTER = ""; + @NonNls private static final String BODY_FOOTER = ""; + private XmlStringUtil() { } @@ -32,4 +40,18 @@ public class XmlStringUtil { public static String escapeString(@Nullable String str, final boolean escapeWhiteSpace) { return XmlTagUtilBase.escapeString(str, escapeWhiteSpace); } + + @NotNull + public static String wrapInHtml(@NotNull CharSequence result) { + return HTML_HEADER + result + HTML_FOOTER; + } + + @NotNull + public static String stripHtml(@NotNull String toolTip) { + toolTip = StringUtil.trimStart(toolTip, HTML_HEADER); + toolTip = StringUtil.trimStart(toolTip, BODY_HEADER); + toolTip = StringUtil.trimEnd(toolTip, HTML_FOOTER); + toolTip = StringUtil.trimEnd(toolTip, BODY_FOOTER); + return toolTip; + } } \ No newline at end of file diff --git a/platform/platform-impl/src/com/intellij/diagnostic/ITNReporter.java b/platform/platform-impl/src/com/intellij/diagnostic/ITNReporter.java index a3a968c2d011..272ce83f0db6 100644 --- a/platform/platform-impl/src/com/intellij/diagnostic/ITNReporter.java +++ b/platform/platform-impl/src/com/intellij/diagnostic/ITNReporter.java @@ -38,6 +38,7 @@ import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.Messages; import com.intellij.openapi.util.text.StringUtil; import com.intellij.util.Consumer; +import com.intellij.xml.util.XmlStringUtil; import org.jetbrains.annotations.NonNls; import javax.swing.*; @@ -143,7 +144,7 @@ public class ITNReporter extends ErrorReportSubmitter { login = "idea_anonymous"; password = "guest"; } - + ErrorReportSender.sendError(project, login, password, errorBean, new Consumer() { @SuppressWarnings({"AssignmentToStaticFieldFromInstanceMethod"}) @Override @@ -156,20 +157,20 @@ public class ITNReporter extends ErrorReportSubmitter { ApplicationManager.getApplication().invokeLater(new Runnable() { @Override public void run() { - StringBuilder text = new StringBuilder(""); + StringBuilder text = new StringBuilder(); final String url = IdeErrorsDialog.getUrl(reportInfo, true); IdeErrorsDialog.appendSubmissionInformation(reportInfo, text, url); text.append("."); if (reportInfo.getStatus() != SubmittedReportInfo.SubmissionStatus.FAILED) { text.append("
").append(DiagnosticBundle.message("error.report.gratitude")); } - text.append(""); + NotificationType type = reportInfo.getStatus() == SubmittedReportInfo.SubmissionStatus.FAILED ? NotificationType.ERROR : NotificationType.INFORMATION; NotificationListener listener = url != null ? new NotificationListener.UrlOpeningListener(true) : null; ReportMessages.GROUP.createNotification(ReportMessages.ERROR_REPORT, - text.toString(), + XmlStringUtil.wrapInHtml(text), type, listener).setImportant(false).notify(project); } }); diff --git a/platform/platform-impl/src/com/intellij/diagnostic/IdeErrorsDialog.java b/platform/platform-impl/src/com/intellij/diagnostic/IdeErrorsDialog.java index ecd5f2af9736..3349d4b1f0da 100644 --- a/platform/platform-impl/src/com/intellij/diagnostic/IdeErrorsDialog.java +++ b/platform/platform-impl/src/com/intellij/diagnostic/IdeErrorsDialog.java @@ -45,6 +45,7 @@ import com.intellij.util.Function; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.text.DateFormatUtil; import com.intellij.util.ui.UIUtil; +import com.intellij.xml.util.XmlStringUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -536,8 +537,7 @@ public class IdeErrorsDialog extends DialogWrapper implements MessagePoolListene return; } - StringBuilder text = new StringBuilder(""); - String url = null; + StringBuilder text = new StringBuilder(); PluginId pluginId = findPluginId(throwable); if (pluginId == null || ApplicationInfoEx.getInstanceEx().isEssentialPlugin(pluginId.getIdString())) { if (throwable instanceof AbstractMethodError) { @@ -554,6 +554,7 @@ public class IdeErrorsDialog extends DialogWrapper implements MessagePoolListene DateFormatUtil.formatPrettyDateTime(message.getDate()), myMergedMessages.get(myIndex).size())); + String url = null; if (message.isSubmitted()) { final SubmittedReportInfo info = message.getSubmissionInfo(); url = getUrl(info, getSubmitter(throwable) instanceof ITNReporter); @@ -566,7 +567,7 @@ public class IdeErrorsDialog extends DialogWrapper implements MessagePoolListene else if (!message.isRead()) { text.append(" ").append(DiagnosticBundle.message("error.list.message.unread")); } - myInfoLabel.setHtmlText(text.toString()); + myInfoLabel.setHtmlText(XmlStringUtil.wrapInHtml(text)); myInfoLabel.setHyperlinkTarget(url); } diff --git a/platform/platform-impl/src/com/intellij/ide/plugins/ActionInstallPlugin.java b/platform/platform-impl/src/com/intellij/ide/plugins/ActionInstallPlugin.java index 8182c7f19dbf..d520b98bea43 100644 --- a/platform/platform-impl/src/com/intellij/ide/plugins/ActionInstallPlugin.java +++ b/platform/platform-impl/src/com/intellij/ide/plugins/ActionInstallPlugin.java @@ -35,6 +35,7 @@ import com.intellij.openapi.ui.Messages; import com.intellij.openapi.util.text.StringUtil; import com.intellij.util.Function; import com.intellij.util.net.IOExceptionDialog; +import com.intellij.xml.util.XmlStringUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -181,7 +182,7 @@ public class ActionInstallPlugin extends AnAction implements DumbAware { private static boolean suggestToEnableInstalledPlugins(final InstalledPluginsTableModel pluginsModel, final Set disabled, - final Set disabledDependants, + final Set disabledDependants, final ArrayList list) { if (!disabled.isEmpty() || !disabledDependants.isEmpty()) { String message = ""; @@ -261,26 +262,28 @@ public class ActionInstallPlugin extends AnAction implements DumbAware { private static void notifyPluginsWereInstalled(@Nullable String pluginName) { final ApplicationEx app = ApplicationManagerEx.getApplicationEx(); final boolean restartCapable = app.isRestartCapable(); - String message = ""; - message += restartCapable ? IdeBundle.message("message.idea.restart.required", ApplicationNamesInfo.getInstance().getFullProductName()) - : IdeBundle.message("message.idea.shutdown.required", ApplicationNamesInfo.getInstance().getFullProductName()); + String message = + restartCapable ? IdeBundle.message("message.idea.restart.required", ApplicationNamesInfo.getInstance().getFullProductName()) + : IdeBundle.message("message.idea.shutdown.required", ApplicationNamesInfo.getInstance().getFullProductName()); message += "
Restart now" : "\"shutdown\">Shutdown"; - message += ""; - Notifications.Bus.notify(new Notification("Plugins Lifecycle Group", + message += ""; + Notifications.Bus.notify(new Notification("Plugins Lifecycle Group", pluginName != null ? "Plugin \'" + pluginName + "\' was successfully installed" : "Plugins were installed", - message, NotificationType.INFORMATION, new NotificationListener() { - @Override - public void hyperlinkUpdate(@NotNull Notification notification, @NotNull HyperlinkEvent event) { - notification.expire(); - if (restartCapable) { - app.restart(true); - } - else { - app.exit(true); - } - } - })); + XmlStringUtil.wrapInHtml(message), NotificationType.INFORMATION, + new NotificationListener() { + @Override + public void hyperlinkUpdate(@NotNull Notification notification, + @NotNull HyperlinkEvent event) { + notification.expire(); + if (restartCapable) { + app.restart(true); + } + else { + app.exit(true); + } + } + })); } diff --git a/platform/platform-impl/src/com/intellij/ide/ui/laf/darcula/DarculaWelcomeScreenButtonBase.java b/platform/platform-impl/src/com/intellij/ide/ui/laf/darcula/DarculaWelcomeScreenButtonBase.java index 84589dfdb452..006a0b90598c 100644 --- a/platform/platform-impl/src/com/intellij/ide/ui/laf/darcula/DarculaWelcomeScreenButtonBase.java +++ b/platform/platform-impl/src/com/intellij/ide/ui/laf/darcula/DarculaWelcomeScreenButtonBase.java @@ -23,6 +23,7 @@ import com.intellij.openapi.actionSystem.AnActionEvent; import com.intellij.openapi.application.ApplicationNamesInfo; import com.intellij.ui.Gray; import com.intellij.util.ui.UIUtil; +import com.intellij.xml.util.XmlStringUtil; import javax.swing.*; import java.awt.*; @@ -41,7 +42,8 @@ public class DarculaWelcomeScreenButtonBase { description.setUI(DarculaWelcomeScreenLabelUI.createUI(description)); //icon.setIcon(action.getTemplatePresentation().getIcon()); final String text = action.getTemplatePresentation().getDescription(); - final String html = "" + MessageFormat.format(text, ApplicationNamesInfo.getInstance().getFullProductName()) + ""; + final String html = XmlStringUtil + .wrapInHtml(MessageFormat.format(text, ApplicationNamesInfo.getInstance().getFullProductName())); root.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); description.setText(html); description.setForeground(Gray._200); diff --git a/platform/platform-impl/src/com/intellij/notification/impl/ui/NotificationsUtil.java b/platform/platform-impl/src/com/intellij/notification/impl/ui/NotificationsUtil.java index 253c6ee4eec6..900cc9f7b0c7 100644 --- a/platform/platform-impl/src/com/intellij/notification/impl/ui/NotificationsUtil.java +++ b/platform/platform-impl/src/com/intellij/notification/impl/ui/NotificationsUtil.java @@ -19,6 +19,7 @@ import com.intellij.notification.Notification; import com.intellij.notification.NotificationListener; import com.intellij.openapi.ui.MessageType; import com.intellij.ui.JBColor; +import com.intellij.xml.util.XmlStringUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -36,7 +37,7 @@ public class NotificationsUtil { } public static String buildHtml(@NotNull final Notification notification, @Nullable String style) { - String result = ""; + String result = ""; if (style != null) { result += "
"; } @@ -44,8 +45,7 @@ public class NotificationsUtil { if (style != null) { result += "
"; } - result += ""; - return result; + return XmlStringUtil.wrapInHtml(result); } @Nullable @@ -70,7 +70,7 @@ public class NotificationsUtil { if (icon != null) { return icon; } - + switch (notification.getType()) { case ERROR: return MessageType.ERROR.getDefaultIcon(); diff --git a/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/NewChannelDialog.java b/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/NewChannelDialog.java index 1e42e9d00ba5..28ab7278eb4b 100644 --- a/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/NewChannelDialog.java +++ b/platform/platform-impl/src/com/intellij/openapi/updateSettings/impl/NewChannelDialog.java @@ -23,6 +23,7 @@ import com.intellij.ui.BrowserHyperlinkListener; import com.intellij.ui.LicensingFacade; import com.intellij.ui.components.JBScrollPane; import com.intellij.util.ui.UIUtil; +import com.intellij.xml.util.XmlStringUtil; import org.jetbrains.annotations.NotNull; import javax.swing.*; @@ -84,7 +85,7 @@ public class NewChannelDialog extends DialogWrapper { } private void initInfo() { - StringBuilder builder = new StringBuilder().append(""); + StringBuilder builder = new StringBuilder(); builder.append("").append(UIUtil.getCssFontDeclaration(UIUtil.getLabelFont())).append(""); builder.append("").append(myChannel.getName()).append("
"); builder.append(StringUtil.formatLinks(myChannel.getLatestBuild().getMessage())).append("

"); @@ -108,7 +109,7 @@ public class NewChannelDialog extends DialogWrapper { builder.append("The new version has an expiration date and does not require a license key."); } } - myInformationText = builder.toString(); + myInformationText = XmlStringUtil.wrapInHtml(builder); } @Override diff --git a/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/DefaultWelcomeScreen.java b/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/DefaultWelcomeScreen.java index 771881794eef..34a6d6f74f37 100644 --- a/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/DefaultWelcomeScreen.java +++ b/platform/platform-impl/src/com/intellij/openapi/wm/impl/welcomeScreen/DefaultWelcomeScreen.java @@ -38,10 +38,10 @@ import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.wm.WelcomeScreen; import com.intellij.ui.*; import com.intellij.ui.components.JBPanel; -import com.intellij.util.PlatformUtils; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.ui.EmptyIcon; import com.intellij.util.ui.UIUtil; +import com.intellij.xml.util.XmlStringUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.Nullable; @@ -99,8 +99,6 @@ public class DefaultWelcomeScreen implements WelcomeScreen { private static final Color BUTTON_POPPED_COLOR = UIUtil.isUnderDarcula() ? Gray.get(WELCOME_PANEL_BACKGROUND.getRed() + 10) : Gray._241; private static final Color BUTTON_PUSHED_COLOR = UIUtil.isUnderDarcula() ? Gray.get(WELCOME_PANEL_BACKGROUND.getRed() + 5) : Gray._228; - @NonNls private static final String HTML_PREFIX = ""; - @NonNls private static final String HTML_SUFFIX = ""; @NonNls private static final String ___HTML_SUFFIX = "..."; @NonNls private static final String ESC_NEW_LINE = "\\n"; @@ -117,7 +115,7 @@ public class DefaultWelcomeScreen implements WelcomeScreen { private int mySelectedColumn = -1; private int mySelectedGroup = -1; private int myPluginsIdx = -1; - + private JComponent myRecentProjectsPanel; public JPanel getWelcomePanel() { @@ -555,13 +553,7 @@ public class DefaultWelcomeScreen implements WelcomeScreen { if (!StringUtil.isEmpty(description)) { //noinspection ConstantConditions - description = description.trim(); - if (description.startsWith(HTML_PREFIX)) { - description = description.replaceAll(HTML_PREFIX, ""); - if (description.endsWith(HTML_SUFFIX)) { - description = description.replaceAll(HTML_SUFFIX, ""); - } - } + description = XmlStringUtil.stripHtml(description.trim()); description = description.replaceAll(ESC_NEW_LINE, ""); String shortenedDcs = adjustStringBreaksByWidth(description, TEXT_FONT, false, PLUGIN_DSC_MAX_WIDTH, PLUGIN_DSC_MAX_ROWS); JLabel pluginDescription = new JLabel(shortenedDcs); @@ -598,7 +590,7 @@ public class DefaultWelcomeScreen implements WelcomeScreen { final int maxRows) { string = string.trim(); if (StringUtil.isEmpty(string)) { - return "" + UIBundle.message("welcome.screen.text.not.specified.message") + ""; + return XmlStringUtil.wrapInHtml(UIBundle.message("welcome.screen.text.not.specified.message")); } string = string.replaceAll("
  • ", " <>> "); @@ -672,7 +664,7 @@ public class DefaultWelcomeScreen implements WelcomeScreen { string = prefix + suffix; } string = string.replaceAll(" <>", "
    "); - return HTML_PREFIX + string + HTML_SUFFIX; + return XmlStringUtil.wrapInHtml(string); } @SuppressWarnings({"HardCodedStringLiteral"}) @@ -729,17 +721,13 @@ public class DefaultWelcomeScreen implements WelcomeScreen { gBC = new GridBagConstraints(1, y, 1, 1, 0, 0, SOUTHWEST, NONE, ACTION_NAME_INSETS, 5, 0); myPanel.add(name, gBC); - description = wrapWithHtml(description); + description = XmlStringUtil.wrapInHtml(description); JLabel shortDescription = new JLabel(description); shortDescription.setFont(TEXT_FONT); gBC = new GridBagConstraints(1, y + 1, 1, 1, 0, 0, NORTHWEST, HORIZONTAL, ACTION_DESCRIPTION_INSETS, 5, 0); myPanel.add(shortDescription, gBC); } - private String wrapWithHtml(final String description) { - return HTML_PREFIX + description + HTML_SUFFIX; - } - private void appendActionsFromGroup(final ActionGroup group) { final AnAction[] actions = group.getChildren(null); PresentationFactory factory = new PresentationFactory(); diff --git a/platform/util/src/com/intellij/openapi/util/text/StringUtil.java b/platform/util/src/com/intellij/openapi/util/text/StringUtil.java index caf84d0909ee..bbd35aac5e39 100644 --- a/platform/util/src/com/intellij/openapi/util/text/StringUtil.java +++ b/platform/util/src/com/intellij/openapi/util/text/StringUtil.java @@ -1203,7 +1203,7 @@ public class StringUtil extends StringUtilRt { } return result.toString(); } - + @NotNull public static String join(@NotNull Iterable items, @NotNull Function f, @NotNull @NonNls String separator) { final StringBuilder result = new StringBuilder(); diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/ChangeListViewerDialog.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/ChangeListViewerDialog.java index 14610702a547..fd80f274b092 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/ChangeListViewerDialog.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/changes/ui/ChangeListViewerDialog.java @@ -44,6 +44,7 @@ import com.intellij.ui.ScrollPaneFactory; import com.intellij.ui.SeparatorFactory; import com.intellij.util.NotNullFunction; import com.intellij.util.ui.UIUtil; +import com.intellij.xml.util.XmlStringUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -196,7 +197,7 @@ public class ChangeListViewerDialog extends DialogWrapper implements DataProvide final String description = getDescription(); if (description != null) { JPanel descPanel = new JPanel(); - descPanel.add(new JLabel("" + description + "")); + descPanel.add(new JLabel(XmlStringUtil.wrapInHtml(description))); descPanel.setBorder(BorderFactory.createEtchedBorder()); mainPanel.add(descPanel, BorderLayout.NORTH); } diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/configurable/IssueNavigationConfigurationPanel.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/configurable/IssueNavigationConfigurationPanel.java index 35a8c35676f8..d51c013107a0 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/configurable/IssueNavigationConfigurationPanel.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/configurable/IssueNavigationConfigurationPanel.java @@ -31,6 +31,7 @@ import com.intellij.ui.table.JBTable; import com.intellij.util.IconUtil; import com.intellij.util.ui.ColumnInfo; import com.intellij.util.ui.ListTableModel; +import com.intellij.xml.util.XmlStringUtil; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; @@ -65,8 +66,9 @@ public class IssueNavigationConfigurationPanel extends JPanel implements Searcha myLinkTable = new JBTable(); myLinkTable.getEmptyText().setText(VcsBundle.message("issue.link.no.patterns")); reset(); - add(new JLabel("" + ApplicationNamesInfo.getInstance().getFullProductName() + " will search for the specified patterns in " + - "checkin comments and link them to issues in your issue tracker:"), BorderLayout.NORTH); + add(new JLabel( + XmlStringUtil.wrapInHtml(ApplicationNamesInfo.getInstance().getFullProductName() + " will search for the specified patterns in " + + "checkin comments and link them to issues in your issue tracker:")), BorderLayout.NORTH); add( ToolbarDecorator.createDecorator(myLinkTable) .setAddAction(new AnActionButtonRunnable() { diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/configurable/VcsDirectoryConfigurationPanel.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/configurable/VcsDirectoryConfigurationPanel.java index 5f70636df5d7..2ed939836dcc 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/configurable/VcsDirectoryConfigurationPanel.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/configurable/VcsDirectoryConfigurationPanel.java @@ -34,6 +34,7 @@ import com.intellij.ui.components.labels.LinkListener; import com.intellij.ui.table.TableView; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.ui.*; +import com.intellij.xml.util.XmlStringUtil; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -203,8 +204,9 @@ public class VcsDirectoryConfigurationPanel extends JPanel implements Configurab public VcsDirectoryConfigurationPanel(final Project project) { myProject = project; myVcsConfiguration = getInstance(myProject); - myProjectMessage = "" + StringUtil.escapeXml(VcsDirectoryMapping.PROJECT_CONSTANT) + " - " + - DefaultVcsRootPolicy.getInstance(myProject).getProjectConfigurationMessage(myProject).replace('\n', ' ') + ""; + myProjectMessage = XmlStringUtil.wrapInHtml(StringUtil.escapeXml(VcsDirectoryMapping.PROJECT_CONSTANT) + " - " + + DefaultVcsRootPolicy.getInstance(myProject).getProjectConfigurationMessage(myProject) + .replace('\n', ' ')); myIsDisabled = myProject.isDefault(); myVcsManager = ProjectLevelVcsManager.getInstance(project); final VcsDescriptor[] vcsDescriptors = myVcsManager.getAllVcss(); diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/configurable/VcsMappingConfigurationDialog.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/configurable/VcsMappingConfigurationDialog.java index 49f546728a59..a5a1c4b66471 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/configurable/VcsMappingConfigurationDialog.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/configurable/VcsMappingConfigurationDialog.java @@ -34,6 +34,7 @@ import com.intellij.openapi.vcs.impl.VcsDescriptor; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.ui.components.JBLabel; import com.intellij.util.continuation.ModalityIgnorantBackgroundableTask; +import com.intellij.xml.util.XmlStringUtil; import org.jetbrains.annotations.NotNull; import javax.swing.*; @@ -173,7 +174,7 @@ public class VcsMappingConfigurationDialog extends DialogWrapper { } public void initProjectMessage() { - myProjectButtonComment.setText("" + DefaultVcsRootPolicy.getInstance(myProject).getProjectConfigurationMessage(myProject) + ""); + myProjectButtonComment.setText(XmlStringUtil.wrapInHtml(DefaultVcsRootPolicy.getInstance(myProject).getProjectConfigurationMessage(myProject))); } private class MyBrowseFolderListener extends ComponentWithBrowseButton.BrowseFolderActionListener { @@ -182,7 +183,7 @@ public class VcsMappingConfigurationDialog extends DialogWrapper { FileChooserDescriptor fileChooserDescriptor) { super(title, description, textField, project, fileChooserDescriptor, TextComponentAccessor.TEXT_FIELD_WHOLE_TEXT); } - + @Override protected VirtualFile getInitialFile() { // suggest project base dir only if nothing is typed in the component. diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/inheritance/RefusedBequestInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/inheritance/RefusedBequestInspection.java index f470f8a910fc..4b9cb243b723 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/inheritance/RefusedBequestInspection.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/inheritance/RefusedBequestInspection.java @@ -17,6 +17,7 @@ package com.siyeh.ig.inheritance; import com.intellij.codeInspection.ui.SingleCheckboxOptionsPanel; import com.intellij.psi.*; +import com.intellij.xml.util.XmlStringUtil; import com.siyeh.InspectionGadgetsBundle; import com.siyeh.ig.BaseInspection; import com.siyeh.ig.BaseInspectionVisitor; @@ -47,8 +48,8 @@ public class RefusedBequestInspection extends BaseInspection { public JComponent createOptionsPanel() { //noinspection HardCodedStringLiteral return new SingleCheckboxOptionsPanel( - "" + InspectionGadgetsBundle.message("refused.bequest.ignore.empty.super.methods.option") + - "", this, "ignoreEmptySuperMethods"); + XmlStringUtil.wrapInHtml(InspectionGadgetsBundle.message("refused.bequest.ignore.empty.super.methods.option")) + , this, "ignoreEmptySuperMethods"); } @Override diff --git a/plugins/git4idea/src/git4idea/branch/GitBranchIsNotFullyMergedDialog.java b/plugins/git4idea/src/git4idea/branch/GitBranchIsNotFullyMergedDialog.java index 5d0f40a42d84..858a75a3d8f3 100644 --- a/plugins/git4idea/src/git4idea/branch/GitBranchIsNotFullyMergedDialog.java +++ b/plugins/git4idea/src/git4idea/branch/GitBranchIsNotFullyMergedDialog.java @@ -22,6 +22,7 @@ import com.intellij.openapi.ui.DialogWrapper; import com.intellij.openapi.util.text.StringUtil; import com.intellij.ui.components.JBLabel; import com.intellij.util.ArrayUtil; +import com.intellij.xml.util.XmlStringUtil; import git4idea.GitBranch; import git4idea.GitPlatformFacade; import git4idea.history.browser.GitCommit; @@ -50,7 +51,7 @@ import java.util.Map; public class GitBranchIsNotFullyMergedDialog extends DialogWrapper { private static final Logger LOG = Logger.getInstance(GitBranchIsNotFullyMergedDialog.class); - + private final Project myProject; private final Map> myCommits; private final String myBranchToDelete; @@ -74,7 +75,7 @@ public class GitBranchIsNotFullyMergedDialog extends DialogWrapper { public static boolean showAndGetAnswer(@NotNull Project project, @NotNull Map> commits, @NotNull String branchToDelete, - @NotNull List mergedToBranches, + @NotNull List mergedToBranches, @Nullable String baseBranch) { GitBranchIsNotFullyMergedDialog dialog = new GitBranchIsNotFullyMergedDialog(project, commits, branchToDelete, baseBranch, mergedToBranches); ServiceManager.getService(project, GitPlatformFacade.class).showDialog(dialog); @@ -122,7 +123,7 @@ public class GitBranchIsNotFullyMergedDialog extends DialogWrapper { LOG.assertTrue(myBaseBranch != null, "Branches have unexpectedly diverged"); currentBranchOrRev = myBaseBranch; onBranch = true; - } + } else { GitRepository repository = myInitialRepository; if (repository.isOnBranch()) { @@ -136,7 +137,7 @@ public class GitBranchIsNotFullyMergedDialog extends DialogWrapper { onBranch = false; } } - + StringBuilder description = new StringBuilder(); if (onBranch) { description.append(GitBundle.message("branch.delete.not_fully_merged.description", myBranchToDelete, myBaseBranch)); @@ -160,8 +161,8 @@ public class GitBranchIsNotFullyMergedDialog extends DialogWrapper { @Override protected JComponent createNorthPanel() { - JBLabel descriptionLabel = new JBLabel("" + makeDescription() + ""); - + JBLabel descriptionLabel = new JBLabel(XmlStringUtil.wrapInHtml(makeDescription())); + final JComboBox repositorySelector = new JComboBox(ArrayUtil.toObjectArray(myRepositories, GitRepository.class)); repositorySelector.setRenderer(new GitRepositoryComboboxListCellRenderer(repositorySelector)); repositorySelector.setSelectedItem(myInitialRepository); @@ -178,7 +179,7 @@ public class GitBranchIsNotFullyMergedDialog extends DialogWrapper { label.setLabelFor(repoSelectorPanel); repoSelectorPanel.add(label, BorderLayout.WEST); repoSelectorPanel.add(repositorySelector); - + if (myRepositories.size() < 2) { repoSelectorPanel.setVisible(false); } diff --git a/plugins/git4idea/src/git4idea/branch/GitBranchUiHandlerImpl.java b/plugins/git4idea/src/git4idea/branch/GitBranchUiHandlerImpl.java index 4c5b58523abc..5456784ee021 100644 --- a/plugins/git4idea/src/git4idea/branch/GitBranchUiHandlerImpl.java +++ b/plugins/git4idea/src/git4idea/branch/GitBranchUiHandlerImpl.java @@ -29,6 +29,7 @@ import com.intellij.openapi.vcs.changes.ui.SelectFilesDialog; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.ui.components.JBLabel; import com.intellij.util.ui.UIUtil; +import com.intellij.xml.util.XmlStringUtil; import git4idea.*; import git4idea.commands.Git; import git4idea.history.browser.GitCommit; @@ -46,8 +47,6 @@ import java.util.List; import java.util.Map; import java.util.concurrent.atomic.AtomicBoolean; -import static com.intellij.openapi.util.text.StringUtil.stripHtml; - /** * @author Kirill Likhodedov */ @@ -92,12 +91,12 @@ class GitBranchUiHandlerImpl implements GitBranchUiHandler { UIUtil.invokeAndWaitIfNeeded(new Runnable() { @Override public void run() { - StringBuilder description = new StringBuilder(""); + StringBuilder description = new StringBuilder(); if (!StringUtil.isEmptyOrSpaces(message)) { description.append(message).append("
    "); } - description.append(rollbackProposal).append(""); - ok.set(Messages.OK == MessageManager.showYesNoDialog(myProject, description.toString(), title, + description.append(rollbackProposal); + ok.set(Messages.OK == MessageManager.showYesNoDialog(myProject, XmlStringUtil.wrapInHtml(description), title, "Rollback", "Don't rollback", Messages.getErrorIcon())); } }); @@ -154,7 +153,7 @@ class GitBranchUiHandlerImpl implements GitBranchUiHandler { String title = "Couldn't " + operationName; String description = UntrackedFilesNotifier.createUntrackedFilesOverwrittenDescription(operationName, false); - final SelectFilesDialog dialog = new UntrackedFilesDialog(myProject, untrackedFiles, stripHtml(description, true), rollbackProposal); + final SelectFilesDialog dialog = new UntrackedFilesDialog(myProject, untrackedFiles, StringUtil.stripHtml(description, true), rollbackProposal); dialog.setTitle(title); UIUtil.invokeAndWaitIfNeeded(new Runnable() { @Override @@ -217,7 +216,7 @@ class GitBranchUiHandlerImpl implements GitBranchUiHandler { protected JComponent createSouthPanel() { JComponent buttons = super.createSouthPanel(); JPanel panel = new JPanel(new VerticalFlowLayout()); - panel.add(new JBLabel("" + myRollbackProposal + "")); + panel.add(new JBLabel(XmlStringUtil.wrapInHtml(myRollbackProposal))); panel.add(buttons); return panel; } diff --git a/plugins/git4idea/src/git4idea/checkin/GitCheckinHandlerFactory.java b/plugins/git4idea/src/git4idea/checkin/GitCheckinHandlerFactory.java index 56f38fc5bb98..ae9d267a18ae 100644 --- a/plugins/git4idea/src/git4idea/checkin/GitCheckinHandlerFactory.java +++ b/plugins/git4idea/src/git4idea/checkin/GitCheckinHandlerFactory.java @@ -35,6 +35,7 @@ import com.intellij.openapi.vcs.checkin.VcsCheckinHandlerFactory; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.PairConsumer; import com.intellij.util.ui.UIUtil; +import com.intellij.xml.util.XmlStringUtil; import git4idea.GitPlatformFacade; import git4idea.GitUtil; import git4idea.GitVcs; @@ -61,7 +62,7 @@ import java.util.concurrent.atomic.AtomicReference; * @author Kirill Likhodedov */ public class GitCheckinHandlerFactory extends VcsCheckinHandlerFactory { - + private static final Logger LOG = Logger.getInstance(GitCheckinHandlerFactory.class); public GitCheckinHandlerFactory() { @@ -89,7 +90,7 @@ public class GitCheckinHandlerFactory extends VcsCheckinHandlerFactory { if (emptyCommitMessage()) { return ReturnResult.CANCEL; } - + if (commitOrCommitAndPush(executor)) { ReturnResult result = checkUserName(); if (result != ReturnResult.COMMIT) { @@ -195,7 +196,7 @@ public class GitCheckinHandlerFactory extends VcsCheckinHandlerFactory { // doing nothing - let commit with possibly empty user.name/email } } - + if (notDefined.isEmpty()) { return ReturnResult.COMMIT; } @@ -255,14 +256,14 @@ public class GitCheckinHandlerFactory extends VcsCheckinHandlerFactory { } return ReturnResult.CLOSE_WINDOW; } - + @NotNull private Pair getUserNameAndEmailFromGitConfig(@NotNull Project project, @NotNull VirtualFile root) throws VcsException { String name = GitConfigUtil.getValue(project, root, GitConfigUtil.USER_NAME); String email = GitConfigUtil.getValue(project, root, GitConfigUtil.USER_EMAIL); return Pair.create(name, email); } - + private boolean emptyCommitMessage() { if (myPanel.getCommitMessage().trim().isEmpty()) { Messages.showMessageDialog(myPanel.getComponent(), GitBundle.message("git.commit.message.empty"), @@ -297,8 +298,9 @@ public class GitCheckinHandlerFactory extends VcsCheckinHandlerFactory { readMore("http://sitaramc.github.com/concepts/detached-head.html", "Read more about detached HEAD"); } - final int choice = Messages.showOkCancelDialog(myPanel.getComponent(), "" + message + "", title, - "Cancel", "Commit", Messages.getWarningIcon()); + final int choice = Messages.showOkCancelDialog(myPanel.getComponent(), XmlStringUtil.wrapInHtml(message), title, + "Cancel", "Commit", + Messages.getWarningIcon()); if (choice == 1) { return ReturnResult.COMMIT; } else { diff --git a/plugins/git4idea/src/git4idea/checkin/GitUserNameNotDefinedDialog.java b/plugins/git4idea/src/git4idea/checkin/GitUserNameNotDefinedDialog.java index 8673ec383318..e315ab08ab3d 100644 --- a/plugins/git4idea/src/git4idea/checkin/GitUserNameNotDefinedDialog.java +++ b/plugins/git4idea/src/git4idea/checkin/GitUserNameNotDefinedDialog.java @@ -26,6 +26,7 @@ import com.intellij.ui.components.JBLabel; import com.intellij.util.SystemProperties; import com.intellij.util.ui.GridBag; import com.intellij.util.ui.UIUtil; +import com.intellij.xml.util.XmlStringUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -53,7 +54,7 @@ class GitUserNameNotDefinedDialog extends DialogWrapper { private JBCheckBox myGlobalCheckbox; GitUserNameNotDefinedDialog(@NotNull Project project, - @NotNull Collection rootsWithUndefinedProps, + @NotNull Collection rootsWithUndefinedProps, @NotNull Collection allRootsAffectedByCommit, @NotNull Map> rootsWithDefinedProps) { super(project, false); @@ -64,7 +65,7 @@ class GitUserNameNotDefinedDialog extends DialogWrapper { setTitle("Git User Name Is Not Defined"); setOKButtonText("Set and Commit"); - + init(); } @@ -103,10 +104,10 @@ class GitUserNameNotDefinedDialog extends DialogWrapper { @Override protected JComponent createCenterPanel() { - + JLabel icon = new JLabel(UIUtil.getWarningIcon(), SwingConstants.LEFT); JLabel description = new JLabel(getMessageText()); - + myNameTextField = new JTextField(20); JBLabel nameLabel = new JBLabel("Name: "); nameLabel.setDisplayedMnemonic('n'); @@ -133,7 +134,7 @@ class GitUserNameNotDefinedDialog extends DialogWrapper { .setDefaultInsets(new Insets(0, 0, DEFAULT_VGAP, DEFAULT_HGAP)) .setDefaultAnchor(GridBagConstraints.LINE_START) .setDefaultFill(GridBagConstraints.HORIZONTAL); - + rootPanel.add(description, g.nextLine().next().coverLine(3).pady(DEFAULT_HGAP)); rootPanel.add(icon, g.nextLine().next().coverColumn(3)); rootPanel.add(nameLabel, g.next().fillCellNone().insets(new Insets(0, 6, DEFAULT_VGAP, DEFAULT_HGAP))); @@ -159,7 +160,7 @@ class GitUserNameNotDefinedDialog extends DialogWrapper { for (VirtualFile root : myRootsWithUndefinedProps) { text += root.getPresentableUrl() + "
    "; } - return "" + text + ""; + return XmlStringUtil.wrapInHtml(text); } public String getUserName() { diff --git a/plugins/hg4idea/src/org/zmlx/hg4idea/action/HgCommandResultNotifier.java b/plugins/hg4idea/src/org/zmlx/hg4idea/action/HgCommandResultNotifier.java index b4a3ceeb2134..73d5506396c7 100644 --- a/plugins/hg4idea/src/org/zmlx/hg4idea/action/HgCommandResultNotifier.java +++ b/plugins/hg4idea/src/org/zmlx/hg4idea/action/HgCommandResultNotifier.java @@ -20,6 +20,7 @@ import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.text.StringUtil; import com.intellij.openapi.vcs.changes.ui.ChangesViewContentManager; +import com.intellij.xml.util.XmlStringUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.zmlx.hg4idea.execution.HgCommandResult; @@ -69,9 +70,9 @@ public final class HgCommandResultNotifier { "Failure title, failure description and errors log can not be empty at the same time"); errorMessage = failureDescription; } else if (failureDescription.isEmpty()) { - errorMessage = "" + StringUtil.join(err, "
    ") + ""; + errorMessage = XmlStringUtil.wrapInHtml(StringUtil.join(err, "
    ")); } else { - errorMessage = "" + failureDescription + "
    " + StringUtil.join(err, "
    ") + ""; + errorMessage = XmlStringUtil.wrapInHtml(failureDescription + "
    " + StringUtil.join(err, "
    ")); } } IMPORTANT_ERROR_NOTIFICATION diff --git a/plugins/hg4idea/src/org/zmlx/hg4idea/status/HgRemoteStatusUpdater.java b/plugins/hg4idea/src/org/zmlx/hg4idea/status/HgRemoteStatusUpdater.java index 8d528b16dc8a..eaec6cf1324d 100644 --- a/plugins/hg4idea/src/org/zmlx/hg4idea/status/HgRemoteStatusUpdater.java +++ b/plugins/hg4idea/src/org/zmlx/hg4idea/status/HgRemoteStatusUpdater.java @@ -24,6 +24,7 @@ import com.intellij.openapi.vcs.AbstractVcs; import com.intellij.openapi.vcs.ProjectLevelVcsManager; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.util.messages.MessageBusConnection; +import com.intellij.xml.util.XmlStringUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.zmlx.hg4idea.*; @@ -135,21 +136,21 @@ public class HgRemoteStatusUpdater implements HgUpdater { return myProjectSettings.isCheckIncomingOutgoing(); } - private final class ChangesetFormatter implements HgChangesetStatus.ChangesetWriter { - private final StringBuilder builder = new StringBuilder(); + private static final class ChangesetFormatter implements HgChangesetStatus.ChangesetWriter { + private final String string; private ChangesetFormatter(HgChangesetStatus status, List changesets) { - builder.append(""); + StringBuilder builder = new StringBuilder(); builder.append("").append(status.getStatusName()).append(" changesets:
    "); for (HgRevisionNumber revisionNumber : changesets) { builder.append(revisionNumber.asString()).append(" ").append(revisionNumber.getCommitMessage()).append(" (") .append(revisionNumber.getAuthor()).append(")
    "); } - builder.append(""); + string = XmlStringUtil.wrapInHtml(builder); } public String asString() { - return builder.toString(); + return string; } } } diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/RepositoryAttachDialog.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/RepositoryAttachDialog.java index 6b580f0bcb7e..8d19d7f0c841 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/RepositoryAttachDialog.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/RepositoryAttachDialog.java @@ -40,6 +40,7 @@ import com.intellij.ui.components.JBLabel; import com.intellij.util.PairProcessor; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.ui.AsyncProcessIcon; +import com.intellij.xml.util.XmlStringUtil; import gnu.trove.THashMap; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -87,8 +88,10 @@ public class RepositoryAttachDialog extends DialogWrapper { myProject = project; myManaged = managed; myProgressIcon.suspend(); - myCaptionLabel.setText("" + StringUtil.escapeXml("enter keyword, pattern or class name to search by or Maven coordinates," + - "i.e. 'springframework', 'Logger' or 'org.hibernate:hibernate-core:3.5.0.GA':") + ""); + myCaptionLabel.setText( + XmlStringUtil.wrapInHtml(StringUtil.escapeXml("enter keyword, pattern or class name to search by or Maven coordinates," + + "i.e. 'springframework', 'Logger' or 'org.hibernate:hibernate-core:3.5.0.GA':") + )); myInfoLabel.setPreferredSize( new Dimension(myInfoLabel.getFontMetrics(myInfoLabel.getFont()).stringWidth("Showing: 1000"), myInfoLabel.getPreferredSize().height)); diff --git a/plugins/tasks/tasks-core/src/com/intellij/tasks/doc/TaskDocumentationProvider.java b/plugins/tasks/tasks-core/src/com/intellij/tasks/doc/TaskDocumentationProvider.java index 9924802b5f7b..843a6fc7f7e2 100644 --- a/plugins/tasks/tasks-core/src/com/intellij/tasks/doc/TaskDocumentationProvider.java +++ b/plugins/tasks/tasks-core/src/com/intellij/tasks/doc/TaskDocumentationProvider.java @@ -22,6 +22,7 @@ import com.intellij.psi.PsiElement; import com.intellij.psi.PsiManager; import com.intellij.tasks.Comment; import com.intellij.tasks.Task; +import com.intellij.xml.util.XmlStringUtil; import com.petebevin.markdown.MarkdownProcessor; import org.jetbrains.annotations.Nullable; @@ -48,7 +49,7 @@ public class TaskDocumentationProvider extends AbstractDocumentationProvider imp public String generateDoc(PsiElement element, @Nullable PsiElement originalElement) { if (!(element instanceof TaskPsiElement)) return null; final Task task = ((TaskPsiElement)element).getTask(); - final StringBuilder builder = new StringBuilder(""); + final StringBuilder builder = new StringBuilder(); builder.append("Summary: ").append(task.getSummary()).append("
    "); builder.append("Id: ").append(task.getId()).append("
    "); if (task.getCreated() != null) { @@ -65,8 +66,7 @@ public class TaskDocumentationProvider extends AbstractDocumentationProvider imp for (Comment comment : task.getComments()) { comment.appendTo(builder); } - builder.append(""); - return builder.toString(); + return XmlStringUtil.wrapInHtml(builder); } @Override diff --git a/xml/dom-openapi/src/com/intellij/util/xml/ui/AbstractTableView.java b/xml/dom-openapi/src/com/intellij/util/xml/ui/AbstractTableView.java index 82df8a529d21..2e372bfa26fa 100644 --- a/xml/dom-openapi/src/com/intellij/util/xml/ui/AbstractTableView.java +++ b/xml/dom-openapi/src/com/intellij/util/xml/ui/AbstractTableView.java @@ -28,6 +28,7 @@ import com.intellij.util.PlatformIcons; import com.intellij.util.ui.ColumnInfo; import com.intellij.util.ui.ListTableModel; import com.intellij.util.ui.UIUtil; +import com.intellij.xml.util.XmlStringUtil; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; @@ -98,7 +99,7 @@ public abstract class AbstractTableView extends JPanel implements TypeSafeDat myInnerPanel.add(ScrollPaneFactory.createScrollPane(myTable), TREE); if (getEmptyPaneText() != null) { //noinspection HardCodedStringLiteral - myEmptyPane = new EmptyPane("" + getEmptyPaneText() + ""); + myEmptyPane = new EmptyPane(XmlStringUtil.wrapInHtml(getEmptyPaneText())); final JComponent emptyPanel = myEmptyPane.getComponent(); myInnerPanel.add(emptyPanel, EMPTY_PANE); } diff --git a/xml/relaxng/src/org/intellij/plugins/relaxNG/RngDocumentationProvider.java b/xml/relaxng/src/org/intellij/plugins/relaxNG/RngDocumentationProvider.java index ac1bd0ce8dff..f3025ce1d2f9 100644 --- a/xml/relaxng/src/org/intellij/plugins/relaxNG/RngDocumentationProvider.java +++ b/xml/relaxng/src/org/intellij/plugins/relaxNG/RngDocumentationProvider.java @@ -25,6 +25,7 @@ import com.intellij.psi.xml.XmlElement; import com.intellij.psi.xml.XmlTag; import com.intellij.xml.XmlAttributeDescriptor; import com.intellij.xml.XmlElementDescriptor; +import com.intellij.xml.util.XmlStringUtil; import org.intellij.plugins.relaxNG.model.descriptors.CompositeDescriptor; import org.intellij.plugins.relaxNG.model.descriptors.RngElementDescriptor; import org.intellij.plugins.relaxNG.model.descriptors.RngXmlAttributeDescriptor; @@ -95,11 +96,11 @@ public class RngDocumentationProvider implements DocumentationProvider { private static String makeDocumentation(StringBuilder sb) { if (sb == null) return null; - if (!sb.toString().startsWith("")) { - sb.insert(0, ""); - sb.append(""); + String s = sb.toString().replaceAll("\n", "
    "); + if (!s.startsWith("")) { + s = XmlStringUtil.wrapInHtml(s); } - return sb.toString().replaceAll("\n", "
    "); + return s; } private static StringBuilder getDocumentationFromTag(XmlTag tag, String localName, String kind) {