Highlights of the release
- Long Term Support
- Make
intotype and modifier stable #26184 - Remove automatic collection of entry points #25215
- Scaladoc: support expectations in snippets #25713
- Restore
Automatic-Module-Namein standard library's manifest #26218
Other changes and fixes
Annotations
- Unify annotation handling for thread-safe & -unsafe lazy vals #24907
Backend
- Use
IndexOutOfBoundsExceptionconstructor withInt#24764 - Emit acceptable Java generic signatures for HKTs #25540
- Unwrap refined types for Java generic signatures #25626
- Fix Java signatures for arrays of value classes #25631
- Fix Java generic signatures for context functions #25632
- Handle HKT bounds in Java generic signatures #25744
- Emit nested module classes as static inner classes #26137
Constructors
- Lambda-owned param ref in ctor incurs no field #23286
Coverage
- Fix #25624: Scoverage and separation checking failures #25625
- Scoverage: do not instrument methods that have too large bodies #25629
- Scoverage & CC interaction: exempt CC nested symbols from @experimental check #25687
- Coverage + Experimental nested match cases interaction fix #25913
- Scoverage: fix broken warnings related to tail recursion and infinite loop detection #25941
- Scoverage: correctly detect curried constructor applications #26048
- Scoverage: correctly lift wildcard and singleton types #26049
- Scoverage: refrain from lifting closures for capture calculus compatibility #26067
- Scoverage: fix lifted type computation for parameterless methods #26069
- Scoverage: Fix coverage parameterless select qualifier casts #26087
Documentation
- Sys, concurrent, runtime (1): fill in missing @param, @tparam, and @return tags in Scaladoc comments #25371
- Collection mutable (2): fill in missing @param, @tparam, and @return tags in Scaladoc comments #25372
- Collection immutable (3): fill in missing @param, @tparam, and @return tags in Scaladoc comments #25373
- Collection core (4): fill in missing @param, @tparam, and @return tags in Scaladoc comments #25374
- Numeric types (5): fill in missing @param, @tparam, and @return tags in Scaladoc comments #25375
- Array, IArray, Predef, Option (6): fill in missing @param, @tparam, and @return tags in Scaladoc comments #25376
- Math (7): fill in missing @param, @tparam, and @return tags in Scaladoc comments #25377
- Quoted, compiletime (8): fill in missing @param, @tparam, and @return tags in Scaladoc comments #25378
- Jdk (9): fill in missing @param, @tparam, and @return tags in Scaladoc comments #25379
- Util, io, ref (10): fill in missing @param, @tparam, and @return tags in Scaladoc comments #25380
- Improve sizeCompare doc #25696
- Function, Tuple, Product (12): fill in missing @param, @tparam, and @return tags in Scaladoc comments (V2) #25996
- Improve Scaladoc for
Tuple#map#26060 - Fixed broken URL links. #26064
- Enable sc:compile for stdlib package scala.annotation #25836
- Enable sc:compile for stdlib package scala.beans #25837
- Enable sc:compile for stdlib package scala.collection #25838
- Enable sc:compile for stdlib package scala.collection.convert #25839
- Fix secondary constructor capture checking #25841
- Enable sc:compile for stdlib package scala.collection.generic #25845
- Enable sc:compile for stdlib package scala.collection.immutable #25855
- Enable sc:compile for stdlib package scala.collection.mutable #25860
- Enable sc:compile for stdlib package scala.collection.compat #25861
- Enable sc:compile for stdlib package scala.compiletime #25862
- Enable sc:compile for stdlib package scala.concurrent #25867
- Enable sc:compile for stdlib package scala.io #25868
- Enable sc:compile for stdlib package scala.jdk #25870
- Enable sc:compile for stdlib package scala.math #25878
- Enable sc:compile for stdlib package scala.quoted #25912
- Enable sc:compile for stdlib package scala.reflect #25915
Enums
- Adjust error on bad enum #23080
- Preserve Java enum semantics for explicit java.lang.Enum inheritance #25658
Erasure
- Preserve erased flags on synthetic context-function parameters #25751
- Fix #24653: Erase aliases of Unit as result type to void. #26192
Expression Compiler
- Fix expression evaluation in debugger under
-old-syntax#26096
Extension Methods
Implicits
- Fixes #24914 Treat equivalent candidates as divergent in implicit search #25910
- Disallow implicit conversion to AnyRef again. #26210
Incremental Compilation
- Support zinc invalidation for type arguments in macro calls #23900
- Ignore annotations no longer on the classpath in ExtractAPI #25889
- Fixes #21383 enable Mode.ReadPositions when reading annotation trees #25911
Inline
Lambda Lift
Linting
- Improve unused check of variable in assignment body #24685
- Warn about dollars in names of definitions unless backticked #24690
- Use precise type for
xincase x @ (_: A, _: B), take 2 #26161
Opaque Types
- Fix crash on invalid opaque type in package #26118
Parser
- Fix span of xml literal #15635
- Warn if name of empty template has trailing colon #23907
- Warn dubious negative literal syntax #24163
- Fix "Compiler crashes when illegal signature of
applyDynamicis used " #24974 - Check ascription in valdef pattern #25597
- Parse Java annotations on wildcard type arguments #26187
Pattern Matching
- Make sealed abstract java classes exhaustive checkable #25788
Pickling
Presentation Compiler
- Bugfix: Fix issue with empty name throwing exceptions #25752
- Improvement: improve perfomance of the presentation compiler #25769
- Bugfix: Don't add square braces in context bounds #25798
- Bugfix: Show hover on derives clause #25804
- Fix warnings in presentation-compiler #25827
- Improvement: Add -Wunused:all to presentation-compiler #26113
Quotes
- Check that Closures refer to anonymous functions under
-Xcheck-macros#26050 - Consistently use
xCheckMacroAssertinQuotesImpl#26053
REPL
- CC & REPL: restore :type, :doc, and tab completions #25789
- Avoid JLine warning about CompletingParsedLine #25917
- Mostly fix REPL in sbt #25925
- Fix REPL silently exiting after first user input #25969
- Relax typer position assert in interactive mode #26130
Reporting
- Use context.outers instead of owner chain to find class for suspicious top-level resolution #20717
- Feat: Add actionable diagnostic for missing members #23572
- Include span of bad args if multiline #25699
Scala-JS
- Tolerate empty paths in JSPositions conversion #26140
Scaladoc
- Avoid NPE in Scaladoc signatures on JDK 25 #25779
- Scaladoc: fix 'occured' -> 'occurred' typos in user-visible error strings #25805
- Fix scaladoc checkErrorCodeSnippets #25942
Standard Library
- Optimize the standard library in bootstrapped compilation #25689
- Change lower bound of Option.orNull to nullable #25733
- Use unchecked on some pattern matches #25762
- Remove self reference in Conversion class and add impure conversion test #25931
- Fix potential NPE in BoxesRunTime.equalsCharObject #25958
- Safer equalsNumChar #25962
- Fixes #25702: Avoid
AnyClassfallback inrequiredClass#26010 - Fix 26026: restore type parameter of Option.orNull #26027
- Fix mismatch between
wrapArrayandwrapArrayMethodName#26162
Transform
- Find correct type when generating the generic signature of trait fields #25543
- Remove questionable transform of Select from
SelectStatic#25620 - Resurrect some Scala 2 tests for generic signatures #25736
- Emit generic signatures for all trait fields #25780
- Fix generic signatures of forwarders containing value classes #25879
- Generic signature fixes #25880
- Fix crash during generic signature emission for inner classes of type aliases #26202
Typeclass Derivation
- Fix synthesis of mirrors for GADT with dependent type parameters #26080
Typer
- Change
typeOfArgto takeTypedArginstead ofArg#25418 - Make Constant construction type-directed #25869
- Fix #25894: break cross-unit cyclic export on partial recompile #25900
- Fixes #24056 Dealias value class types in structural access #25907
- Fixes #20010 Avoid crash on missing TASTy class references #25908
- Fixes #24719 Fix LazyAnnotation.tree reentrance in Namer.addChild #25909
- Fixes for 2 code quality findings #25960
- Fixes #25856: Position not set crash in implicit search during import qualifier #26032
- Preserve type info when lifting stable arguments #26063
Value Classes
- Replicate value class erasure binary compat hack in GenericSignatures #25775
Experimental: Capture Checking
- Enable sc:compile for scala.util Package #25651
- Make tests for capability parents of Array class more robust #25695
- Refine isStatic test in SafeRefs.isSafe #25708
- Go back to explicit @retains instead of uses_init in stdlib #25719
- Change syntax of what was uses_init #25720
- Several fixes to the handling of static objects and recheckIdent #25770
- Fix #25388: Enhance safe check for synthetic annotations #25883
- Keep annotations when converting in Setup to dependent function #25891
- Properly solve capture set during box adaptation #25902
- Make parameter types of some closures explicit #25967
- Clarify use-capset test #25976
- Drop SharedCapability exception in subsumes #26078
- Tighten check of field classifiers #26085
- Don't assume classes with self aliases to be pure. #26097
Experimental: Erased definitions
- Fix bridge generation when
erasedprecedes a non-erased parameter #25923 - Fix bridge typing when
erasedprecedes a non-erased parameter #26047
Experimental: Explicit Nulls
- Fix issue with flexifying unions from Java symbols under explicit-nulls #25808
Experimetnal: Safe Mode
- Assume safe IllegalArgumentException and NoSuchElementException #25859
Experimental: Strict Equality
- Enable strictEqualityPatternMatching behaviour for non-case objects #25850
- Fixes #25979: Fix strictEqualityPatternMatching with GADTs #25980
Contributors
Thank you to all the contributors who made this release possible 🎉
According to git shortlog -sn --no-merges 3.8.4..3.9.0-RC1 these are:
95 Solal Pirelli
60 Martin Odersky
32 Som Snytt
25 Matt Bovel
25 Wojciech Mazur
23 Oliver Bračevac
19 Claude
17 Chua Chee Seng
16 Piotr Chabelski
15 Anatolii Kmetiuk
12 Bill Venners
11 Tomasz Godzik
7 Patryk Zieliński
6 Li Haoyi
6 dependabot[bot]
6 noti0na1
5 Jan Chyb
4 Jamie Thompson
4 Oron Port
4 Rikito Taniguchi
4 Sébastien Doeraene
3 Emil Ejbyfeldt
3 Yichen Xu
2 Alex Archambault
2 HarrisL2
2 Jakub Warchoł
2 Seth Tisue
1 Bartłomiej Kozak
1 Guillaume Martres
1 Hamza Remmal
1 Jeon Yoonjae
1 Kasper Kondzielski
1 Matthias Berndt
1 Matthias Kurz
1 Ondrej Lhotak
1 Ondřej Lhoták
1 Sai Asish Y
1 Sylvain Kuchen
1 lalala194
1 pgilliar