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

Eric Milles commented on GROOVY-10887:
--------------------------------------

I have this:
{code:groovy}
            
@Grab('org.springframework.integration:spring-integration-groovy:5.5.15')
            import 
org.springframework.integration.channel.AbstractMessageChannel
            import org.springframework.integration.dsl.MessageChannelSpec
            import org.springframework.integration.dsl.MessageChannels
            @Grab('org.springframework:spring-messaging:5.3.24')
            import org.springframework.messaging.MessageChannel

            def <AMC extends AbstractMessageChannel, MCS extends 
MessageChannelSpec<MCS,AMC>> MCS mark(MCS self) {
                self.interceptor(null) // returns self
            }
            MessageChannel make() {
                
mark(MessageChannels.publishSubscribe(true).minSubscribers(2)).get()
            }
{code}

But it does not reproduce and I cannot move to "use" under STC or to an 
extension module without infrastructure.  Can you provide a sample project?

> groovyc STC loses generic information in extension methods
> ----------------------------------------------------------
>
>                 Key: GROOVY-10887
>                 URL: https://issues.apache.org/jira/browse/GROOVY-10887
>             Project: Groovy
>          Issue Type: Bug
>          Components: Static Type Checker
>    Affects Versions: 4.0.6, 4.0.7
>            Reporter: Christopher Smith
>            Assignee: Eric Milles
>            Priority: Major
>
> N.B.: This code compiles as expected under GRECLIPSE (both the 2022-12-06 and 
> 2022-12-26 nightlies) but fails under groovyc.
> I have extension methods that are intended to be applied to Spring 
> Integration DSLs:
> {code}
> public final class SpringIntegrationDefaultMethods {
>       public static <C extends AbstractMessageChannel, S extends 
> MessageChannelSpec<S, C>>
>     S markMessagesAsJumpered(S self) {
>         return self.interceptor(new JumperInterceptor()); // returns S
>     }
> }
> {code}
> {code}
> moduleName = example-util-spring-integration
> moduleVersion = 0.0.1
> extensionClasses = 
> com.example.util.spring.integration.groovy.SpringIntegrationDefaultMethods
> {code}
> From a Groovy configuration class:
> {code}
>     @Bean(CHANNEL_DISPATCH_MESSAGE)
>     MessageChannel dispatchQueueOutgoing() {
>         // org.springframework.integration.dsl.MessageChannels.
>         publishSubscribe(true) // line 49
>             .minSubscribers(2)
>             .markMessagesAsJumpered()
>             .get()
>     }
> {code}
> In Eclipse, this compiles as expected. In groovyc 4.0.6 and 4.0.7, I get
> {code}
> [ERROR] /home/christopher/git/.../DispatchHandlingIntegration.groovy: 49: 
> [Static type checking] - Cannot find matching method S#get(). Please check if 
> the declared type is correct and if the method exists.
> [ERROR]  @ line 49, column 9.
> [ERROR]            publishSubscribe(true)
> {code}
> Adding an explicit type witness
> {code}
> .<PublishSubscribeChannel, PublishSubscribeChannelSpec<?>> 
> markMessagesAsJumpered()
> {code}
> resolves the error in groovyc.



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

Reply via email to