| Index: pkg/analyzer/test/src/task/strong_mode_test.dart
 | 
| diff --git a/pkg/analyzer/test/src/task/strong_mode_test.dart b/pkg/analyzer/test/src/task/strong_mode_test.dart
 | 
| index ccc274f0367fc8e3018e303c230719e0c2cf25b1..b143a8355db7ecda72397a721780510e98e55874 100644
 | 
| --- a/pkg/analyzer/test/src/task/strong_mode_test.dart
 | 
| +++ b/pkg/analyzer/test/src/task/strong_mode_test.dart
 | 
| @@ -458,6 +458,9 @@ class B extends A {
 | 
|    var get $getterName => 1;
 | 
|  }
 | 
|  ''');
 | 
| +    ClassElement classA = unit.getType('A');
 | 
| +    FieldElement fieldA = classA.getField(getterName);
 | 
| +    PropertyAccessorElement getterA = classA.getGetter(getterName);
 | 
|      ClassElement classB = unit.getType('B');
 | 
|      FieldElement fieldB = classB.getField(getterName);
 | 
|      PropertyAccessorElement getterB = classB.getGetter(getterName);
 | 
| @@ -466,8 +469,92 @@ class B extends A {
 | 
|  
 | 
|      inferrer.inferCompilationUnit(unit);
 | 
|  
 | 
| +    // Expected behavior is that the getter is inferred: getters and setters
 | 
| +    // are treated as independent methods.
 | 
| +    expect(fieldB.type, fieldA.type);
 | 
| +    expect(getterB.returnType, getterA.returnType);
 | 
| +  }
 | 
| +
 | 
| +  void test_inferCompilationUnit_setter_single() {
 | 
| +    InstanceMemberInferrer inferrer = createInferrer;
 | 
| +    String setterName = 'g';
 | 
| +    CompilationUnitElement unit = resolve('''
 | 
| +class A {
 | 
| +  set $setterName(int x) {}
 | 
| +}
 | 
| +class B extends A {
 | 
| +  set $setterName(x) {}
 | 
| +}
 | 
| +''');
 | 
| +    ClassElement classA = unit.getType('A');
 | 
| +    FieldElement fieldA = classA.getField(setterName);
 | 
| +    PropertyAccessorElement setterA = classA.getSetter(setterName);
 | 
| +    ClassElement classB = unit.getType('B');
 | 
| +    FieldElement fieldB = classB.getField(setterName);
 | 
| +    PropertyAccessorElement setterB = classB.getSetter(setterName);
 | 
|      expect(fieldB.type.isDynamic, isTrue);
 | 
| -    expect(getterB.returnType.isDynamic, isTrue);
 | 
| +    expect(setterB.parameters[0].type.isDynamic, isTrue);
 | 
| +
 | 
| +    inferrer.inferCompilationUnit(unit);
 | 
| +
 | 
| +    expect(fieldB.type, fieldA.type);
 | 
| +    expect(setterB.parameters[0].type, setterA.parameters[0].type);
 | 
| +  }
 | 
| +
 | 
| +  void test_inferCompilationUnit_setter_single_generic() {
 | 
| +    InstanceMemberInferrer inferrer = createInferrer;
 | 
| +    String setterName = 'g';
 | 
| +    CompilationUnitElement unit = resolve('''
 | 
| +class A<E> {
 | 
| +  set $setterName(E x) {}
 | 
| +}
 | 
| +class B<E> extends A<E> {
 | 
| +  set $setterName(x) {}
 | 
| +}
 | 
| +''');
 | 
| +    ClassElement classB = unit.getType('B');
 | 
| +    DartType typeBE = classB.typeParameters[0].type;
 | 
| +    FieldElement fieldB = classB.getField(setterName);
 | 
| +    PropertyAccessorElement setterB = classB.getSetter(setterName);
 | 
| +    expect(fieldB.type.isDynamic, isTrue);
 | 
| +    expect(setterB.parameters[0].type.isDynamic, isTrue);
 | 
| +
 | 
| +    inferrer.inferCompilationUnit(unit);
 | 
| +
 | 
| +    expect(fieldB.type, typeBE);
 | 
| +    expect(setterB.parameters[0].type, typeBE);
 | 
| +  }
 | 
| +
 | 
| +  void test_inferCompilationUnit_setter_single_inconsistentAccessors() {
 | 
| +    InstanceMemberInferrer inferrer = createInferrer;
 | 
| +    String getterName = 'g';
 | 
| +    CompilationUnitElement unit = resolve('''
 | 
| +class A {
 | 
| +  int get $getterName => 0;
 | 
| +  set $getterName(String value) {}
 | 
| +}
 | 
| +class B extends A {
 | 
| +  set $getterName(x) {}
 | 
| +}
 | 
| +''');
 | 
| +    ClassElement classA = unit.getType('A');
 | 
| +    FieldElement fieldA = classA.getField(getterName);
 | 
| +    PropertyAccessorElement setterA = classA.getSetter(getterName);
 | 
| +    ClassElement classB = unit.getType('B');
 | 
| +    FieldElement fieldB = classB.getField(getterName);
 | 
| +    PropertyAccessorElement setterB = classB.getSetter(getterName);
 | 
| +    expect(fieldB.type.isDynamic, isTrue);
 | 
| +    expect(setterB.parameters[0].type.isDynamic, isTrue);
 | 
| +
 | 
| +    inferrer.inferCompilationUnit(unit);
 | 
| +
 | 
| +    // Expected behavior is that the getter is inferred: getters and setters
 | 
| +    // are treated as independent methods.
 | 
| +    expect(setterB.parameters[0].type, setterA.parameters[0].type);
 | 
| +
 | 
| +    // Note that B's synthetic field type will be String. This matches what
 | 
| +    // resolver would do if we explicitly typed the parameter as 'String'
 | 
| +    expect(fieldB.type, setterB.parameters[0].type);
 | 
|    }
 | 
|  
 | 
|    void test_inferCompilationUnit_invalid_inheritanceCycle() {
 | 
| 
 |