diff options
author | Adriaan Moors <adriaan.moors@typesafe.com> | 2015-10-01 14:51:48 -0700 |
---|---|---|
committer | Adriaan Moors <adriaan.moors@typesafe.com> | 2015-11-12 13:28:16 -0800 |
commit | 57de5b8bd811014b446c7c344aa4504e828888e6 (patch) | |
tree | 54fb3d320dae80b851fbfe7f6a8ef881cc1562e0 /src/reflect/scala/reflect/internal/AnnotationInfos.scala | |
parent | c0454b1ea635ca0b6a57805572a6da96c76aff2e (diff) | |
download | scala-57de5b8bd811014b446c7c344aa4504e828888e6.tar.gz scala-57de5b8bd811014b446c7c344aa4504e828888e6.tar.bz2 scala-57de5b8bd811014b446c7c344aa4504e828888e6.zip |
Annotation filtering & derivation in one place.
This logic was scattered all over the hierarchy,
even though it's only needed in one spot, and is unlikely to evolve.
Diffstat (limited to 'src/reflect/scala/reflect/internal/AnnotationInfos.scala')
-rw-r--r-- | src/reflect/scala/reflect/internal/AnnotationInfos.scala | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/src/reflect/scala/reflect/internal/AnnotationInfos.scala b/src/reflect/scala/reflect/internal/AnnotationInfos.scala index 207a66e360..c0772c8cc0 100644 --- a/src/reflect/scala/reflect/internal/AnnotationInfos.scala +++ b/src/reflect/scala/reflect/internal/AnnotationInfos.scala @@ -169,6 +169,22 @@ trait AnnotationInfos extends api.Annotations { self: SymbolTable => def unapply(info: AnnotationInfo): Option[(Type, List[Tree], List[(Name, ClassfileAnnotArg)])] = Some((info.atp, info.args, info.assocs)) + + def mkFilter(category: Symbol, defaultRetention: Boolean)(ann: AnnotationInfo) = + (ann.metaAnnotations, ann.defaultTargets) match { + case (Nil, Nil) => defaultRetention + case (Nil, defaults) => defaults contains category + case (metas, _) => metas exists (_ matches category) + } + + def mkFilter(categories: List[Symbol], defaultRetention: Boolean)(ann: AnnotationInfo) = + (ann.metaAnnotations, ann.defaultTargets) match { + case (Nil, Nil) => defaultRetention + case (Nil, defaults) => categories exists defaults.contains + case (metas, _) => + val metaSyms = metas collect { case ann if !ann.symbol.isInstanceOf[StubSymbol] => ann.symbol } + categories exists (category => metaSyms exists (_ isNonBottomSubClass category)) + } } class CompleteAnnotationInfo( |