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

ASF GitHub Bot commented on GROOVY-8788:
----------------------------------------

eric-milles opened a new pull request, #1766:
URL: https://github.com/apache/groovy/pull/1766

   Given choice between extension methods `m(String,Object)` and 
`m(Object,String)`, prefer closer parameter matching.  This aligns with the 
method selection of the dynamic runtime.  So there are some edge cases that 
were giving false STC errors or missing them.
   
   This is a breaking change!  `getAt(Map,String)` was added to prevent STC 
errors for `Type obj = map[str]` expressions.
   
   https://issues.apache.org/jira/browse/GROOVY-8788
   
   https://issues.apache.org/jira/browse/GROOVY-6504
   https://issues.apache.org/jira/browse/GROOVY-6849
   https://issues.apache.org/jira/browse/GROOVY-6970
   https://issues.apache.org/jira/browse/GROOVY-8787
   https://issues.apache.org/jira/browse/GROOVY-9069
   https://issues.apache.org/jira/browse/GROOVY-9420




> Inconsistency in extension method selection with @CompileStatic
> ---------------------------------------------------------------
>
>                 Key: GROOVY-8788
>                 URL: https://issues.apache.org/jira/browse/GROOVY-8788
>             Project: Groovy
>          Issue Type: Bug
>          Components: Static compilation, Static Type Checker
>    Affects Versions: 2.4.15, 2.5.2
>            Reporter: Daniil Ovchinnikov
>            Assignee: Eric Milles
>            Priority: Major
>              Labels: breaking
>
> Given properly registered extension class:
> {code:java|title=MyExtensions.java}
> public class MyExtensions {
>     public static void foo(Object self, String s) {
>         System.out.println("Object#foo(String)");
>     }
>     public static void foo(String self, Object o) {
>         System.out.println("String#foo(Object)");
>     }
> }
> {code}
> Run
> {code:java|title=playground.groovy}
> void usageExt() {
>     "".foo("") // prints "Object#foo(String)" which is correct
> }
> @groovy.transform.CompileStatic
> void usageExtStatic() {
>     "".foo("") // prints "String#foo(Object)" which is questionable
> }
> usageExt()
> usageExtStatic()
> {code}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to