Class

scala.tools.nsc.typechecker.Infer

Inferencer

Related Doc: package Infer

Permalink

abstract class Inferencer extends Analyzer.InferencerContextErrors with Analyzer.InferCheckable

The context-dependent inferencer part

Source
Infer.scala
Linear Supertypes
Type Hierarchy
Ordering
  1. Alphabetic
  2. By Inheritance
Inherited
  1. Inferencer
  2. InferCheckable
  3. InferencerContextErrors
  4. AnyRef
  5. Any
Implicitly
  1. by any2stringadd
  2. by StringFormat
  3. by Ensuring
  4. by ArrowAssoc
  1. Hide All
  2. Show All
Visibility
  1. Public
  2. All

Instance Constructors

  1. new Inferencer()

    Permalink

Abstract Value Members

  1. abstract def context: Analyzer.Context

    Permalink

Concrete Value Members

  1. final def !=(arg0: Any): Boolean

    Permalink

    Test two objects for inequality.

    Test two objects for inequality.

    returns

    true if !(this == that), false otherwise.

    Definition Classes
    AnyRef → Any
  2. final def ##(): Int

    Permalink

    Equivalent to x.hashCode except for boxed numeric types and null.

    Equivalent to x.hashCode except for boxed numeric types and null. For numerics, it returns a hash value which is consistent with value equality: if two value type instances compare as true, then ## will produce the same hash value for each of them. For null returns a hashcode where null.hashCode throws a NullPointerException.

    returns

    a hash value consistent with ==

    Definition Classes
    AnyRef → Any
  3. def +(other: String): String

    Permalink
    Implicit information
    This member is added by an implicit conversion from Analyzer.Inferencer to any2stringadd[Analyzer.Inferencer] performed by method any2stringadd in scala.Predef.
    Definition Classes
    any2stringadd
  4. def ->[B](y: B): (Analyzer.Inferencer, B)

    Permalink
    Implicit information
    This member is added by an implicit conversion from Analyzer.Inferencer to ArrowAssoc[Analyzer.Inferencer] performed by method ArrowAssoc in scala.Predef.
    Definition Classes
    ArrowAssoc
    Annotations
    @inline()
  5. final def ==(arg0: Any): Boolean

    Permalink

    The expression x == that is equivalent to if (x eq null) that eq null else x.equals(that).

    The expression x == that is equivalent to if (x eq null) that eq null else x.equals(that).

    returns

    true if the receiver object is equivalent to the argument; false otherwise.

    Definition Classes
    AnyRef → Any
  6. object AdjustedTypeArgs

    Permalink

    [Martin] Can someone comment this please? I have no idea what it's for and the code is not exactly readable.

  7. object InferErrorGen

    Permalink
    Definition Classes
    InferencerContextErrors
  8. def adjustTypeArgs(tparams: List[Global.Symbol], tvars: List[Global.TypeVar], targs: List[Global.Type], restpe: Global.Type = WildcardType): Result

    Permalink

    Retract arguments that were inferred to Nothing because inference failed.

    Retract arguments that were inferred to Nothing because inference failed. Correct types for repeated params.

    We detect Nothing-due-to-failure by only retracting a parameter if either:

    • it occurs in an invariant/contravariant position in restpe
    • restpe == WildcardType

    Retracted parameters are mapped to None. TODO:

    • make sure the performance hit of storing these in a map is acceptable (it's going to be a small map in 90% of the cases, I think)
    • refactor further up the callstack so that we don't have to do this post-factum adjustment?

    Rewrite for repeated param types: Map T* entries to Seq[T].

    returns

    map from tparams to inferred arg, if inference was successful, tparams that map to None are considered left undetermined type parameters that are inferred as scala.Nothing and that are not covariant in restpe are taken to be undetermined

  9. object approximateAbstracts extends Global.TypeMap

    Permalink
  10. final def asInstanceOf[T0]: T0

    Permalink

    Cast the receiver object to be of type T0.

    Cast the receiver object to be of type T0.

    Note that the success of a cast at runtime is modulo Scala's erasure semantics. Therefore the expression 1.asInstanceOf[String] will throw a ClassCastException at runtime, while the expression List(1).asInstanceOf[List[String]] will not. In the latter example, because the type argument is erased as part of compilation it is not possible to check whether the contents of the list are of the requested type.

    returns

    the receiver object.

    Definition Classes
    Any
    Exceptions thrown

    ClassCastException if the receiver object is not an instance of the erasure of type T0.

  11. def checkAccessible(tree: Global.Tree, sym: Global.Symbol, pre: Global.Type, site: Global.Tree): Global.Tree

    Permalink

    Check that sym is defined and accessible as a member of tree site with type pre in current context.

  12. def checkBounds(tree: Global.Tree, pre: Global.Type, owner: Global.Symbol, tparams: List[Global.Symbol], targs: List[Global.Type], prefix: String): Boolean

    Permalink

    error if arguments not within bounds.

  13. def checkCheckable(tree: Global.Tree, P0: Global.Type, X0: Global.Type, inPattern: Boolean, canRemedy: Boolean = false): Unit

    Permalink

    TODO: much better error positions.

    TODO: much better error positions. Kind of stuck right now because they just pass us the one tree. TODO: Eliminate inPattern, canRemedy, which have no place here.

    Definition Classes
    InferCheckable
  14. def checkKindBounds(tparams: List[Global.Symbol], targs: List[Global.Type], pre: Global.Type, owner: Global.Symbol): List[String]

    Permalink
  15. def clone(): AnyRef

    Permalink

    Create a copy of the receiver object.

    Create a copy of the receiver object.

    The default implementation of the clone method is platform dependent.

    returns

    a copy of the receiver object.

    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
    Note

    not specified by SLS as a member of AnyRef

  16. def eligibleForTupleConversion(formals: List[Global.Type], argsCount: Int): Boolean

    Permalink
  17. def eligibleForTupleConversion(paramsCount: Int, argsCount: Int, varargsTarget: Boolean): Boolean

    Permalink

    True if the given parameter list can accept a tupled argument list, and the argument list can be tupled (based on its length.)

  18. def ensureFullyDefined(tp: Global.Type): Global.Type

    Permalink
  19. def ensuring(cond: (Analyzer.Inferencer) ⇒ Boolean, msg: ⇒ Any): Analyzer.Inferencer

    Permalink
    Implicit information
    This member is added by an implicit conversion from Analyzer.Inferencer to Ensuring[Analyzer.Inferencer] performed by method Ensuring in scala.Predef.
    Definition Classes
    Ensuring
  20. def ensuring(cond: (Analyzer.Inferencer) ⇒ Boolean): Analyzer.Inferencer

    Permalink
    Implicit information
    This member is added by an implicit conversion from Analyzer.Inferencer to Ensuring[Analyzer.Inferencer] performed by method Ensuring in scala.Predef.
    Definition Classes
    Ensuring
  21. def ensuring(cond: Boolean, msg: ⇒ Any): Analyzer.Inferencer

    Permalink
    Implicit information
    This member is added by an implicit conversion from Analyzer.Inferencer to Ensuring[Analyzer.Inferencer] performed by method Ensuring in scala.Predef.
    Definition Classes
    Ensuring
  22. def ensuring(cond: Boolean): Analyzer.Inferencer

    Permalink
    Implicit information
    This member is added by an implicit conversion from Analyzer.Inferencer to Ensuring[Analyzer.Inferencer] performed by method Ensuring in scala.Predef.
    Definition Classes
    Ensuring
  23. final def eq(arg0: AnyRef): Boolean

    Permalink

    Tests whether the argument (that) is a reference to the receiver object (this).

    Tests whether the argument (that) is a reference to the receiver object (this).

    The eq method implements an equivalence relation on non-null instances of AnyRef, and has three additional properties:

    • It is consistent: for any non-null instances x and y of type AnyRef, multiple invocations of x.eq(y) consistently returns true or consistently returns false.
    • For any non-null instance x of type AnyRef, x.eq(null) and null.eq(x) returns false.
    • null.eq(null) returns true.

    When overriding the equals or hashCode methods, it is important to ensure that their behavior is consistent with reference equality. Therefore, if two objects are references to each other (o1 eq o2), they should be equal to each other (o1 == o2) and they should hash to the same value (o1.hashCode == o2.hashCode).

    returns

    true if the argument is a reference to the receiver object; false otherwise.

    Definition Classes
    AnyRef
  24. def equals(arg0: Any): Boolean

    Permalink

    The equality method for reference types.

    The equality method for reference types. Default implementation delegates to eq.

    See also equals in scala.Any.

    returns

    true if the receiver object is equivalent to the argument; false otherwise.

    Definition Classes
    AnyRef → Any
  25. def explainTypes(tp1: Global.Type, tp2: Global.Type): Unit

    Permalink
  26. def finalize(): Unit

    Permalink

    Called by the garbage collector on the receiver object when there are no more references to the object.

    Called by the garbage collector on the receiver object when there are no more references to the object.

    The details of when and if the finalize method is invoked, as well as the interaction between finalize and non-local returns and exceptions, are all platform dependent.

    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( classOf[java.lang.Throwable] )
    Note

    not specified by SLS as a member of AnyRef

  27. def formatted(fmtstr: String): String

    Permalink
    Implicit information
    This member is added by an implicit conversion from Analyzer.Inferencer to StringFormat[Analyzer.Inferencer] performed by method StringFormat in scala.Predef.
    Definition Classes
    StringFormat
    Annotations
    @inline()
  28. def freeTypeParamsOfTerms(tp: Global.Type): List[Global.Symbol]

    Permalink

    Collects type parameters referred to in a type.

  29. final def getClass(): Class[_]

    Permalink

    A representation that corresponds to the dynamic class of the receiver object.

    A representation that corresponds to the dynamic class of the receiver object.

    The nature of the representation is platform dependent.

    returns

    a representation that corresponds to the dynamic class of the receiver object.

    Definition Classes
    AnyRef → Any
    Note

    not specified by SLS as a member of AnyRef

  30. def getContext: Analyzer.Context

    Permalink
  31. def hashCode(): Int

    Permalink

    The hashCode method for reference types.

    The hashCode method for reference types. See hashCode in scala.Any.

    returns

    the hash code value for this object.

    Definition Classes
    AnyRef → Any
  32. def inferArgumentInstance(tree: Global.Tree, undetparams: List[Global.Symbol], strictPt: Global.Type, lenientPt: Global.Type): Unit

    Permalink

    Substitute free type variables undetparams of polymorphic argument expression tree, given two prototypes strictPt, and lenientPt.

    Substitute free type variables undetparams of polymorphic argument expression tree, given two prototypes strictPt, and lenientPt. strictPt is the first attempt prototype where type parameters are left unchanged. lenientPt is the fall-back prototype where type parameters are replaced by WildcardTypes. We try to instantiate first to strictPt and then, if this fails, to lenientPt. If both attempts fail, an error is produced.

  33. def inferConstructorInstance(tree: Global.Tree, undetparams: List[Global.Symbol], pt0: Global.Type): Unit

    Permalink

    Substitute free type variables undetparams of type constructor tree in pattern, given prototype pt.

    Substitute free type variables undetparams of type constructor tree in pattern, given prototype pt.

    tree

    the constructor that needs to be instantiated

    undetparams

    the undetermined type parameters

    pt0

    the expected result type of the instance

  34. def inferExprAlternative(tree: Global.Tree, pt: Global.Type): Global.Tree

    Permalink

    Assign tree the symbol and type of the alternative which matches prototype pt, if it exists.

    Assign tree the symbol and type of the alternative which matches prototype pt, if it exists. If several alternatives match pt, take parameterless one. If no alternative matches pt, take the parameterless one anyway.

  35. def inferExprInstance(tree: Global.Tree, tparams: List[Global.Symbol], pt: Global.Type = WildcardType, treeTp0: Global.Type = null, keepNothings: Boolean = true, useWeaklyCompatible: Boolean = false): List[Global.Symbol]

    Permalink

    Infer type arguments targs for tparams of polymorphic expression in tree, given prototype pt.

    Infer type arguments targs for tparams of polymorphic expression in tree, given prototype pt.

    Substitute tparams to targs in tree, after adjustment by adjustTypeArgs, returning the type parameters that were not determined If passed, infers against specified type treeTp instead of tree.tp.

  36. def inferMethodAlternative(tree: Global.Tree, undetparams: List[Global.Symbol], argtpes0: List[Global.Type], pt0: Global.Type): Unit

    Permalink

    Assign tree the type of an alternative which is applicable to argtpes, and whose result type is compatible with pt.

    Assign tree the type of an alternative which is applicable to argtpes, and whose result type is compatible with pt. If several applicable alternatives exist, drop the alternatives which use default arguments, then select the most specialized one. If no applicable alternative exists, and pt != WildcardType, try again with pt = WildcardType. Otherwise, if there is no best alternative, error.

    argtpes0

    contains the argument types. If an argument is named, as "a = 3", the corresponding type is NamedType("a", Int). If the name of some NamedType does not exist in an alternative's parameter names, the type is replaces by Unit, i.e. the argument is treated as an assignment expression.

  37. def inferMethodInstance(fn: Global.Tree, undetparams: List[Global.Symbol], args: List[Global.Tree], pt0: Global.Type): List[Global.Symbol]

    Permalink

    Substitute free type variables undetparams of application fn(args), given prototype pt.

    Substitute free type variables undetparams of application fn(args), given prototype pt.

    fn

    fn: the function that needs to be instantiated.

    undetparams

    the parameters that need to be determined

    args

    the actual arguments supplied in the call.

    pt0

    the expected type of the function application

    returns

    The type parameters that remain uninstantiated, and that thus have not been substituted.

  38. def inferModulePattern(pat: Global.Tree, pt: Global.Type): Unit

    Permalink
  39. def inferPolyAlternatives(tree: Global.Tree, argtypes: List[Global.Type]): Unit

    Permalink

    Assign tree the type of all polymorphic alternatives which have the same number of type parameters as does argtypes with all argtypes are within the corresponding type parameter bounds.

    Assign tree the type of all polymorphic alternatives which have the same number of type parameters as does argtypes with all argtypes are within the corresponding type parameter bounds. If no such polymorphic alternative exist, error.

  40. def inferTypedPattern(tree0: Global.Tree, pattp: Global.Type, pt0: Global.Type, canRemedy: Boolean): Global.Type

    Permalink
  41. def instBounds(tvar: Global.TypeVar): Global.TypeBounds

    Permalink
  42. def instantiateTypeVar(tvar: Global.TypeVar): Unit

    Permalink
  43. def intersect(tp1: Global.Type, tp2: Global.Type): Global.Type

    Permalink

    Type intersection of simple type tp1 with general type tp2.

    Type intersection of simple type tp1 with general type tp2. The result eliminates some redundancies.

  44. def isAsSpecific(ftpe1: Global.Type, ftpe2: Global.Type): Boolean

    Permalink

    Is type ftpe1 strictly more specific than type ftpe2 when both are alternatives in an overloaded function?

    Is type ftpe1 strictly more specific than type ftpe2 when both are alternatives in an overloaded function?

    See also

    SLS (sec:overloading-resolution)

  45. def isCheckable(P0: Global.Type): Boolean

    Permalink
    Definition Classes
    InferCheckable
  46. def isCoercible(tp: Global.Type, pt: Global.Type): Boolean

    Permalink
  47. def isCompatibleArgs(tps: List[Global.Type], pts: List[Global.Type]): Boolean

    Permalink
  48. def isConservativelyCompatible(tp: Global.Type, pt: Global.Type): Boolean

    Permalink
  49. def isInProperSubClassOrObject(sym1: Global.Symbol, sym2: Global.Symbol): Boolean

    Permalink

    is symbol sym1 defined in a proper subclass of symbol sym2?

  50. final def isInstanceOf[T0]: Boolean

    Permalink

    Test whether the dynamic type of the receiver object is T0.

    Test whether the dynamic type of the receiver object is T0.

    Note that the result of the test is modulo Scala's erasure semantics. Therefore the expression 1.isInstanceOf[String] will return false, while the expression List(1).isInstanceOf[List[String]] will return true. In the latter example, because the type argument is erased as part of compilation it is not possible to check whether the contents of the list are of the specified type.

    returns

    true if the receiver object is an instance of erasure of type T0; false otherwise.

    Definition Classes
    Any
  51. def isInstantiatable(tvars: List[Global.TypeVar]): Boolean

    Permalink
  52. def isProperSubClassOrObject(sym1: Global.Symbol, sym2: Global.Symbol): Boolean

    Permalink

    Is sym1 (or its companion class in case it is a module) a subclass of sym2 (or its companion class in case it is a module)?

  53. def isStrictlyMoreSpecific(ftpe1: Global.Type, ftpe2: Global.Type, sym1: Global.Symbol, sym2: Global.Symbol): Boolean

    Permalink
  54. def isUncheckable(P0: Global.Type): Boolean

    Permalink
    Definition Classes
    InferCheckable
  55. def isWeaklyCompatible(tp: Global.Type, pt: Global.Type): Boolean

    Permalink
  56. def makeFullyDefined(tp: Global.Type): Global.Type

    Permalink

    Replace any (possibly bounded) wildcard types in type tp by existentially bound variables.

  57. def methTypeArgs(tparams: List[Global.Symbol], formals: List[Global.Type], restpe: Global.Type, argtpes: List[Global.Type], pt: Global.Type): Result

    Permalink

    Return inferred type arguments, given type parameters, formal parameters, argument types, result type and expected result type.

    Return inferred type arguments, given type parameters, formal parameters, argument types, result type and expected result type. If this is not possible, throw a NoInstance exception. Undetermined type arguments are represented by definitions.NothingTpe. No check that inferred parameters conform to their bounds is made here.

    tparams

    the type parameters of the method

    formals

    the value parameter types of the method

    restpe

    the result type of the method

    argtpes

    the argument types of the application

    pt

    the expected return type of the application

    returns

    @see adjustTypeArgs

    Exceptions thrown
  58. final def ne(arg0: AnyRef): Boolean

    Permalink

    Equivalent to !(this eq that).

    Equivalent to !(this eq that).

    returns

    true if the argument is not a reference to the receiver object; false otherwise.

    Definition Classes
    AnyRef
  59. final def notify(): Unit

    Permalink

    Wakes up a single thread that is waiting on the receiver object's monitor.

    Wakes up a single thread that is waiting on the receiver object's monitor.

    Definition Classes
    AnyRef
    Note

    not specified by SLS as a member of AnyRef

  60. final def notifyAll(): Unit

    Permalink

    Wakes up all threads that are waiting on the receiver object's monitor.

    Wakes up all threads that are waiting on the receiver object's monitor.

    Definition Classes
    AnyRef
    Note

    not specified by SLS as a member of AnyRef

  61. def protoTypeArgs(tparams: List[Global.Symbol], formals: List[Global.Type], restpe: Global.Type, pt: Global.Type): List[Global.Type]

    Permalink

    Return inferred proto-type arguments of function, given its type and value parameters and result type, and a prototype pt for the function result.

    Return inferred proto-type arguments of function, given its type and value parameters and result type, and a prototype pt for the function result. Type arguments need to be either determined precisely by the prototype, or they are maximized, if they occur only covariantly in the value parameter list. If instantiation of a type parameter fails, take WildcardType for the proto-type argument.

  62. def setError[T <: Global.Tree](tree: T): T

    Permalink
  63. final def synchronized[T0](arg0: ⇒ T0): T0

    Permalink
    Definition Classes
    AnyRef
  64. object toOrigin extends Global.TypeMap

    Permalink
  65. def toString(): String

    Permalink

    Creates a String representation of this object.

    Creates a String representation of this object. The default representation is platform dependent. On the java platform it is the concatenation of the class name, "@", and the object's hashcode in hexadecimal.

    returns

    a String representation of the object.

    Definition Classes
    AnyRef → Any
  66. def tupleIfNecessary(formals: List[Global.Type], argtpes: List[Global.Type]): List[Global.Type]

    Permalink

    If the argument list needs to be tupled for the parameter list, a list containing the type of the tuple.

    If the argument list needs to be tupled for the parameter list, a list containing the type of the tuple. Otherwise, the original argument list.

  67. final def wait(): Unit

    Permalink
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  68. final def wait(arg0: Long, arg1: Int): Unit

    Permalink
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  69. final def wait(arg0: Long): Unit

    Permalink
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  70. def [B](y: B): (Analyzer.Inferencer, B)

    Permalink
    Implicit information
    This member is added by an implicit conversion from Analyzer.Inferencer to ArrowAssoc[Analyzer.Inferencer] performed by method ArrowAssoc in scala.Predef.
    Definition Classes
    ArrowAssoc

Inherited from Analyzer.InferCheckable

Inherited from AnyRef

Inherited from Any

Inherited by implicit conversion any2stringadd from Analyzer.Inferencer to any2stringadd[Analyzer.Inferencer]

Inherited by implicit conversion StringFormat from Analyzer.Inferencer to StringFormat[Analyzer.Inferencer]

Inherited by implicit conversion Ensuring from Analyzer.Inferencer to Ensuring[Analyzer.Inferencer]

Inherited by implicit conversion ArrowAssoc from Analyzer.Inferencer to ArrowAssoc[Analyzer.Inferencer]

Ungrouped