diff --git a/CHANGELOG.md b/CHANGELOG.md index 0cbc5bdc..2610db92 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -24,6 +24,13 @@ FlatLaf Change Log invocation). - macOS: Fixed crash when running in WebSwing. (issue #826; regression in 3.4) +#### Incompatibilities + +- File names of custom properties files for nested Laf classes now must include + name of enclosing class name. E.g. nested Laf class `IntelliJTheme.ThemeLaf` + used `ThemeLaf.properties` in previous versions, but now needs to be named + `IntelliJTheme$ThemeLaf.properties`. + ## 3.4 diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/FlatDefaultsAddon.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/FlatDefaultsAddon.java index ac73cff9..f118d701 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/FlatDefaultsAddon.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/FlatDefaultsAddon.java @@ -48,7 +48,7 @@ public abstract class FlatDefaultsAddon public InputStream getDefaults( Class lafClass ) { Class addonClass = this.getClass(); String propertiesName = '/' + addonClass.getPackage().getName().replace( '.', '/' ) - + '/' + lafClass.getSimpleName() + ".properties"; + + '/' + UIDefaultsLoader.simpleClassName( lafClass ) + ".properties"; return addonClass.getResourceAsStream( propertiesName ); } diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/UIDefaultsLoader.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/UIDefaultsLoader.java index 79345841..af21c3d0 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/UIDefaultsLoader.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/UIDefaultsLoader.java @@ -161,7 +161,7 @@ class UIDefaultsLoader classLoader = FlatLaf.class.getClassLoader(); for( Class lafClass : lafClasses ) { - String propertiesName = packageName + '/' + lafClass.getSimpleName() + ".properties"; + String propertiesName = packageName + '/' + simpleClassName( lafClass ) + ".properties"; try( InputStream in = classLoader.getResourceAsStream( propertiesName ) ) { if( in != null ) properties.load( in ); @@ -171,7 +171,7 @@ class UIDefaultsLoader // load from package URL URL packageUrl = (URL) source; for( Class lafClass : lafClasses ) { - URL propertiesUrl = new URL( packageUrl + lafClass.getSimpleName() + ".properties" ); + URL propertiesUrl = new URL( packageUrl + simpleClassName( lafClass ) + ".properties" ); try( InputStream in = propertiesUrl.openStream() ) { properties.load( in ); @@ -183,7 +183,7 @@ class UIDefaultsLoader // load from folder File folder = (File) source; for( Class lafClass : lafClasses ) { - File propertiesFile = new File( folder, lafClass.getSimpleName() + ".properties" ); + File propertiesFile = new File( folder, simpleClassName( lafClass ) + ".properties" ); if( !propertiesFile.isFile() ) continue; @@ -294,6 +294,14 @@ class UIDefaultsLoader } } + /** + * Similar to Class.getSimpleName(), but includes enclosing class for nested classes. + */ + static String simpleClassName( Class cls ) { + String className = cls.getName(); + return className.substring( className.lastIndexOf( '.' ) + 1 ); + } + static void logParseError( String key, String value, RuntimeException ex, boolean severe ) { String message = "FlatLaf: Failed to parse: '" + key + '=' + value + '\''; if( severe )