§9.2.2.(a) Substitutions for type anchors

Only two substitutions are considered for determining anchor identity:

  1. If a method signature uses this as the anchor of any of its types, type checking an application of this method performs the following substitutions:
    A simple this expression is substituted by the actual call target of the method application.
    A qualified Outer.this expression is substituted by the corresponding enclosing instance of the call target.
  2. Assignments from a final identifier to another final identifier are transitively followed, i.e., if t1, t2 are final, after an assignment t1=t2 the types C<@t1> and C<@t2> are considered identical. Otherwise C<@t1> and C<@t2> are incommensurable.
    Attaching an actual parameter to a formal parameter in a method call is also considered as an assignment with respect to this rule.