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)

Reply via email to