Theme Editor: use deferred properties loading

This commit is contained in:
Karl Tauber
2020-07-07 14:21:31 +02:00
parent 7ed90cddf8
commit 6f71e4ada0
3 changed files with 16 additions and 10 deletions

View File

@@ -154,8 +154,11 @@ class UIDefaultsLoader
} }
} }
Function<String, String> propertiesGetter = key -> {
return properties.getProperty( key );
};
Function<String, String> resolver = value -> { Function<String, String> resolver = value -> {
return resolveValue( properties, value ); return resolveValue( value, propertiesGetter );
}; };
// get globals, which override all other defaults that end with same suffix // get globals, which override all other defaults that end with same suffix
@@ -165,7 +168,7 @@ class UIDefaultsLoader
if( !key.startsWith( GLOBAL_PREFIX ) ) if( !key.startsWith( GLOBAL_PREFIX ) )
continue; continue;
String value = resolveValue( properties, (String) e.getValue() ); String value = resolveValue( (String) e.getValue(), propertiesGetter );
try { try {
globals.put( key.substring( GLOBAL_PREFIX.length() ), globals.put( key.substring( GLOBAL_PREFIX.length() ),
parseValue( key, value, null, resolver, addonClassLoaders ) ); parseValue( key, value, null, resolver, addonClassLoaders ) );
@@ -191,7 +194,7 @@ class UIDefaultsLoader
if( key.startsWith( VARIABLE_PREFIX ) || key.startsWith( GLOBAL_PREFIX ) ) if( key.startsWith( VARIABLE_PREFIX ) || key.startsWith( GLOBAL_PREFIX ) )
continue; continue;
String value = resolveValue( properties, (String) e.getValue() ); String value = resolveValue( (String) e.getValue(), propertiesGetter );
try { try {
defaults.put( key, parseValue( key, value, null, resolver, addonClassLoaders ) ); defaults.put( key, parseValue( key, value, null, resolver, addonClassLoaders ) );
} catch( RuntimeException ex ) { } catch( RuntimeException ex ) {
@@ -207,7 +210,7 @@ class UIDefaultsLoader
FlatLaf.LOG.log( level, "FlatLaf: Failed to parse: '" + key + '=' + value + '\'', ex ); FlatLaf.LOG.log( level, "FlatLaf: Failed to parse: '" + key + '=' + value + '\'', ex );
} }
static String resolveValue( Properties properties, String value ) { static String resolveValue( String value, Function<String, String> propertiesGetter ) {
if( value.startsWith( PROPERTY_PREFIX ) ) if( value.startsWith( PROPERTY_PREFIX ) )
value = value.substring( PROPERTY_PREFIX.length() ); value = value.substring( PROPERTY_PREFIX.length() );
else if( !value.startsWith( VARIABLE_PREFIX ) ) else if( !value.startsWith( VARIABLE_PREFIX ) )
@@ -219,7 +222,7 @@ class UIDefaultsLoader
optional = true; optional = true;
} }
String newValue = properties.getProperty( value ); String newValue = propertiesGetter.apply( value );
if( newValue == null ) { if( newValue == null ) {
if( optional ) if( optional )
return "null"; return "null";
@@ -227,7 +230,7 @@ class UIDefaultsLoader
throw new IllegalArgumentException( "variable or property '" + value + "' not found" ); throw new IllegalArgumentException( "variable or property '" + value + "' not found" );
} }
return resolveValue( properties, newValue ); return resolveValue( newValue, propertiesGetter );
} }
enum ValueType { UNKNOWN, STRING, BOOLEAN, CHARACTER, INTEGER, FLOAT, BORDER, ICON, INSETS, DIMENSION, COLOR, enum ValueType { UNKNOWN, STRING, BOOLEAN, CHARACTER, INTEGER, FLOAT, BORDER, ICON, INSETS, DIMENSION, COLOR,

View File

@@ -17,7 +17,6 @@
package com.formdev.flatlaf; package com.formdev.flatlaf;
import java.util.Collections; import java.util.Collections;
import java.util.Properties;
import java.util.function.Function; import java.util.function.Function;
import com.formdev.flatlaf.UIDefaultsLoader.ValueType; import com.formdev.flatlaf.UIDefaultsLoader.ValueType;
@@ -49,8 +48,8 @@ public class UIDefaultsLoaderAccessor
public static Object NULL = ValueType.NULL; public static Object NULL = ValueType.NULL;
public static Object LAZY = ValueType.LAZY; public static Object LAZY = ValueType.LAZY;
public static String resolveValue( Properties properties, String value ) { public static String resolveValue( String value, Function<String, String> propertiesGetter ) {
return UIDefaultsLoader.resolveValue( properties, value ); return UIDefaultsLoader.resolveValue( value, propertiesGetter );
} }
public static Object parseValue( String key, String value, Object[] resultValueType, public static Object parseValue( String key, String value, Object[] resultValueType,

View File

@@ -37,6 +37,7 @@ class FlatThemePropertiesSupport
implements DocumentListener implements DocumentListener
{ {
private final FlatSyntaxTextArea textArea; private final FlatSyntaxTextArea textArea;
private final Function<String, String> propertiesGetter;
private final Function<String, String> resolver; private final Function<String, String> resolver;
private Properties propertiesCache; private Properties propertiesCache;
private final Map<Integer, Object> parsedValueCache = new HashMap<>(); private final Map<Integer, Object> parsedValueCache = new HashMap<>();
@@ -44,6 +45,9 @@ class FlatThemePropertiesSupport
FlatThemePropertiesSupport( FlatSyntaxTextArea textArea ) { FlatThemePropertiesSupport( FlatSyntaxTextArea textArea ) {
this.textArea = textArea; this.textArea = textArea;
propertiesGetter = key -> {
return getProperties().getProperty( key );
};
resolver = v -> { resolver = v -> {
return resolveValue( v ); return resolveValue( v );
}; };
@@ -52,7 +56,7 @@ class FlatThemePropertiesSupport
} }
private String resolveValue( String value ) { private String resolveValue( String value ) {
return UIDefaultsLoaderAccessor.resolveValue( getProperties(), value ); return UIDefaultsLoaderAccessor.resolveValue( value, propertiesGetter );
} }
Object getParsedValueAtLine( int line ) { Object getParsedValueAtLine( int line ) {