diff --git a/platform/platform-api/src/com/intellij/openapi/ui/ComponentValidator.java b/platform/platform-api/src/com/intellij/openapi/ui/ComponentValidator.java index 6ac0bf552322..a003b6bcf08a 100644 --- a/platform/platform-api/src/com/intellij/openapi/ui/ComponentValidator.java +++ b/platform/platform-api/src/com/intellij/openapi/ui/ComponentValidator.java @@ -20,6 +20,7 @@ import com.intellij.util.ui.JBValue; import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import sun.swing.SwingUtilities2; import javax.swing.*; import javax.swing.border.Border; @@ -242,8 +243,8 @@ public class ComponentValidator { JEditorPane tipComponent = new JEditorPane(); View v = BasicHTML.createHTMLView(tipComponent, String.format("%s", info.message)); String text = v.getPreferredSpan(View.X_AXIS) > MAX_WIDTH.get() ? - String.format("
%s
", MAX_WIDTH.get(), info.message) : - String.format("
%s
", info.message); + String.format("
%s
", MAX_WIDTH.get(), trimMessage(info.message, tipComponent)) : + String.format("
%s
", info.message); tipComponent.setContentType("text/html"); tipComponent.setEditable(false); @@ -281,6 +282,18 @@ public class ComponentValidator { setShowShadow(true); } + private static String trimMessage(String message, JComponent c) { + String[] words = message.split("\\s+"); + StringBuilder result = new StringBuilder(); + + for(String word : words) { + word = SwingUtilities2.clipStringIfNecessary(c, c.getFontMetrics(c.getFont()), word, MAX_WIDTH.get()); + result.append(word).append(" "); + } + + return result.toString(); + } + public static boolean withinComponent(@NotNull ValidationInfo info, @NotNull MouseEvent e) { if (info.component != null && info.component.isShowing()) { Rectangle screenBounds = new Rectangle(info.component.getLocationOnScreen(), info.component.getSize());