summaryrefslogtreecommitdiff
path: root/src/reflect
diff options
context:
space:
mode:
authorDen Shabalin <den.shabalin@gmail.com>2013-11-05 13:50:46 +0100
committerDen Shabalin <den.shabalin@gmail.com>2013-11-12 15:45:22 +0100
commit2cd95fed2066851b141daf12e0c3f3aaad5dd7be (patch)
tree70c2368c95f20de837e116c78c2e12bdf2ddddbb /src/reflect
parentc62a0e78c33dda1db6e73fa5cd3c6ddbd2b238f4 (diff)
downloadscala-2cd95fed2066851b141daf12e0c3f3aaad5dd7be.tar.gz
scala-2cd95fed2066851b141daf12e0c3f3aaad5dd7be.tar.bz2
scala-2cd95fed2066851b141daf12e0c3f3aaad5dd7be.zip
re-implement hasAttachment directly in raw attachments
Diffstat (limited to 'src/reflect')
-rw-r--r--src/reflect/scala/reflect/internal/StdAttachments.scala2
-rw-r--r--src/reflect/scala/reflect/macros/Attachments.scala4
2 files changed, 5 insertions, 1 deletions
diff --git a/src/reflect/scala/reflect/internal/StdAttachments.scala b/src/reflect/scala/reflect/internal/StdAttachments.scala
index d37bacb462..46f241643b 100644
--- a/src/reflect/scala/reflect/internal/StdAttachments.scala
+++ b/src/reflect/scala/reflect/internal/StdAttachments.scala
@@ -14,7 +14,7 @@ trait StdAttachments {
def setAttachments(attachments: scala.reflect.macros.Attachments { type Pos = Position }): this.type = { rawatt = attachments; this }
def updateAttachment[T: ClassTag](attachment: T): this.type = { rawatt = rawatt.update(attachment); this }
def removeAttachment[T: ClassTag]: this.type = { rawatt = rawatt.remove[T]; this }
- def hasAttachment[T: ClassTag]: Boolean = rawatt.get[T].nonEmpty
+ def hasAttachment[T: ClassTag]: Boolean = rawatt.contains[T]
// cannot be final due to SynchronizedSymbols
def pos: Position = rawatt.pos
diff --git a/src/reflect/scala/reflect/macros/Attachments.scala b/src/reflect/scala/reflect/macros/Attachments.scala
index c1ab269268..039e75fbee 100644
--- a/src/reflect/scala/reflect/macros/Attachments.scala
+++ b/src/reflect/scala/reflect/macros/Attachments.scala
@@ -41,6 +41,10 @@ abstract class Attachments { self =>
def get[T: ClassTag]: Option[T] =
(all filter matchesTag[T]).headOption.asInstanceOf[Option[T]]
+ /** Check underlying payload contains an instance of type `T`. */
+ def contains[T: ClassTag]: Boolean =
+ all exists matchesTag[T]
+
/** Creates a copy of this attachment with the payload slot of T added/updated with the provided value.
* Replaces an existing payload of the same type, if exists.
*/