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)