This is an automated email from the ASF dual-hosted git repository.

sunlan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git


The following commit(s) were added to refs/heads/master by this push:
     new b56042c855 GROOVY-11513: include `import java.time.*` by default
b56042c855 is described below

commit b56042c855403d010673fc55db153d5b9f6c9136
Author: Eric Milles <eric.mil...@thomsonreuters.com>
AuthorDate: Sat Mar 15 20:17:37 2025 -0500

    GROOVY-11513: include `import java.time.*` by default
---
 .../java/org/codehaus/groovy/control/ResolveVisitor.java |  6 +++---
 src/spec/doc/core-differences-java.adoc                  |  1 +
 src/spec/doc/core-program-structure.adoc                 |  1 +
 src/spec/test/PackageTest.groovy                         |  5 +++--
 .../completion/ImportsSyntaxCompleterTest.groovy         | 16 +++++++++-------
 5 files changed, 17 insertions(+), 12 deletions(-)

diff --git a/src/main/java/org/codehaus/groovy/control/ResolveVisitor.java 
b/src/main/java/org/codehaus/groovy/control/ResolveVisitor.java
index 1d60c8ec70..d671816f9f 100644
--- a/src/main/java/org/codehaus/groovy/control/ResolveVisitor.java
+++ b/src/main/java/org/codehaus/groovy/control/ResolveVisitor.java
@@ -95,9 +95,9 @@ import static 
org.codehaus.groovy.ast.tools.ClosureUtils.getParametersSafe;
  */
 public class ResolveVisitor extends ClassCodeExpressionTransformer {
     // note: BigInteger and BigDecimal are also imported by default
-    // `java.util` is used much frequently than other two java 
packages(`java.io` and `java.net`), so place java.util before the two packages
-    public static final String[] DEFAULT_IMPORTS = {"java.lang.", 
"java.util.", "java.io.", "java.net.", "groovy.lang.", "groovy.util."};
-    public static final String[] EMPTY_STRING_ARRAY = new String[0];
+    // `java.util` is used much frequently, so place it before `java.io`, et 
al.
+    public static final String[] DEFAULT_IMPORTS = {"java.lang.", 
"java.util.", "java.io.", "java.net.", "java.time.", "groovy.lang.", 
"groovy.util."};
+    public static final String[] EMPTY_STRING_ARRAY = {};
     public static final String QUESTION_MARK = "?";
 
     private final CompilationUnit compilationUnit;
diff --git a/src/spec/doc/core-differences-java.adoc 
b/src/spec/doc/core-differences-java.adoc
index acfe9585cc..f153b566c9 100644
--- a/src/spec/doc/core-differences-java.adoc
+++ b/src/spec/doc/core-differences-java.adoc
@@ -45,6 +45,7 @@ have to use an explicit `import` statement to use them:
 * java.math.BigDecimal
 * java.math.BigInteger
 * java.net.*
+* java.time.*
 * java.util.*
 * groovy.lang.*
 * groovy.util.*
diff --git a/src/spec/doc/core-program-structure.adoc 
b/src/spec/doc/core-program-structure.adoc
index d89d5143bf..0b0704787a 100644
--- a/src/spec/doc/core-program-structure.adoc
+++ b/src/spec/doc/core-program-structure.adoc
@@ -72,6 +72,7 @@ import java.lang.*
 import java.util.*
 import java.io.*
 import java.net.*
+import java.time.*
 import groovy.lang.*
 import groovy.util.*
 import java.math.BigInteger
diff --git a/src/spec/test/PackageTest.groovy b/src/spec/test/PackageTest.groovy
index 55c22a907d..b0bbbfbf2c 100644
--- a/src/spec/test/PackageTest.groovy
+++ b/src/spec/test/PackageTest.groovy
@@ -17,7 +17,7 @@
  *  under the License.
  */
 
-import org.junit.Test
+import org.junit.jupiter.api.Test
 
 import static groovy.test.GroovyAssert.assertScript
 
@@ -55,7 +55,8 @@ final class PackageTest {
     void testDefaultImports() {
         assertScript '''
             // tag::default_import[]
-            new Date()
+            long time = LocalDateTime.now().toEpochSecond(ZoneOffset.UTC)
+            Date date = new Date(time)
             // end::default_import[]
         '''
     }
diff --git 
a/subprojects/groovy-groovysh/src/test/groovy/org/apache/groovy/groovysh/completion/ImportsSyntaxCompleterTest.groovy
 
b/subprojects/groovy-groovysh/src/test/groovy/org/apache/groovy/groovysh/completion/ImportsSyntaxCompleterTest.groovy
index 53b483cca3..bd8b2996af 100644
--- 
a/subprojects/groovy-groovysh/src/test/groovy/org/apache/groovy/groovysh/completion/ImportsSyntaxCompleterTest.groovy
+++ 
b/subprojects/groovy-groovysh/src/test/groovy/org/apache/groovy/groovysh/completion/ImportsSyntaxCompleterTest.groovy
@@ -24,7 +24,9 @@ import 
org.apache.groovy.groovysh.completion.antlr4.ImportsSyntaxCompleter
 
 import static org.apache.groovy.groovysh.completion.TokenUtilTest.tokenList
 
-class ImportsSyntaxCompleterTest extends CompleterTestSupport {
+final class ImportsSyntaxCompleterTest extends CompleterTestSupport {
+
+    private static final int DEFAULT_IMPORT_COUNT = 
org.codehaus.groovy.control.ResolveVisitor.DEFAULT_IMPORTS.size()
 
     void testPackagePattern() {
         assert 'static 
java.lang.Math'.matches(ImportsSyntaxCompleter.STATIC_IMPORT_PATTERN)
@@ -36,19 +38,19 @@ class ImportsSyntaxCompleterTest extends 
CompleterTestSupport {
     }
 
     void testPreImported() {
-        groovyshMocker.demand.getPackageHelper(6) { [getContents: {['Foo']}] }
+        groovyshMocker.demand.getPackageHelper(DEFAULT_IMPORT_COUNT) { 
[getContents: {['Foo']}] }
         groovyshMocker.use {
             Groovysh groovyshMock = new Groovysh()
             ImportsSyntaxCompleter completer = new 
ImportsSyntaxCompleter(groovyshMock)
             def candidates = ['prefill']
             assert completer.findMatchingPreImportedClasses('Foo', candidates)
             // once for each standard package
-            assert ['prefill', 'Foo', 'Foo', 'Foo', 'Foo', 'Foo', 'Foo'] == 
candidates
+            assert ['prefill', *Collections.nCopies(DEFAULT_IMPORT_COUNT, 
'Foo')] == candidates
         }
     }
 
     void testPreImportedBigs() {
-        groovyshMocker.demand.getPackageHelper(6) { [getContents: {[]}] }
+        groovyshMocker.demand.getPackageHelper(DEFAULT_IMPORT_COUNT) { 
[getContents: {[]}] }
         groovyshMocker.use {
             Groovysh groovyshMock = new Groovysh()
             ImportsSyntaxCompleter completer = new 
ImportsSyntaxCompleter(groovyshMock)
@@ -178,7 +180,7 @@ class ImportsSyntaxCompleterTest extends 
CompleterTestSupport {
 
     // Integration tests over all methods
     void testNoImports() {
-        groovyshMocker.demand.getPackageHelper(6) { [getContents: {[]}] }
+        groovyshMocker.demand.getPackageHelper(DEFAULT_IMPORT_COUNT) { 
[getContents: {[]}] }
         groovyshMocker.demand.getImports(1) { [] }
         groovyshMocker.use {
             Groovysh groovyshMock = new Groovysh()
@@ -190,7 +192,7 @@ class ImportsSyntaxCompleterTest extends 
CompleterTestSupport {
     }
 
     void testSimpleImport() {
-        groovyshMocker.demand.getPackageHelper(6) { [getContents: {[]}] }
+        groovyshMocker.demand.getPackageHelper(DEFAULT_IMPORT_COUNT) { 
[getContents: {[]}] }
         groovyshMocker.demand.getImports(1) { ['xyzabc.*', 'xxxx.*'] }
         groovyshMocker.demand.getPackageHelper(1) { [getContents: { 
['Xyzabc']}] }
         groovyshMocker.demand.getPackageHelper(1) { [getContents: { 
['Xyz123']}] }
@@ -211,7 +213,7 @@ class ImportsSyntaxCompleterTest extends 
CompleterTestSupport {
     }
 
     void testUnknownImport() {
-        groovyshMocker.demand.getPackageHelper(6) { [getContents: {[]}] }
+        groovyshMocker.demand.getPackageHelper(DEFAULT_IMPORT_COUNT) { 
[getContents: {[]}] }
         groovyshMocker.demand.getImports(1) { ['xxxx'] }
         groovyshMocker.use {
             Groovysh groovyshMock = new Groovysh()

Reply via email to