class PropertyTheme extends AbstractTheme {
    /**
     * Creates a new {@code PropertyTheme} that is initialized by the properties passed in. If the properties refer to
     * a class that cannot be resolved, it will throw {@code IllegalArgumentException}.
     * @param properties Properties to initialize this theme with
     */
    public PropertyTheme(Properties properties) {
        this(properties, false);
    }

    /**
     * Creates a new {@code PropertyTheme} that is initialized by the properties value and optionally prevents it from
     * throwing an exception if there are invalid definitions in the properties object.
     * @param properties Properties to initialize this theme with
     * @param ignoreUnknownClasses If {@code true}, will not throw an exception if there is an invalid entry in the
     *                             properties object
     */
    public PropertyTheme(Properties properties, boolean ignoreUnknownClasses) {

        super( (WindowPostRenderer)instanceByClassName(properties.getProperty("postrenderer", "")),
               (WindowDecorationRenderer)instanceByClassName(properties.getProperty("windowdecoration", "")));

        for(String key: properties.stringPropertyNames()) {
            String definition = getDefinition(key);
            if(!addStyle(definition, getStyle(key), properties.getProperty(key))) {
                if(!ignoreUnknownClasses) {
                    throw new IllegalArgumentException("Unknown class encountered when parsing theme: '" + definition + "'");
                }
            }
        }
    }

    private String getDefinition(String propertyName) {<FILL_FUNCTION_BODY>}

    private String getStyle(String propertyName) {
        if(!propertyName.contains(".")) {
            return propertyName;
        }
        else {
            return propertyName.substring(propertyName.lastIndexOf(".") + 1);
        }
    }
}

        if(!propertyName.contains(".")) {
            return "";
        }
        else {
            return propertyName.substring(0, propertyName.lastIndexOf("."));
        }
    
<methods>public List<java.lang.String> findRedundantDeclarations() ,public com.googlecode.lanterna.graphics.ThemeDefinition getDefaultDefinition() ,public com.googlecode.lanterna.graphics.ThemeDefinition getDefinition(Class<?>) ,public com.googlecode.lanterna.gui2.WindowDecorationRenderer getWindowDecorationRenderer() ,public com.googlecode.lanterna.gui2.WindowPostRenderer getWindowPostRenderer() <variables>private static final java.lang.String STYLE_ACTIVE,private static final java.util.regex.Pattern STYLE_FORMAT,private static final java.lang.String STYLE_INSENSITIVE,private static final java.lang.String STYLE_NORMAL,private static final java.lang.String STYLE_PRELIGHT,private static final java.lang.String STYLE_SELECTED,private final non-sealed com.googlecode.lanterna.graphics.AbstractTheme.ThemeTreeNode rootNode,private final non-sealed com.googlecode.lanterna.gui2.WindowDecorationRenderer windowDecorationRenderer,private final non-sealed com.googlecode.lanterna.gui2.WindowPostRenderer windowPostRenderer