From f96baf1bc291a1e1cf1872b0d6f317f4b63276ec Mon Sep 17 00:00:00 2001 From: Eduwardo Horibe Date: Fri, 6 Dec 2024 18:52:14 -0300 Subject: [PATCH] Fixing NPE when using HTML text on a component with null font --- .../java/com/formdev/flatlaf/ui/FlatHTML.java | 13 +++++-------- .../com/formdev/flatlaf/ui/TestFlatHTML.java | 16 ++++++++++++---- 2 files changed, 17 insertions(+), 12 deletions(-) diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatHTML.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatHTML.java index 33173a5a..fd085857 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatHTML.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatHTML.java @@ -16,17 +16,14 @@ package com.formdev.flatlaf.ui; -import java.awt.Color; +import java.awt.*; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.util.Arrays; import java.util.HashSet; import java.util.Set; import java.util.function.BiConsumer; -import javax.swing.AbstractButton; -import javax.swing.JComponent; -import javax.swing.JLabel; -import javax.swing.JToolTip; +import javax.swing.*; import javax.swing.plaf.basic.BasicHTML; import javax.swing.text.AttributeSet; import javax.swing.text.Document; @@ -74,9 +71,9 @@ public class FlatHTML for( int i = 1; i <= 7; i++ ) System.out.println( i+": "+ styleSheet.getPointSize( i ) ); debug*/ - int fontBaseSize = c.getFont().getSize(); + Font font = c.getFont(); if( styleSheet.getPointSize( 7 ) != 36f || - styleSheet.getPointSize( 4 ) == fontBaseSize ) + font == null || styleSheet.getPointSize( 4 ) == font.getSize() ) return; // check whether view uses "absolute-size" keywords (e.g. "x-large") for font-size @@ -97,7 +94,7 @@ debug*/ return; // BASE_SIZE rule is parsed in javax.swing.text.html.StyleSheet.addRule() - String style = ""; + String style = ""; String openTag = ""; String closeTag = ""; diff --git a/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatHTML.java b/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatHTML.java index f6026112..5ec2b6c3 100644 --- a/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatHTML.java +++ b/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatHTML.java @@ -16,11 +16,8 @@ package com.formdev.flatlaf.ui; -import static org.junit.jupiter.api.Assertions.assertEquals; import java.util.Locale; -import javax.swing.JComponent; -import javax.swing.JLabel; -import javax.swing.UIManager; +import javax.swing.*; import javax.swing.plaf.basic.BasicHTML; import javax.swing.text.BadLocationException; import javax.swing.text.Document; @@ -28,6 +25,8 @@ import javax.swing.text.View; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; +import static org.junit.jupiter.api.Assertions.assertEquals; /** * @author Karl Tauber @@ -73,6 +72,15 @@ public class TestFlatHTML testHtmlBaseSize( "${BASE_SIZE}

header1

" + body + "", "header1\n" + bodyPlain ); } + @Test + void htmlOnComponentWithNullFont() { + assertDoesNotThrow( () -> { + JLabel label = new JLabel(); + label.setFont( null ); + label.setText( "foo
bar" ); + } ); + } + private void testHtmlBaseSize( String html, String expectedPlain ) { testHtmlBaseSizeImpl( html, expectedPlain ); testHtmlBaseSizeImpl( html.toUpperCase( Locale.ENGLISH ), expectedPlain.toUpperCase( Locale.ENGLISH ) );