// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

/*@testedFeatures=inference*/
library test;

class ActionDispatcher<P> {
  void call([P? value]) {}
}

class Bar {}

class FooActions {
  ActionDispatcher<Bar> get foo => new ActionDispatcher<Bar>();
}

void main() {
  new FooActions()
      . /*@target=FooActions.foo*/ foo /*@target=ActionDispatcher.call*/ (
          new Bar());
  new FooActions()
      . /*@target=FooActions.foo*/ foo
      . /*@target=ActionDispatcher.call*/ call(new Bar());
  (new FooActions()
          . /*@target=FooActions.foo*/ foo) /*@target=ActionDispatcher.call*/ (
      new Bar());
}
