aboutsummaryrefslogtreecommitdiff
path: root/src/dotty/tools/dotc/core/Types.overflow
blob: 45727fcc1a66174914ad60869c986bc59913c1c7 (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
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
    }
  }
}