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 both class java.awt.List in java.awt and interface java.util.List in java.util match
1 error 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) $ javac src/FixedDate.java && java FixedDate (25.0.4.1+1-LTS)
java.util.Date java.util.Date
java.sql.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) $ java --describe-module java.sql (25.0.4.1+1-LTS)
[email protected] [email protected]
exports java.sql exports java.sql
exports javax.sql exports javax.sql
requires java.xml transitive
requires java.logging transitive
requires java.transaction.xa transitive requires java.transaction.xa transitive
requires java.base mandated requires java.base mandated
requires java.xml transitive
requires java.logging transitive
uses java.sql.Driver uses java.sql.Driver
$ java --describe-module java.se | grep -c 'requires' (25.0.4.1+1-LTS) $ 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.regex.*
import java.util.stream.* import java.util.stream.*
[2, 4] [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) $ jshell --feedback concise src/imports.jsh (25.0.4.1+1-LTS)
import java.base import java.base
[2, 4] [2, 4]
2026-09-15
$ jshell --feedback concise src/imports.jsh (27+35) $ jshell --feedback concise src/imports.jsh (27+35)
import java.base import java.base
[2, 4] [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" { 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 # 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 # 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 { 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" both cr src/DuplicateImports.java DuplicateImports; } > "$OUT/03-precedence.txt"
# 04 - what one module import actually brings in # 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 '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 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 both cr src/Transitive.java Transitive; echo; both co broken/SqlDoesNotGiveBase.java; echo
+1
View File
@@ -1,3 +1,4 @@
/imports /imports
System.out.println(List.of(1, 2).stream().map(x -> x * 2).collect(Collectors.toList())) System.out.println(List.of(1, 2).stream().map(x -> x * 2).collect(Collectors.toList()))
System.out.println(LocalDate.of(2026, 9, 15))
/exit /exit