You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by em...@apache.org on 2021/10/31 20:37:21 UTC
[groovy] 02/02: `UIManager#setLookAndFeel(String)` can load system
classes
This is an automated email from the ASF dual-hosted git repository.
emilles pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git
commit c3833778db575551ff506bd1fecaa001690834a6
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Sun Oct 31 15:28:49 2021 -0500
`UIManager#setLookAndFeel(String)` can load system classes
---
.../groovy/groovy/swing/LookAndFeelHelper.groovy | 66 +++++++++++-----------
.../groovy/groovy/swing/SwingBuilderTest.groovy | 6 +-
2 files changed, 36 insertions(+), 36 deletions(-)
diff --git a/subprojects/groovy-swing/src/main/groovy/groovy/swing/LookAndFeelHelper.groovy b/subprojects/groovy-swing/src/main/groovy/groovy/swing/LookAndFeelHelper.groovy
index d07d83f..a88467d 100644
--- a/subprojects/groovy-swing/src/main/groovy/groovy/swing/LookAndFeelHelper.groovy
+++ b/subprojects/groovy-swing/src/main/groovy/groovy/swing/LookAndFeelHelper.groovy
@@ -36,7 +36,7 @@ class LookAndFeelHelper {
return instance ?: (instance = new LookAndFeelHelper())
}
- private final Map lafCodeNames = [
+ private final Map<String, String> lafCodeNames = [
// stuff built into various JDKs
metal : 'javax.swing.plaf.metal.MetalLookAndFeel',
nimbus : getNimbusLAFName(),
@@ -101,53 +101,55 @@ class LookAndFeelHelper {
attrs[attr] = handler
}
-
boolean isLeaf() {
return true
}
LookAndFeel lookAndFeel(Object value, Map attributes, Closure initClosure) {
- LookAndFeel lafInstance
- String lafClassName
-
- if ((value instanceof Closure) && (initClosure == null)) {
+ if (value instanceof Closure && initClosure == null) {
initClosure = value
value = null
}
if (value == null) {
value = attributes.remove('lookAndFeel')
}
- if (value instanceof GString) value = value as String
- if (FactoryBuilderSupport.checkValueIsTypeNotString(value, 'lookAndFeel', LookAndFeel)) {
- lafInstance = value
- lafClassName = lafInstance.class.name
- } else if (value != null) {
- lafClassName = lafCodeNames[value] ?: value
- lafInstance = Class.forName(lafClassName, true, getClass().classLoader).newInstance()
- }
+ if (value instanceof GString) value = value.toString()
+
+ LookAndFeel laf = UIManager.getLookAndFeel()
+ try {
+ if (FactoryBuilderSupport.checkValueIsTypeNotString(value, 'lookAndFeel', LookAndFeel)) {
+ UIManager.setLookAndFeel(value)
+ } else if (value != null) {
+ UIManager.setLookAndFeel(lafCodeNames[value] ?: value)
+ }
+
+ LookAndFeel lafInstance = UIManager.getLookAndFeel()
+ String lafClassName = lafInstance.class.name
+
+ // assume all configuration must be done prior to LAF being installed
+ Map possibleAttributes = extendedAttributes[lafClassName] ?: [:]
- // assume all configuration must be done prior to LAF being installed
- Map possibleAttributes = extendedAttributes[lafClassName] ?: [:]
-
- attributes.each {k, v ->
- if (possibleAttributes[k]) {
- possibleAttributes[k](lafInstance, v)
- } else {
- try {
- lafInstance."$k" = v
- } catch (MissingPropertyException mpe) {
- throw new RuntimeException("SwingBuilder initialization for the Look and Feel Class $lafClassName does accept the attribute $k")
+ attributes.each {k, v ->
+ if (possibleAttributes[k]) {
+ possibleAttributes[k](lafInstance, v)
+ } else {
+ try {
+ lafInstance."$k" = v
+ } catch (MissingPropertyException mpe) {
+ throw new RuntimeException("SwingBuilder initialization for the Look and Feel Class $lafClassName does accept the attribute $k")
+ }
}
}
- }
-
- if (initClosure) {
- initClosure.call(lafInstance)
- }
- UIManager.setLookAndFeel(lafInstance)
+ if (initClosure) {
+ initClosure.call(lafInstance)
+ }
- return lafInstance
+ return lafInstance
+ } catch (RuntimeException e) {
+ UIManager.setLookAndFeel(laf)
+ throw e
+ }
}
static String getNimbusLAFName() {
diff --git a/subprojects/groovy-swing/src/test/groovy/groovy/swing/SwingBuilderTest.groovy b/subprojects/groovy-swing/src/test/groovy/groovy/swing/SwingBuilderTest.groovy
index d6d82fc..3a7e7ac 100644
--- a/subprojects/groovy-swing/src/test/groovy/groovy/swing/SwingBuilderTest.groovy
+++ b/subprojects/groovy-swing/src/test/groovy/groovy/swing/SwingBuilderTest.groovy
@@ -1431,10 +1431,8 @@ class SwingBuilderTest extends GroovySwingTestCase {
swing.lookAndFeel(lookAndFeel: 'metal', boldFonts: true) { laf ->
assert laf instanceof MetalLookAndFeel
}
- shouldFail {
- swing.lookAndFeel() {laf ->
- "do" + "Nothing"
- }
+ swing.lookAndFeel() { laf ->
+ assert laf != null
}
} finally {
UIManager.setLookAndFeel(oldLAF)