diff options
Diffstat (limited to 'src/dotty/tools/dotc/core/MemberBinding.scala')
-rw-r--r-- | src/dotty/tools/dotc/core/MemberBinding.scala | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/src/dotty/tools/dotc/core/MemberBinding.scala b/src/dotty/tools/dotc/core/MemberBinding.scala new file mode 100644 index 000000000..6f081c542 --- /dev/null +++ b/src/dotty/tools/dotc/core/MemberBinding.scala @@ -0,0 +1,34 @@ +package dotty.tools.dotc.core + +import Names.Name +import Contexts.Context +import Types.{Type, TypeBounds} + +/** A common super trait of Symbol and Refinement. + * Used to capture the attributes of type parameters + * which can be implemented as either symbols or refinements. + */ +trait MemberBinding { + + /** Does this binding represent a type parameter? + * Only in that case the rest of the binding's methods are significant. + */ + def isTypeParam(implicit ctx: Context): Boolean + + /** The name of the member */ + def memberName(implicit ctx: Context): Name + + /** The info of the member */ + def memberBounds(implicit ctx: Context): TypeBounds + + /** The info of the member as seen from a prefix type. + * This can be different from `memberInfo` if the binding + * is a type symbol of a class. + */ + def memberBoundsAsSeenFrom(pre: Type)(implicit ctx: Context): TypeBounds + + /** The variance of the type parameter + * @pre: isTypeParam = true + */ + def memberVariance(implicit ctx: Context): Int +}
\ No newline at end of file |