[ 
https://issues.apache.org/jira/browse/GROOVY-11628?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Oscar N updated GROOVY-11628:
-----------------------------
    Issue Type: New Feature  (was: Bug)

> Support record deconstruction inside method parameter
> -----------------------------------------------------
>
>                 Key: GROOVY-11628
>                 URL: https://issues.apache.org/jira/browse/GROOVY-11628
>             Project: Groovy
>          Issue Type: New Feature
>          Components: syntax
>            Reporter: Oscar N
>            Priority: Major
>
> Java supports record deconstruction in switch and instanceof, like this:
> {code:java}
> record BlockPos(int x, int y, int z) {}
> record BlockBreakEvent(String username, BlockPos pos) {}
>       
> public static void main(String[] args) {
>     var event = new BlockBreakEvent("Bob", new BlockPos(50, 100, 300));
>     switch (event) {
>         case BlockBreakEvent(String username, BlockPos(int x, int y, int z)) 
> -> 
>             LOGGER.info("Player {} broke a block at ({}, {}, {})", username, 
> x, y, z);
>     }
>     if (event instanceof BlockBreakEvent(String username, BlockPos(int x, int 
> y, int z)))
>         LOGGER.info("Player {} broke a block at ({}, {}, {})", username, x, 
> y, z);
> }
> {code}
> However, this cannot be used directly in method parameters, making the syntax 
> sugar less useful for code styles that involve the publisher/subscriber 
> pattern with a subscriber method per event type. I'd like to request support 
> for this in Groovy:
> {code:groovy}
> static void onBlockBreak(BlockBreakEvent(String username, BlockPos(int x, int 
> y, int z)) {
>     log.info "Player $username broke a block at ($x, $y, $z)"
> }
> {code}
> The above would be equivalent to the following code:
> {code:groovy}
> static void onBlockBreak(BlockBreakEvent event) {
>     String username = event.username()
>     def (int x, int y, int z) = event.pos()
>     log.info "Player $username broke a block at ($x, $y, $z)"
> }
> {code}
> Relates to https://issues.apache.org/jira/browse/GROOVY-11589



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

Reply via email to