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()