diff --git a/build.sbt b/build.sbt index 2e226a0f87cc..00f1ccc3bc26 100644 --- a/build.sbt +++ b/build.sbt @@ -98,6 +98,8 @@ val mimaFilterSettings = Seq { ProblemFilters.exclude[DirectMissingMethodProblem]("scala.reflect.api.TypeTags.TypeTagImpl"), ProblemFilters.exclude[DirectMissingMethodProblem]("scala.reflect.api.Universe.TypeTagImpl"), ProblemFilters.exclude[MissingClassProblem]("scala.reflect.macros.Attachments$"), + ProblemFilters.exclude[DirectMissingMethodProblem]("scala.reflect.macros.Attachments.cloneAttachments"), + ProblemFilters.exclude[DirectMissingMethodProblem]("scala.reflect.macros.NonemptyAttachments.cloneAttachments"), ProblemFilters.exclude[DirectAbstractMethodProblem]("scala.collection.immutable.ArraySeq.stepper"), ProblemFilters.exclude[ReversedAbstractMethodProblem]("scala.collection.immutable.ArraySeq.stepper"), ProblemFilters.exclude[DirectAbstractMethodProblem]("scala.collection.mutable.ArraySeq.stepper"), diff --git a/src/reflect/scala/reflect/internal/Symbols.scala b/src/reflect/scala/reflect/internal/Symbols.scala index 5bd64c559749..6273c6f00d4c 100644 --- a/src/reflect/scala/reflect/internal/Symbols.scala +++ b/src/reflect/scala/reflect/internal/Symbols.scala @@ -2039,7 +2039,8 @@ trait Symbols extends api.Symbols { self: SymbolTable => setInfo (this.info cloneInfo clone) setAnnotations this.annotations ) - this.attachments.all.foreach(clone.updateAttachment) + assert(clone.attachments.isEmpty) + clone.setAttachments(this.attachments.cloneAttachments) if (clone.thisSym != clone) clone.typeOfThis = (clone.typeOfThis cloneInfo clone) diff --git a/src/reflect/scala/reflect/macros/Attachments.scala b/src/reflect/scala/reflect/macros/Attachments.scala index 2a7cee9ccc70..bc60d214ecd3 100644 --- a/src/reflect/scala/reflect/macros/Attachments.scala +++ b/src/reflect/scala/reflect/macros/Attachments.scala @@ -83,6 +83,7 @@ abstract class Attachments { self => } def isEmpty: Boolean = true + def cloneAttachments: Attachments { type Pos = self.Pos } = this } private object Attachments { @@ -97,4 +98,5 @@ private final class NonemptyAttachments[P >: Null](override val pos: P, override type Pos = P def withPos(newPos: Pos) = new NonemptyAttachments(newPos, all) override def isEmpty: Boolean = false + override def cloneAttachments: Attachments { type Pos = P } = new NonemptyAttachments[P](pos, all) }