Skip to content

Commit c5923c9

Browse files
committed
Mark classes compiled under -Ycc with a CaptureChecked annotation
1 parent 7df862a commit c5923c9

File tree

3 files changed

+16
-7
lines changed

3 files changed

+16
-7
lines changed

Diff for: compiler/src/dotty/tools/dotc/core/Definitions.scala

+1
Original file line numberDiff line numberDiff line change
@@ -972,6 +972,7 @@ class Definitions {
972972
@tu lazy val BooleanBeanPropertyAnnot: ClassSymbol = requiredClass("scala.beans.BooleanBeanProperty")
973973
@tu lazy val BodyAnnot: ClassSymbol = requiredClass("scala.annotation.internal.Body")
974974
@tu lazy val CapabilityAnnot: ClassSymbol = requiredClass("scala.annotation.capability")
975+
@tu lazy val CaptureCheckedAnnot: ClassSymbol = requiredClass("scala.annotation.internal.CaptureChecked")
975976
@tu lazy val ChildAnnot: ClassSymbol = requiredClass("scala.annotation.internal.Child")
976977
@tu lazy val ContextResultCountAnnot: ClassSymbol = requiredClass("scala.annotation.internal.ContextResultCount")
977978
@tu lazy val ProvisionalSuperClassAnnot: ClassSymbol = requiredClass("scala.annotation.internal.ProvisionalSuperClass")

Diff for: compiler/src/dotty/tools/dotc/transform/PostTyper.scala

+7-7
Original file line numberDiff line numberDiff line change
@@ -391,13 +391,13 @@ class PostTyper extends MacroTransform with IdentityDenotTransformer { thisPhase
391391
for parent <- impl.parents do
392392
Checking.checkTraitInheritance(parent.tpe.classSymbol, sym.asClass, parent.srcPos)
393393
// Add SourceFile annotation to top-level classes
394-
if sym.owner.is(Package)
395-
&& ctx.compilationUnit.source.exists
396-
&& sym != defn.SourceFileAnnot
397-
then
398-
val reference = ctx.settings.sourceroot.value
399-
val relativePath = util.SourceFile.relativePath(ctx.compilationUnit.source, reference)
400-
sym.addAnnotation(Annotation.makeSourceFile(relativePath))
394+
if sym.owner.is(Package) then
395+
if ctx.compilationUnit.source.exists && sym != defn.SourceFileAnnot then
396+
val reference = ctx.settings.sourceroot.value
397+
val relativePath = util.SourceFile.relativePath(ctx.compilationUnit.source, reference)
398+
sym.addAnnotation(Annotation.makeSourceFile(relativePath))
399+
if ctx.settings.Ycc.value && sym != defn.CaptureCheckedAnnot then
400+
sym.addAnnotation(Annotation(defn.CaptureCheckedAnnot))
401401
else
402402
if !sym.is(Param) && !sym.owner.isOneOf(AbstractOrTrait) then
403403
Checking.checkGoodBounds(tree.symbol)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package scala.annotation
2+
package internal
3+
4+
/** A marker annotation on a toplevel class that indicates
5+
* that the class was checked under -Ycc
6+
*/
7+
class CaptureChecked extends StaticAnnotation
8+

0 commit comments

Comments
 (0)