M. Justin created GROOVY-7912:
---------------------------------
Summary: MissingPropertyException when referencing a static import
in a closure's optional parameters
Key: GROOVY-7912
URL: https://issues.apache.org/jira/browse/GROOVY-7912
Project: Groovy
Issue Type: Bug
Affects Versions: 2.4.7
Reporter: M. Justin
Priority: Minor
A MissingPropertyException is thrown when calling a closure which references a
statically imported field in the value of an optional parameter for a closure.
Likewise, a MissingMethodException is thrown when referencing a statically
imported method in the same manner. This only occurs when calling the method
without specifying the optional parameter.
I have confirmed that this issue does not impact methods with optional
parameters.
The following code illustrates the issue:
{code}import static java.util.Collections.EMPTY_LIST
import static java.util.Collections.emptyList
Closure closureWithStaticImport = { List list = EMPTY_LIST -> }
Closure closureWithoutStaticImport = { List list = Collections.EMPTY_LIST -> }
try {
// An exception is thrown when the statically imported optional parameter is
not specified
closureWithStaticImport()
} catch (MissingPropertyException e) {
assert e.message == 'No such property: EMPTY_LIST for class: staticImportTest'
e.printStackTrace()
}
// No exception is thrown when the optional parameter is specified
closureWithStaticImport(EMPTY_LIST)
// No exception is thrown when the optional parameter is not statically imported
closureWithoutStaticImport()
void methodWithStaticImport(List list = EMPTY_LIST) {}
// No exception is thrown when a method's optional parameter uses a static
import
methodWithStaticImport()
Closure closureWithStaticImportMethod = { List list = emptyList() -> }
try {
// An exception is thrown when the statically imported optional parameter is
not specified
closureWithStaticImportMethod()
} catch (MissingMethodException e) {
assert e.message == 'No signature of method: staticImportTest.emptyList() is
applicable for argument types: () values: []'
e.printStackTrace()
}{code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)