You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@groovy.apache.org by "Jochen Kemnade (JIRA)" <ji...@apache.org> on 2015/11/26 12:41:10 UTC

[jira] [Commented] (GROOVY-7499) DelegatingScript should support resolve strategies

    [ https://issues.apache.org/jira/browse/GROOVY-7499?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15028610#comment-15028610 ] 

Jochen Kemnade commented on GROOVY-7499:
----------------------------------------

For example, the following test will fail:
{code}
    public void testUsePropertiesFromDelegate() throws Exception {
      def cc = new CompilerConfiguration()
      cc.scriptBaseClass = DelegatingScript.class.name
      OutputStream os = new ByteArrayOutputStream()
      def binding = new Binding()
      binding.setProperty("out", new PrintStream(os))
      def sh = new GroovyShell(binding, cc)
      def script = sh.parse('''print("Hello World!")''')
      script.setDelegate([:])
      script.run()

      assert os.toString() == """Hello World!"""
    }
}
{code}
The {{out}} property from the binding will not be used, because the delegate map will return {{null}} for {{getProperty("out")}}.
So, should the script's bindings have precedence over the delegate? What if the delegate also has an {{out}} property?
And what should happen for {{setProperty("foo", "bar")}}? Should {{foo}} be set inside the map or in the script binding?
Should there be {{setResolveStrategyForGetProperty(BINDINGS_ONLY|BINDINGS_FIRST|DELEGATE_ONLY|DELEGATE_FIRST) and setResolveStrategyForSetProperty(...)}}? What about {{invokeMethod}}? For instance, {{println}} should probably not be called on a builder.

> DelegatingScript should support resolve strategies
> --------------------------------------------------
>
>                 Key: GROOVY-7499
>                 URL: https://issues.apache.org/jira/browse/GROOVY-7499
>             Project: Groovy
>          Issue Type: Improvement
>    Affects Versions: 2.4.3, 2.4.4
>            Reporter: Jochen Kemnade
>
> It should be possible to configure a {{DelegatingScript}} wrt. its resolution strategies. In some cases, it might be desirable to try to resolve properties in the script binding before trying the delegate.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)