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

Eric Milles commented on GROOVY-11896:
--------------------------------------

Does the import customizer support these? Or would that be a separate 
enhancement request?

> Support module import declarations
> ----------------------------------
>
>                 Key: GROOVY-11896
>                 URL: https://issues.apache.org/jira/browse/GROOVY-11896
>             Project: Groovy
>          Issue Type: New Feature
>            Reporter: Paul King
>            Assignee: Paul King
>            Priority: Major
>             Fix For: 6.0.0-alpha-1
>
>
> In Java, _module import declarations_ allow you to import all exported 
> packages of a module with a single statement. It was introduced as a preview 
> feature in Java 23 ([JEP 476|https://openjdk.org/jeps/476]) and finalized in 
> Java 25 ([JEP 511|https://openjdk.org/jeps/511]).
> The syntax is as follows:
> {code:java}
> import module java.base;    // Java
> {code}
> h3. Implementation highlights
> *  Grammar extended with a dedicated import module <qualifiedName> 
> alternative (no .* or as alias — rejected at parse time)                      
>                                                                               
>                  
> *  Modules resolved via ModuleFinder.compose(ofSystem(), 
> classpathModuleFinder()) — system/JDK modules first, then modular JARs on the 
> compilation classpath                                                         
>                              
> *  Explicit JPMS modules (with module-info.class) import all unqualified 
> exports; automatic modules (with Automatic-Module-Name manifest entry) import 
> all packages                                                                  
>              
> *   Default imports and existing star imports are skipped to avoid redundant 
> resolution                                                                    
>                                                                               
>           
> *   module remains usable as an identifier (context-sensitive keyword, like 
> record/sealed)                                                                
>                                                                               
>            
> Passing test scenarios:
> {code}                                                                        
>                                                                               
>                                                                               
>                
>   // System module — JDK classes available without individual imports
>   import module java.base                                                     
>                                                                               
>                                                                               
>          
>   LocalDate date = LocalDate.now()
>   CountDownLatch latch = new CountDownLatch(1)                                
>                                                                               
>                                                                               
>          
>                                                             
>   // System module — java.sql                                                 
>                                                                               
>                                                                               
>          
>   import module java.sql                                    
>   assert Connection.name == 'java.sql.Connection'                             
>                                                                               
>                                                                               
>          
>   assert DriverManager.name == 'java.sql.DriverManager'     
>                                                                               
>                                                                               
>                                                                               
>          
>   // JPMS module from classpath (module-info.class)                           
>                                                                               
>                                                                               
>          
>   import module org.junit.jupiter.api                                         
>                                                                               
>                                                                               
>          
>   assert Test.name == 'org.junit.jupiter.api.Test'                            
>                                                                               
>                                                                               
>          
>   assert DisabledIf.name == 'org.junit.jupiter.api.condition.DisabledIf'
>                                                                               
>                                                                               
>                                                                               
>          
>   // Automatic module from classpath (Automatic-Module-Name in MANIFEST.MF)   
>                                                                               
>                                                                               
>          
>   import module org.apache.groovy.jmx                                         
>                                                                               
>                                                                               
>          
>   assert GroovyMBean.name == 'groovy.jmx.GroovyMBean'                         
>                                                                               
>                                                                               
>          
>                                                                               
>                                                                               
>                                                                               
>          
>   // Unknown module — compile error
>   import module no.such.module  // fails: "Unknown module: no.such.module"    
>                                                                               
>                                                                               
>          
>                                                                               
>                                                                               
>                                                                               
>          
>   // Star/alias not permitted with module imports — parse error               
>                                                                               
>                                                                               
>          
>   import module java.base.*     // fails                                      
>                                                                               
>                                                                               
>          
>   import module java.base as jb // fails                                      
>                                                                               
>                                                                               
>          
>                                                                               
>                                                                               
>                                                                               
>          
>   // 'module' still works as an identifier
>   def module = 'hello'                                                        
>                                                                               
>                                                                               
>          
>   assert module.toUpperCase() == 'HELLO'
> {code}



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

Reply via email to