diff options
Diffstat (limited to 'src/reflect/scala/reflect/api/FlagSets.scala')
-rw-r--r-- | src/reflect/scala/reflect/api/FlagSets.scala | 83 |
1 files changed, 78 insertions, 5 deletions
diff --git a/src/reflect/scala/reflect/api/FlagSets.scala b/src/reflect/scala/reflect/api/FlagSets.scala index 54b65166d8..bf4d6353df 100644 --- a/src/reflect/scala/reflect/api/FlagSets.scala +++ b/src/reflect/scala/reflect/api/FlagSets.scala @@ -131,8 +131,8 @@ trait FlagSets { self: Universe => /** Flag indicating that tree has `protected` modifier set */ val PROTECTED: FlagSet - /** Flag indicating that tree represents a member local to current class - * (i.e. private[this] or protected[this]. + /** Flag indicating that tree represents a member local to current class, + * i.e. private[this] or protected[this]. * This requires having either PRIVATE or PROTECTED set as well. */ val LOCAL: FlagSet @@ -167,9 +167,6 @@ trait FlagSets { self: Universe => /** Flag indicating that tree represents a variable or a member initialized to the default value */ val DEFAULTINIT: FlagSet - /** Flag indicating that tree was generated by the compiler */ - val SYNTHETIC: FlagSet - /** Flag indicating that tree represents an enum. * * It can only appear at @@ -177,6 +174,82 @@ trait FlagSets { self: Universe => * - enum constants **/ val ENUM: FlagSet + + /** Flag indicating that tree represents a parameter of the primary constructor of some class + * or a synthetic member underlying thereof. E.g. here's how 'class C(val x: Int)' is represented: + * + * [[syntax trees at end of parser]]// Scala source: tmposDU52 + * class C extends scala.AnyRef { + * <paramaccessor> val x: Int = _; + * def <init>(x: Int) = { + * super.<init>(); + * () + * } + * } + * ClassDef( + * Modifiers(), TypeName("C"), List(), + * Template( + * List(Select(Ident(scala), TypeName("AnyRef"))), + * noSelfType, + * List( + * ValDef(Modifiers(PARAMACCESSOR), TermName("x"), Ident(TypeName("Int")), EmptyTree), + * DefDef( + * Modifiers(), nme.CONSTRUCTOR, List(), + * List(List(ValDef(Modifiers(PARAM | PARAMACCESSOR), TermName("x"), Ident(TypeName("Int")), EmptyTree))), TypeTree(), + * Block(List(pendingSuperCall), Literal(Constant(()))))))))) + */ + val PARAMACCESSOR: FlagSet + + /** Flag indicating that tree represents a parameter of the primary constructor of some case class + * or a synthetic member underlying thereof. E.g. here's how 'case class C(val x: Int)' is represented: + * + * [[syntax trees at end of parser]]// Scala source: tmpnHkJ3y + * case class C extends scala.Product with scala.Serializable { + * <caseaccessor> <paramaccessor> val x: Int = _; + * def <init>(x: Int) = { + * super.<init>(); + * () + * } + * } + * ClassDef( + * Modifiers(CASE), TypeName("C"), List(), + * Template( + * List(Select(Ident(scala), TypeName("Product")), Select(Ident(scala), TypeName("Serializable"))), + * noSelfType, + * List( + * ValDef(Modifiers(CASEACCESSOR | PARAMACCESSOR), TermName("x"), Ident(TypeName("Int")), EmptyTree), + * DefDef( + * Modifiers(), nme.CONSTRUCTOR, List(), + * List(List(ValDef(Modifiers(PARAM | PARAMACCESSOR), TermName("x"), Ident(TypeName("Int")), EmptyTree))), TypeTree(), + * Block(List(pendingSuperCall), Literal(Constant(()))))))))) + */ + val CASEACCESSOR: FlagSet + + /** Flag used to distinguish programmatically generated definitions from user-written ones. + * @see ARTIFACT + */ + val SYNTHETIC: FlagSet + + /** Flag used to distinguish platform-specific implementation details. + * Trees and symbols which are currently marked ARTIFACT by scalac: + * * $outer fields and accessors + * * super accessors + * * protected accessors + * * lazy local accessors + * * bridge methods + * * default argument getters + * * evaluation-order preserving locals for right-associative and out-of-order named arguments + * * catch-expression storing vals + * * anything else which feels a setFlag(ARTIFACT) + * + * @see SYNTHETIC + */ + val ARTIFACT: FlagSet + + /** Flag that indicates methods that are supposed to be stable + * (e.g. synthetic getters of valdefs). + */ + val STABLE: FlagSet } /** The empty set of flags |