jep511: add the star-import clash demo, java.base export count and a java.time jshell check

TwoStarImports.java, the java.base export count in output/04, the extra LocalDate line in src/imports.jsh and regenerated transcripts. Additive commit.

Co-Authored-By: Claude Sonnet 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01TF9JWFvJSNm6HVzswzZU5a
This commit is contained in:
Claude
2026-09-24 11:42:45 +00:00
parent 385cc25233
commit 96b25c8fc4
6 changed files with 47 additions and 4 deletions
+9
View File
@@ -0,0 +1,9 @@
import java.util.*;
import java.sql.*;
public class TwoStarImports {
public static void main(String[] args) {
Date d = new Date(0L); // the same clash, with the old on-demand imports
System.out.println(d);
}
}
+22
View File
@@ -34,6 +34,28 @@ broken/AmbiguousList.java:6: error: reference to List is ambiguous
both class java.awt.List in java.awt and interface java.util.List in java.util match
1 error
$ javac broken/TwoStarImports.java (25.0.4.1+1-LTS)
broken/TwoStarImports.java:6: error: reference to Date is ambiguous
Date d = new Date(0L); // the same clash, with the old on-demand imports
^
both class java.sql.Date in java.sql and class java.util.Date in java.util match
broken/TwoStarImports.java:6: error: reference to Date is ambiguous
Date d = new Date(0L); // the same clash, with the old on-demand imports
^
both class java.sql.Date in java.sql and class java.util.Date in java.util match
2 errors
$ javac broken/TwoStarImports.java (27+35)
broken/TwoStarImports.java:6: error: reference to Date is ambiguous
Date d = new Date(0L); // the same clash, with the old on-demand imports
^
both class java.sql.Date in java.sql and class java.util.Date in java.util match
broken/TwoStarImports.java:6: error: reference to Date is ambiguous
Date d = new Date(0L); // the same clash, with the old on-demand imports
^
both class java.sql.Date in java.sql and class java.util.Date in java.util match
2 errors
$ javac src/FixedDate.java && java FixedDate (25.0.4.1+1-LTS)
java.util.Date
java.sql.Date
@@ -1,11 +1,14 @@
$ java --describe-module java.base | grep -c '^exports' (25.0.4.1+1-LTS)
58
$ java --describe-module java.sql (25.0.4.1+1-LTS)
[email protected]
exports java.sql
exports javax.sql
requires java.xml transitive
requires java.logging transitive
requires java.transaction.xa transitive
requires java.base mandated
requires java.xml transitive
requires java.logging transitive
uses java.sql.Driver
$ java --describe-module java.se | grep -c 'requires' (25.0.4.1+1-LTS)
+7
View File
@@ -10,12 +10,19 @@ $ jshell --feedback concise src/imports.jsh (21.0.10+7-Ubuntu-124.04)
import java.util.regex.*
import java.util.stream.*
[2, 4]
Error:
cannot find symbol
symbol: variable LocalDate
System.out.println(LocalDate.of(2026, 9, 15))
^-------^
$ jshell --feedback concise src/imports.jsh (25.0.4.1+1-LTS)
import java.base
[2, 4]
2026-09-15
$ jshell --feedback concise src/imports.jsh (27+35)
import java.base
[2, 4]
2026-09-15
+3 -2
View File
@@ -23,7 +23,7 @@ both() { local fn="$1"; shift; "$fn" "$JDK25" "$@"; echo; "$fn" "$JDK27" "$@"; }
{ both cr src/OldWay.java OldWay; echo; both cr src/NewWay.java NewWay; } > "$OUT/01-old-vs-new.txt"
# 02 - ambiguity: two modules export a class with the same simple name
{ both co broken/AmbiguousDate.java; echo; both co broken/AmbiguousList.java; echo; both cr src/FixedDate.java FixedDate; } > "$OUT/02-ambiguity.txt"
{ both co broken/AmbiguousDate.java; echo; both co broken/AmbiguousList.java; echo; both co broken/TwoStarImports.java; echo; both cr src/FixedDate.java FixedDate; } > "$OUT/02-ambiguity.txt"
# 03 - precedence: who wins when several imports offer the same simple name
{ both cr src/StarImportWins.java StarImportWins; echo; both cr src/StarImportWinsSql.java StarImportWinsSql; echo
@@ -31,7 +31,8 @@ both() { local fn="$1"; shift; "$fn" "$JDK25" "$@"; echo; "$fn" "$JDK27" "$@"; }
both cr src/DuplicateImports.java DuplicateImports; } > "$OUT/03-precedence.txt"
# 04 - what one module import actually brings in
{ echo "\$ java --describe-module java.sql ($(t "$JDK25"))"; "$JDK25/bin/java" --describe-module java.sql; echo
{ echo "\$ java --describe-module java.base | grep -c '^exports' ($(t "$JDK25"))"; "$JDK25/bin/java" --describe-module java.base | grep -c '^exports'; echo
echo "\$ java --describe-module java.sql ($(t "$JDK25"))"; "$JDK25/bin/java" --describe-module java.sql; echo
echo "\$ java --describe-module java.se | grep -c 'requires' ($(t "$JDK25"))"; "$JDK25/bin/java" --describe-module java.se | grep -c requires; echo
echo "\$ java --describe-module java.se | grep -c exports ($(t "$JDK25"))"; "$JDK25/bin/java" --describe-module java.se | grep -c exports; echo
both cr src/Transitive.java Transitive; echo; both co broken/SqlDoesNotGiveBase.java; echo
+1
View File
@@ -1,3 +1,4 @@
/imports
System.out.println(List.of(1, 2).stream().map(x -> x * 2).collect(Collectors.toList()))
System.out.println(LocalDate.of(2026, 9, 15))
/exit