blob: 0474bc2297d1b46d9334528d1d78b181793c6bde (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
object Types {
class Type {
/** The non-private symbol with given name in the given class that matches this type.
* @param inClass The class containing the symbol's definition
* @param name The name of the symbol we are looking for
* @param site The base type from which member types are computed
def matchingTermSymbol(inClass: Symbol, name: Name, site: Type)(implicit ctx: Context): Symbol = {
var denot = inClass.info.nonPrivateDecl(name)
if (denot.isTerm) { // types of the same name always match
if (denot.isOverloaded)
denot = denot.atSignature(this.signature) // seems we need two kinds of signatures here
if (!(site.memberInfo(denot.symbol) matches this))
denot = NoDenotation
}
denot.symbol
}
final def firstParamTypes: List[Type] = this match {
case mt: MethodType => mt.paramTypes
case pt: PolyType => pt.firstParamTypes
case _ => Nil
}
/** `tp` is either a type variable or poly param. Returns
* Covariant if all occurrences of `tp` in this type are covariant
* Contravariant if all occurrences of `tp` in this type are contravariant
* Covariant | Contravariant if there are no occurrences of `tp` in this type
* EmptyFlags if `tp` occurs noon-variantly in this type
*/
def varianceOf(tp: Type): FlagSet = ???
}
}
|