Denotation

dotty.tools.dotc.core.Denotations.Denotation
abstract class Denotation(val symbol: Symbol, var myInfo: Type, val isType: Boolean) extends PreDenotation, Showable

A denotation is the result of resolving a name (either simple identifier or select) during a given period.

Denotations can be combined with & and |. & is conjunction, | is disjunction.

& will create an overloaded denotation from two non-overloaded denotations if their signatures differ. Analogously | of two denotations with different signatures will give an empty denotation NoDenotation.

A denotation might refer to NoSymbol. This is the case if the denotation was produced from a disjunction of two denotations with different symbols and there was no common symbol in a superclass that could substitute for both symbols. Here is an example:

Say, we have:

class A { def f: A } class B { def f: B } val x: A | B = if (test) new A else new B val y = x.f

Then the denotation of y is SingleDenotation(NoSymbol, A | B).

Value parameters

symbol

The referencing symbol, or NoSymbol is none exists

Attributes

Graph
Supertypes
trait Showable
class Object
trait Matchable
class Any
Known subtypes

Members list

Type members

Value members

Abstract methods

def accessibleFrom(pre: Type, superAccess: Boolean)(using Context): Denotation

The denotation made up from the alternatives of this denotation that are accessible from prefix pre, or NoDenotation if no accessible alternative exists.

The denotation made up from the alternatives of this denotation that are accessible from prefix pre, or NoDenotation if no accessible alternative exists.

Attributes

The alternatives of this denotation that satisfy the predicate p.

The alternatives of this denotation that satisfy the predicate p.

Attributes

def atSignature(sig: Signature, targetName: Name, site: Type, relaxed: Boolean)(using Context): Denotation

Resolve overloaded denotation to pick the ones with the given signature when seen from prefix site.

Resolve overloaded denotation to pick the ones with the given signature when seen from prefix site.

Value parameters

relaxed

When true, consider only parameter signatures for a match.

Attributes

def current(using Context): Denotation

The variant of this denotation that's current in the given context. If no such denotation exists, returns the denotation with each alternative at its first point of definition.

The variant of this denotation that's current in the given context. If no such denotation exists, returns the denotation with each alternative at its first point of definition.

Attributes

Keep only those denotations in this group which satisfy predicate p.

Keep only those denotations in this group which satisfy predicate p.

Attributes

Definition Classes

Does this denotation have an alternative that satisfies the predicate p?

Does this denotation have an alternative that satisfies the predicate p?

Attributes

Denotation points to unique symbol; false for overloaded denotations and JointRef denotations.

Denotation points to unique symbol; false for overloaded denotations and JointRef denotations.

Attributes

The type info, or, if this is a SymDenotation where the symbol is not yet completed, the completer

The type info, or, if this is a SymDenotation where the symbol is not yet completed, the completer

Attributes

def mapInfo(f: Type => Type)(using Context): Denotation

A denotation with the info of this denotation transformed using f

A denotation with the info of this denotation transformed using f

Attributes

def name(using Context): Name

The name of the denotation

The name of the denotation

Attributes

The signature of the denotation.

The signature of the denotation.

Attributes

The unique alternative of this denotation that satisfies the predicate p, or NoDenotation if no satisfying alternative exists.

The unique alternative of this denotation that satisfies the predicate p, or NoDenotation if no satisfying alternative exists.

Attributes

Throws
TypeError

if there is at more than one alternative that satisfies p.

Concrete methods

The set of alternative single-denotations making up this denotation

The set of alternative single-denotations making up this denotation

Attributes

If this is a SingleDenotation, return it, otherwise throw a TypeError

If this is a SingleDenotation, return it, otherwise throw a TypeError

Attributes

final def containsSym(sym: Symbol): Boolean

Group contains a denotation that refers to given symbol

Group contains a denotation that refers to given symbol

Attributes

inline def disambiguate(inline p: Symbol => Boolean)(using Context): SingleDenotation

If this denotation is overloaded, filter with given predicate. If result is still overloaded throw a TypeError. Note: disambiguate is slightly different from suchThat in that single-denotations that do not satisfy the predicate are left alone (whereas suchThat would map them to NoDenotation).

If this denotation is overloaded, filter with given predicate. If result is still overloaded throw a TypeError. Note: disambiguate is slightly different from suchThat in that single-denotations that do not satisfy the predicate are left alone (whereas suchThat would map them to NoDenotation).

Attributes

Is this denotation different from NoDenotation or an ErrorDenotation?

Is this denotation different from NoDenotation or an ErrorDenotation?

Attributes

def findMember(name: Name, pre: Type, required: FlagSet, excluded: FlagSet)(using Context): Denotation

Find member of this denotation with given name, all required flags and no excluded flag, and produce a denotation that contains the type of the member as seen from given prefix pre.

Find member of this denotation with given name, all required flags and no excluded flag, and produce a denotation that contains the type of the member as seen from given prefix pre.

Attributes

final def info(using Context): Type

The type info. The info is an instance of TypeType iff this is a type denotation Uncompleted denotations set myInfo to a LazyType.

The type info. The info is an instance of TypeType iff this is a type denotation Uncompleted denotations set myInfo to a LazyType.

Attributes

final def isOverloaded: Boolean

Is this denotation overloaded?

Is this denotation overloaded?

Attributes

Is this a reference to a term symbol?

Is this a reference to a term symbol?

Attributes

def matchingDenotation(site: Type, targetType: Type, targetName: Name)(using Context): SingleDenotation

The alternative of this denotation that has a type matching targetType when seen as a member of type site and that has a target name matching targetName, or NoDenotation if none exists.

The alternative of this denotation that has a type matching targetType when seen as a member of type site and that has a target name matching targetName, or NoDenotation if none exists.

Attributes

def meet(that: Denotation, pre: Type, safeIntersection: Boolean)(using Context): Denotation

Form a denotation by conjoining with denotation that.

Form a denotation by conjoining with denotation that.

NoDenotations are dropped. MultiDenotations are handled by merging parts with same signatures. SingleDenotations with equal signatures are joined by following this sequence of steps:

  1. If exactly one the denotations has an inaccessible symbol, pick the other one.
  2. Otherwise, if one of the infos overrides the other one, and the associated symbol does not score strictly lower than the other one, pick the associated denotation.
  3. Otherwise, if the two infos can be combined with infoMeet, pick that as result info, and pick the symbol that scores higher as result symbol, or pick sym1 as a tie breaker. The picked info and symbol are combined in a JointDenotation.
  4. Otherwise, if one of the two symbols scores strongly higher than the other one, pick the associated denotation.
  5. Otherwise return a multi-denotation consisting of both denotations.

Symbol scoring is determined according to the following ranking where earlier criteria trump later ones. Cases marked with (*) give a strong score advantage, the others a weak one.

  1. The symbol exists, and the other one does not. (*)
  2. The symbol is not a bridge, but the other one is. (*)
  3. The symbol is concrete, and the other one is deferred
  4. The symbol appears before the other in the linearization of pre
  5. The symbol's visibility is strictly greater than the other one's.
  6. The symbol is a method, but the other one is not.

Attributes

inline def orElse(inline that: Denotation): Denotation

If this denotation does not exist, fallback to alternative

If this denotation does not exist, fallback to alternative

Attributes

def requiredMethod(pname: PreName, argTypes: List[Type])(using Context): TermSymbol
def requiredMethodRef(name: PreName, argTypes: List[Type])(using Context): TermRef
def requiredSymbol(kind: String, name: Name, site: Denotation, args: List[Type], source: AbstractFile | Null, generateStubs: Boolean)(p: Symbol => Boolean)(using Context): Symbol

Return symbol in this denotation that satisfies the given predicate. if generateStubs is specified, return a stubsymbol if denotation is a missing ref. Throw a TypeError if predicate fails to disambiguate symbol or no alternative matches.

Return symbol in this denotation that satisfies the given predicate. if generateStubs is specified, return a stubsymbol if denotation is a missing ref. Throw a TypeError if predicate fails to disambiguate symbol or no alternative matches.

Attributes

def requiredType(pname: PreName)(using Context): TypeSymbol
def requiredValue(pname: PreName)(using Context): TermSymbol
final def toDenot(pre: Type)(using Context): Denotation

Convert to full denotation by &-ing all elements

Convert to full denotation by &-ing all elements

Attributes

def toText(printer: Printer): Text

The text representation of this showable element. This normally dispatches to a pattern matching method in Printers.

The text representation of this showable element. This normally dispatches to a pattern matching method in Printers.

Attributes

final def validFor: Period
final def validFor_=(p: Period): Unit

Inherited methods

def aggregate[T](f: SingleDenotation => T, g: (T, T) => T): T

Map f over all single denotations and aggregate the results with g.

Map f over all single denotations and aggregate the results with g.

Attributes

Inherited from:
PreDenotation

The denotation with info(s) as seen from prefix type

The denotation with info(s) as seen from prefix type

Attributes

Inherited from:
PreDenotation
protected def computeAsSeenFrom(pre: Type)(using Context): AsSeenFromResult

Attributes

Inherited from:
PreDenotation
def fallbackToText(printer: Printer): Text

A fallback text representation, if the pattern matching in Printers does not have a case for this showable element

A fallback text representation, if the pattern matching in Printers does not have a case for this showable element

Attributes

Inherited from:
Showable

Keep only those denotations in this group which have a signature that's not already defined by denots.

Keep only those denotations in this group which have a signature that's not already defined by denots.

Attributes

Inherited from:
PreDenotation
def filterWithFlags(required: FlagSet, excluded: FlagSet)(using Context): PreDenotation

Keep only those denotations in this group that have all of the flags in required, but none of the flags in excluded.

Keep only those denotations in this group that have all of the flags in required, but none of the flags in excluded.

Attributes

Inherited from:
PreDenotation

First/last denotation in the group

First/last denotation in the group

Attributes

Inherited from:
PreDenotation

Attributes

Inherited from:
PreDenotation
def mapInherited(ownDenots: PreDenotation, prevDenots: PreDenotation, pre: Type)(using Context): PreDenotation

Keep only those inherited members M of this predenotation for which the following is true

Keep only those inherited members M of this predenotation for which the following is true

  • M is not marked Private
  • If M has a unique symbol, it does not appear in prevDenots.
  • M's signature as seen from prefix pre does not appear in ownDenots Return the denotation as seen from pre. Called from SymDenotations.computeMember. There, ownDenots are the denotations found in the base class, which shadow any inherited denotations with the same signature. prevDenots are the denotations that are defined in the class or inherited from a base type which comes earlier in the linearization.

Attributes

Inherited from:
PreDenotation
def matches(other: SingleDenotation)(using Context): Boolean

Group contains a denotation with the same signature as other

Group contains a denotation with the same signature as other

Attributes

Inherited from:
PreDenotation
def show(using Context): String

The string representation of this showable element.

The string representation of this showable element.

Attributes

Inherited from:
Showable
def showIndented(margin: Int)(using Context): String

The string representation with each line after the first one indented by the given given margin (in spaces).

The string representation with each line after the first one indented by the given given margin (in spaces).

Attributes

Inherited from:
Showable
def showSummary(depth: Int)(using Context): String

The summarized string representation of this showable element. Recursion depth is limited to some smallish value. Default is Config.summarizeDepth.

The summarized string representation of this showable element. Recursion depth is limited to some smallish value. Default is Config.summarizeDepth.

Attributes

Inherited from:
Showable

The union of two groups.

The union of two groups.

Attributes

Inherited from:
PreDenotation

Concrete fields

protected var myInfo: Type
val symbol: Symbol