summaryrefslogtreecommitdiff
path: root/src/library/scala/reflect/api/Attachment.scala
diff options
context:
space:
mode:
Diffstat (limited to 'src/library/scala/reflect/api/Attachment.scala')
-rw-r--r--src/library/scala/reflect/api/Attachment.scala9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/library/scala/reflect/api/Attachment.scala b/src/library/scala/reflect/api/Attachment.scala
index 9fa5ceb0fb..50f55b4aa5 100644
--- a/src/library/scala/reflect/api/Attachment.scala
+++ b/src/library/scala/reflect/api/Attachment.scala
@@ -7,8 +7,6 @@ package api
* Attachments have to carry positions, because we don't want to introduce even a single additional field in Tree
* imposing an unnecessary memory tax because of something that will not be used in most cases.
*/
-// [Eugene] with the introduction of `attach` and `payload[T]` users don't need to create custom attachments anymore
-// however, we cannot move attachments to scala.reflect.internal, because they are used in Trees, which are implemented completely in scala.reflect.api
trait Attachment {
/** Gets the underlying position */
def pos: Position
@@ -22,3 +20,10 @@ trait Attachment {
/** Creates a copy of this attachment with its payload updated */
def withPayload(newPayload: Any): Attachment
}
+
+// [Eugene] with the introduction of `attach` and `attachment[T]` users don't need to create custom attachments anymore
+// however, we cannot move attachments to scala.reflect.internal, because they are used in Trees, which are implemented completely in scala.reflect.api
+private[scala] case class NontrivialAttachment(pos: api.Position, payload: collection.mutable.ListBuffer[Any]) extends Attachment {
+ def withPos(newPos: api.Position) = copy(pos = newPos, payload = payload)
+ def withPayload(newPayload: Any) = copy(pos = pos, payload = newPayload.asInstanceOf[collection.mutable.ListBuffer[Any]])
+} \ No newline at end of file