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());