summaryrefslogtreecommitdiff
path: root/src/reflect/scala/reflect/api/FlagSets.scala
diff options
context:
space:
mode:
Diffstat (limited to 'src/reflect/scala/reflect/api/FlagSets.scala')
-rw-r--r--src/reflect/scala/reflect/api/FlagSets.scala83
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