Replace assertUnresolvedSimpleIdentifier() with textual expectations.

Change-Id: I1227edbc7935091a652dd8220b90dadb77f72b82
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/294180
Reviewed-by: Samuel Rawlins <srawlins@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
diff --git a/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
index 12be4a5..999c72d 100644
--- a/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
+++ b/pkg/analyzer/test/src/dart/analysis/driver_resolution_test.dart
@@ -897,45 +897,6 @@
     assertType(identifier, 'Future<dynamic> Function()');
   }
 
-  test_deferredImport_variable() async {
-    newFile('$testPackageLibPath/a.dart', 'var v = 0;');
-    addTestFile(r'''
-import 'a.dart' deferred as a;
-main() async {
-  a.v;
-  a.v = 1;
-}
-''');
-    await resolveTestFile();
-    var import = findElement.import('package:test/a.dart');
-    var v = (import.importedLibrary!.publicNamespace.get('v')
-            as PropertyAccessorElement)
-        .variable as TopLevelVariableElement;
-
-    {
-      var prefixed = findNode.prefixed('a.v;');
-      assertElement(prefixed, v.getter);
-      assertType(prefixed, 'int');
-
-      assertElement(prefixed.prefix, import.prefix?.element);
-      assertType(prefixed.prefix, null);
-
-      assertElement(prefixed.identifier, v.getter);
-      assertType(prefixed.identifier, 'int');
-    }
-
-    {
-      var prefixed = findNode.prefixed('a.v = 1;');
-      assertElementNull(prefixed);
-      assertTypeNull(prefixed);
-
-      assertElement(prefixed.prefix, import.prefix?.element);
-      assertType(prefixed.prefix, null);
-
-      assertUnresolvedSimpleIdentifier(prefixed.identifier);
-    }
-  }
-
   test_directive_export() async {
     newFile('$testPackageLibPath/a.dart', r'''
 class MyClass {}
@@ -1139,30 +1100,6 @@
         fElement.type, typeProvider.listType(typeParameterTypeNone(tElement)));
   }
 
-  test_field_generic() async {
-    addTestFile(r'''
-class C<T> {
-  T f;
-}
-main(C<int> c) {
-  c.f; // ref
-  c.f = 1;
-}
-''');
-    await resolveTestFile();
-
-    {
-      var fRef = findNode.simple('f; // ref');
-      assertMember(fRef, findElement.getter('f'), {'T': 'int'});
-      assertType(fRef, 'int');
-    }
-
-    {
-      var fRef = findNode.simple('f = 1;');
-      assertUnresolvedSimpleIdentifier(fRef);
-    }
-  }
-
   test_formalParameter_functionTyped() async {
     addTestFile(r'''
 class A {
@@ -5125,82 +5062,6 @@
     assertElement(gRef, findElement.parameter('g'));
   }
 
-  test_postfix_increment_of_postfix_increment() async {
-    addTestFile('''
-void f(int x) {
-  x ++ ++;
-}
-''');
-    await resolveTestFile();
-
-    var xRef = findNode.simple('x ++');
-    assertUnresolvedSimpleIdentifier(xRef, disableElementCheck: true);
-  }
-
-  test_postfixExpression_local() async {
-    String content = r'''
-main() {
-  int v = 0;
-  v++;
-}
-''';
-    addTestFile(content);
-
-    await resolveTestFile();
-
-    List<Statement> mainStatements = _getMainStatements(result);
-
-    VariableElement v;
-    {
-      var statement = mainStatements[0] as VariableDeclarationStatement;
-      v = statement.variables.variables[0].declaredElement!;
-      expect(v.type, typeProvider.intType);
-    }
-
-    {
-      var statement = mainStatements[1] as ExpressionStatement;
-
-      var postfix = statement.expression as PostfixExpression;
-      expect(postfix.operator.type, TokenType.PLUS_PLUS);
-      expect(postfix.staticElement!.name, '+');
-      expect(postfix.staticType, typeProvider.intType);
-
-      var operand = postfix.operand as SimpleIdentifier;
-      assertUnresolvedSimpleIdentifier(operand, disableElementCheck: true);
-    }
-  }
-
-  test_postfixExpression_propertyAccess() async {
-    String content = r'''
-main() {
-  new C().f++;
-}
-class C {
-  int f;
-}
-''';
-    addTestFile(content);
-
-    await resolveTestFile();
-
-    List<Statement> mainStatements = _getMainStatements(result);
-
-    {
-      var statement = mainStatements[0] as ExpressionStatement;
-
-      var postfix = statement.expression as PostfixExpression;
-      expect(postfix.operator.type, TokenType.PLUS_PLUS);
-      expect(postfix.staticElement!.name, '+');
-      expect(postfix.staticType, typeProvider.intType);
-
-      var propertyAccess = postfix.operand as PropertyAccess;
-      assertUnresolvedPropertyAccess(propertyAccess);
-
-      SimpleIdentifier propertyName = propertyAccess.propertyName;
-      assertUnresolvedSimpleIdentifier(propertyName);
-    }
-  }
-
   test_prefix_increment_of_non_generator() async {
     addTestFile('''
 void f(bool x) {
@@ -5214,30 +5075,6 @@
     assertElement(xRef, findElement.parameter('x'));
   }
 
-  test_prefix_increment_of_postfix_increment() async {
-    addTestFile('''
-void f(int x) {
-  ++x++;
-}
-''');
-    await resolveTestFile();
-
-    var xRef = findNode.simple('x++');
-    assertUnresolvedSimpleIdentifier(xRef, disableElementCheck: true);
-  }
-
-  test_prefix_increment_of_prefix_increment() async {
-    addTestFile('''
-void f(int x) {
-  ++ ++ x;
-}
-''');
-    await resolveTestFile();
-
-    var xRef = findNode.simple('x;');
-    assertUnresolvedSimpleIdentifier(xRef, disableElementCheck: true);
-  }
-
   test_prefixedIdentifier_classInstance_instanceField() async {
     String content = r'''
 main() {
@@ -5332,231 +5169,6 @@
     assertType(methodName.staticType, 'double Function(int)');
   }
 
-  test_prefixedIdentifier_importPrefix_className() async {
-    newFile('$testPackageLibPath/lib.dart', '''
-class MyClass {}
-typedef void MyFunctionTypeAlias();
-int myTopVariable;
-int myTopFunction() => 0;
-int get myGetter => 0;
-void set mySetter(int _) {}
-''');
-    addTestFile(r'''
-import 'lib.dart' as my;
-main() {
-  my.MyClass;
-  my.MyFunctionTypeAlias;
-  my.myTopVariable;
-  my.myTopFunction;
-  my.myTopFunction();
-  my.myGetter;
-  my.mySetter = 0;
-}
-''');
-    await resolveTestFile();
-    // TODO(scheglov) Uncomment and fix "unused imports" hint.
-//    expect(result.errors, isEmpty);
-
-    var unitElement = result.unit.declaredElement!;
-    final myImport = unitElement.library.libraryImports[0];
-    PrefixElement myPrefix = myImport.prefix!.element;
-
-    var myLibrary = myImport.importedLibrary!;
-    var myUnit = myLibrary.definingCompilationUnit;
-    var myClass = myUnit.classes.single;
-    var myTypeAlias = myUnit.typeAliases.single;
-    var myTopVariable = myUnit.topLevelVariables[0];
-    var myTopFunction = myUnit.functions.single;
-    var myGetter = myUnit.topLevelVariables[1].getter!;
-    var mySetter = myUnit.topLevelVariables[2].setter!;
-    expect(myTopVariable.name, 'myTopVariable');
-    expect(myGetter.displayName, 'myGetter');
-    expect(mySetter.displayName, 'mySetter');
-
-    List<Statement> statements = _getMainStatements(result);
-
-    void assertPrefix(SimpleIdentifier identifier) {
-      expect(identifier.staticElement, same(myPrefix));
-      expect(identifier.staticType, isNull);
-    }
-
-    void assertPrefixedIdentifier(
-        int statementIndex, Element expectedElement, DartType expectedType) {
-      var statement = statements[statementIndex] as ExpressionStatement;
-      var prefixed = statement.expression as PrefixedIdentifier;
-      assertPrefix(prefixed.prefix);
-
-      expect(prefixed.identifier.staticElement, same(expectedElement));
-      expect(prefixed.identifier.staticType, expectedType);
-    }
-
-    assertPrefixedIdentifier(0, myClass, typeProvider.typeType);
-    assertPrefixedIdentifier(1, myTypeAlias, typeProvider.typeType);
-    assertPrefixedIdentifier(2, myTopVariable.getter!, typeProvider.intType);
-
-    {
-      var statement = statements[3] as ExpressionStatement;
-      var prefixed = statement.expression as PrefixedIdentifier;
-      assertPrefix(prefixed.prefix);
-
-      expect(prefixed.identifier.staticElement, same(myTopFunction));
-      expect(prefixed.identifier.staticType, isNotNull);
-    }
-
-    {
-      var statement = statements[4] as ExpressionStatement;
-      var invocation = statement.expression as MethodInvocation;
-      assertPrefix(invocation.target as SimpleIdentifier);
-
-      expect(invocation.methodName.staticElement, same(myTopFunction));
-      expect(invocation.methodName.staticType, isNotNull);
-    }
-
-    assertPrefixedIdentifier(5, myGetter, typeProvider.intType);
-
-    {
-      var statement = statements[6] as ExpressionStatement;
-      var assignment = statement.expression as AssignmentExpression;
-      var left = assignment.leftHandSide as PrefixedIdentifier;
-      assertPrefix(left.prefix);
-      assertUnresolvedSimpleIdentifier(left.identifier);
-    }
-  }
-
-  test_prefixExpression_local() async {
-    String content = r'''
-main() {
-  int v = 0;
-  ++v;
-  ~v;
-}
-''';
-    addTestFile(content);
-
-    await resolveTestFile();
-
-    List<Statement> mainStatements = _getMainStatements(result);
-
-    VariableElement v;
-    {
-      var statement = mainStatements[0] as VariableDeclarationStatement;
-      v = statement.variables.variables[0].declaredElement!;
-      expect(v.type, typeProvider.intType);
-    }
-
-    {
-      var statement = mainStatements[1] as ExpressionStatement;
-
-      var prefix = statement.expression as PrefixExpression;
-      expect(prefix.operator.type, TokenType.PLUS_PLUS);
-      expect(prefix.staticElement!.name, '+');
-      expect(prefix.staticType, typeProvider.intType);
-
-      var operand = prefix.operand as SimpleIdentifier;
-      assertUnresolvedSimpleIdentifier(operand, disableElementCheck: true);
-    }
-
-    {
-      var statement = mainStatements[2] as ExpressionStatement;
-
-      var prefix = statement.expression as PrefixExpression;
-      expect(prefix.operator.type, TokenType.TILDE);
-      expect(prefix.staticElement!.name, '~');
-      expect(prefix.staticType, typeProvider.intType);
-
-      var operand = prefix.operand as SimpleIdentifier;
-      expect(operand.staticElement, same(v));
-      expect(operand.staticType, typeProvider.intType);
-    }
-  }
-
-  test_prefixExpression_local_not() async {
-    String content = r'''
-main() {
-  bool v = true;
-  !v;
-}
-''';
-    addTestFile(content);
-
-    await resolveTestFile();
-
-    List<Statement> mainStatements = _getMainStatements(result);
-
-    VariableElement v;
-    {
-      var statement = mainStatements[0] as VariableDeclarationStatement;
-      v = statement.variables.variables[0].declaredElement!;
-      expect(v.type, typeProvider.boolType);
-    }
-
-    {
-      var statement = mainStatements[1] as ExpressionStatement;
-
-      var prefix = statement.expression as PrefixExpression;
-      expect(prefix.operator.type, TokenType.BANG);
-      expect(prefix.staticElement, isNull);
-      expect(prefix.staticType, typeProvider.boolType);
-
-      var operand = prefix.operand as SimpleIdentifier;
-      expect(operand.staticElement, same(v));
-      expect(operand.staticType, typeProvider.boolType);
-    }
-  }
-
-  test_prefixExpression_propertyAccess() async {
-    String content = r'''
-main() {
-  ++new C().f;
-  ~new C().f;
-}
-class C {
-  int f;
-}
-''';
-    addTestFile(content);
-
-    await resolveTestFile();
-    CompilationUnit unit = result.unit;
-
-    var cClassDeclaration = unit.declarations[1] as ClassDeclaration;
-    ClassElement cClassElement = cClassDeclaration.declaredElement!;
-    FieldElement fElement = cClassElement.getField('f')!;
-
-    List<Statement> mainStatements = _getMainStatements(result);
-
-    {
-      var statement = mainStatements[0] as ExpressionStatement;
-
-      var prefix = statement.expression as PrefixExpression;
-      expect(prefix.operator.type, TokenType.PLUS_PLUS);
-      expect(prefix.staticElement!.name, '+');
-      expect(prefix.staticType, typeProvider.intType);
-
-      var propertyAccess = prefix.operand as PropertyAccess;
-      assertUnresolvedPropertyAccess(propertyAccess);
-
-      SimpleIdentifier propertyName = propertyAccess.propertyName;
-      assertUnresolvedSimpleIdentifier(propertyName);
-    }
-
-    {
-      var statement = mainStatements[1] as ExpressionStatement;
-
-      var prefix = statement.expression as PrefixExpression;
-      expect(prefix.operator.type, TokenType.TILDE);
-      expect(prefix.staticElement!.name, '~');
-      expect(prefix.staticType, typeProvider.intType);
-
-      var propertyAccess = prefix.operand as PropertyAccess;
-      expect(propertyAccess.staticType, typeProvider.intType);
-
-      SimpleIdentifier propertyName = propertyAccess.propertyName;
-      expect(propertyName.staticElement, same(fElement.getter));
-      expect(propertyName.staticType, typeProvider.intType);
-    }
-  }
-
   test_propertyAccess_field() async {
     String content = r'''
 main() {
@@ -5731,236 +5343,6 @@
     expect(result.errors, isEmpty);
   }
 
-  test_super() async {
-    String content = r'''
-class A {
-  void method(int p) {}
-  int get getter => 0;
-  void set setter(int p) {}
-  int operator+(int p) => 0;
-}
-class B extends A {
-  void test() {
-    method(1);
-    super.method(2);
-    getter;
-    super.getter;
-    setter = 3;
-    super.setter = 4;
-    this + 5;
-  }
-}
-''';
-    addTestFile(content);
-    await resolveTestFile();
-
-    var aNode = result.unit.declarations[0] as ClassDeclaration;
-    var bNode = result.unit.declarations[1] as ClassDeclaration;
-
-    var methodElement = aNode.members[0].declaredElement as MethodElement;
-    var getterElement =
-        aNode.members[1].declaredElement as PropertyAccessorElement;
-    var operatorElement = aNode.members[3].declaredElement as MethodElement;
-
-    var testNode = bNode.members[0] as MethodDeclaration;
-    var testBody = testNode.body as BlockFunctionBody;
-    List<Statement> testStatements = testBody.block.statements;
-
-    // method(1);
-    {
-      var statement = testStatements[0] as ExpressionStatement;
-      var invocation = statement.expression as MethodInvocation;
-
-      expect(invocation.target, isNull);
-
-      expect(invocation.methodName.staticElement, same(methodElement));
-    }
-
-    // super.method(2);
-    {
-      var statement = testStatements[1] as ExpressionStatement;
-      var invocation = statement.expression as MethodInvocation;
-
-      var target = invocation.target as SuperExpression;
-      expect(
-          target.staticType, interfaceTypeNone(bNode.declaredElement!)); // raw
-
-      expect(invocation.methodName.staticElement, same(methodElement));
-    }
-
-    // getter;
-    {
-      var statement = testStatements[2] as ExpressionStatement;
-      var identifier = statement.expression as SimpleIdentifier;
-
-      expect(identifier.staticElement, same(getterElement));
-      expect(identifier.staticType, typeProvider.intType);
-    }
-
-    // super.getter;
-    {
-      var statement = testStatements[3] as ExpressionStatement;
-      var propertyAccess = statement.expression as PropertyAccess;
-      expect(propertyAccess.staticType, typeProvider.intType);
-
-      var target = propertyAccess.target as SuperExpression;
-      expect(
-          target.staticType, interfaceTypeNone(bNode.declaredElement!)); // raw
-
-      expect(propertyAccess.propertyName.staticElement, same(getterElement));
-      expect(propertyAccess.propertyName.staticType, typeProvider.intType);
-    }
-
-    // setter = 3;
-    {
-      var statement = testStatements[4] as ExpressionStatement;
-      var assignment = statement.expression as AssignmentExpression;
-
-      var identifier = assignment.leftHandSide as SimpleIdentifier;
-      assertUnresolvedSimpleIdentifier(identifier);
-    }
-
-    // this.setter = 4;
-    {
-      var statement = testStatements[5] as ExpressionStatement;
-      var assignment = statement.expression as AssignmentExpression;
-
-      var propertyAccess = assignment.leftHandSide as PropertyAccess;
-
-      var target = propertyAccess.target as SuperExpression;
-      expect(
-          target.staticType, interfaceTypeNone(bNode.declaredElement!)); // raw
-
-      assertUnresolvedSimpleIdentifier(propertyAccess.propertyName);
-    }
-
-    // super + 5;
-    {
-      var statement = testStatements[6] as ExpressionStatement;
-      var binary = statement.expression as BinaryExpression;
-
-      var target = binary.leftOperand as ThisExpression;
-      expect(
-          target.staticType, interfaceTypeNone(bNode.declaredElement!)); // raw
-
-      expect(binary.staticElement, same(operatorElement));
-      expect(binary.staticType, typeProvider.intType);
-    }
-  }
-
-  test_this() async {
-    String content = r'''
-class A {
-  void method(int p) {}
-  int get getter => 0;
-  void set setter(int p) {}
-  int operator+(int p) => 0;
-  void test() {
-    method(1);
-    this.method(2);
-    getter;
-    this.getter;
-    setter = 3;
-    this.setter = 4;
-    this + 5;
-  }
-}
-''';
-    addTestFile(content);
-    await resolveTestFile();
-
-    var aNode = result.unit.declarations[0] as ClassDeclaration;
-
-    var methodElement = aNode.members[0].declaredElement as MethodElement;
-    var getterElement =
-        aNode.members[1].declaredElement as PropertyAccessorElement;
-    var operatorElement = aNode.members[3].declaredElement as MethodElement;
-
-    var testNode = aNode.members[4] as MethodDeclaration;
-    var testBody = testNode.body as BlockFunctionBody;
-    List<Statement> testStatements = testBody.block.statements;
-
-    var elementA = findElement.class_('A');
-    var thisTypeA = interfaceTypeNone(elementA);
-
-    // method(1);
-    {
-      var statement = testStatements[0] as ExpressionStatement;
-      var invocation = statement.expression as MethodInvocation;
-
-      expect(invocation.target, isNull);
-
-      expect(invocation.methodName.staticElement, same(methodElement));
-    }
-
-    // this.method(2);
-    {
-      var statement = testStatements[1] as ExpressionStatement;
-      var invocation = statement.expression as MethodInvocation;
-
-      var target = invocation.target as ThisExpression;
-      expect(target.staticType, thisTypeA); // raw
-
-      expect(invocation.methodName.staticElement, same(methodElement));
-    }
-
-    // getter;
-    {
-      var statement = testStatements[2] as ExpressionStatement;
-      var identifier = statement.expression as SimpleIdentifier;
-
-      expect(identifier.staticElement, same(getterElement));
-      expect(identifier.staticType, typeProvider.intType);
-    }
-
-    // this.getter;
-    {
-      var statement = testStatements[3] as ExpressionStatement;
-      var propertyAccess = statement.expression as PropertyAccess;
-      expect(propertyAccess.staticType, typeProvider.intType);
-
-      var target = propertyAccess.target as ThisExpression;
-      expect(target.staticType, thisTypeA); // raw
-
-      expect(propertyAccess.propertyName.staticElement, same(getterElement));
-      expect(propertyAccess.propertyName.staticType, typeProvider.intType);
-    }
-
-    // setter = 3;
-    {
-      var statement = testStatements[4] as ExpressionStatement;
-      var assignment = statement.expression as AssignmentExpression;
-
-      var identifier = assignment.leftHandSide as SimpleIdentifier;
-      assertUnresolvedSimpleIdentifier(identifier);
-    }
-
-    // this.setter = 4;
-    {
-      var statement = testStatements[5] as ExpressionStatement;
-      var assignment = statement.expression as AssignmentExpression;
-
-      var propertyAccess = assignment.leftHandSide as PropertyAccess;
-
-      var target = propertyAccess.target as ThisExpression;
-      expect(target.staticType, thisTypeA); // raw
-
-      assertUnresolvedSimpleIdentifier(propertyAccess.propertyName);
-    }
-
-    // this + 5;
-    {
-      var statement = testStatements[6] as ExpressionStatement;
-      var binary = statement.expression as BinaryExpression;
-
-      var target = binary.leftOperand as ThisExpression;
-      expect(target.staticType, thisTypeA); // raw
-
-      expect(binary.staticElement, same(operatorElement));
-      expect(binary.staticType, typeProvider.intType);
-    }
-  }
-
   test_top_class_constructor_parameter_defaultValue() async {
     String content = r'''
 class C {
@@ -7274,78 +6656,6 @@
         [checkTopVarRef('arg1'), checkTopVarUndefinedNamedRef('arg2')]);
   }
 
-  test_unresolved_postfix_operand() async {
-    addTestFile(r'''
-main() {
-  a++;
-}
-''');
-    await resolveTestFile();
-    expect(result.errors, isNotEmpty);
-
-    var postfix = findNode.postfix('a++');
-    assertElementNull(postfix);
-    assertTypeDynamic(postfix);
-
-    var aRef = postfix.operand as SimpleIdentifier;
-    assertUnresolvedSimpleIdentifier(aRef);
-  }
-
-  test_unresolved_postfix_operator() async {
-    addTestFile(r'''
-A a;
-main() {
-  a++;
-}
-class A {}
-''');
-    await resolveTestFile();
-    expect(result.errors, isNotEmpty);
-
-    var postfix = findNode.postfix('a++');
-    assertElementNull(postfix);
-    assertType(postfix, 'A');
-
-    var aRef = postfix.operand as SimpleIdentifier;
-    assertUnresolvedSimpleIdentifier(aRef);
-  }
-
-  test_unresolved_prefix_operand() async {
-    addTestFile(r'''
-main() {
-  ++a;
-}
-''');
-    await resolveTestFile();
-    expect(result.errors, isNotEmpty);
-
-    var prefix = findNode.prefix('++a');
-    assertElementNull(prefix);
-    assertTypeDynamic(prefix);
-
-    var aRef = prefix.operand as SimpleIdentifier;
-    assertUnresolvedSimpleIdentifier(aRef);
-  }
-
-  test_unresolved_prefix_operator() async {
-    addTestFile(r'''
-A a;
-main() {
-  ++a;
-}
-class A {}
-''');
-    await resolveTestFile();
-    expect(result.errors, isNotEmpty);
-
-    var prefix = findNode.prefix('++a');
-    assertElementNull(prefix);
-    assertTypeDynamic(prefix);
-
-    var aRef = prefix.operand as SimpleIdentifier;
-    assertUnresolvedSimpleIdentifier(aRef);
-  }
-
   test_unresolved_prefixedIdentifier_identifier() async {
     addTestFile(r'''
 Object foo;
diff --git a/pkg/analyzer/test/src/dart/resolution/assignment_test.dart b/pkg/analyzer/test/src/dart/resolution/assignment_test.dart
index 75ce261..abcd7e0 100644
--- a/pkg/analyzer/test/src/dart/resolution/assignment_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/assignment_test.dart
@@ -206,6 +206,48 @@
 ''');
   }
 
+  test_importPrefix_deferred_topLevelVariable_simple() async {
+    newFile('$testPackageLibPath/a.dart', '''
+var v = 0;
+''');
+
+    await assertNoErrorsInCode(r'''
+import 'a.dart' deferred as prefix;
+
+void f() {
+  prefix.v = 0;
+}
+''');
+
+    final node = findNode.assignment('= 0');
+    assertResolvedNodeText(node, r'''
+AssignmentExpression
+  leftHandSide: PrefixedIdentifier
+    prefix: SimpleIdentifier
+      token: prefix
+      staticElement: self::@prefix::prefix
+      staticType: null
+    period: .
+    identifier: SimpleIdentifier
+      token: v
+      staticElement: <null>
+      staticType: null
+    staticElement: <null>
+    staticType: null
+  operator: =
+  rightHandSide: IntegerLiteral
+    literal: 0
+    parameter: package:test/a.dart::@setter::v::@parameter::_v
+    staticType: int
+  readElement: <null>
+  readType: null
+  writeElement: package:test/a.dart::@setter::v
+  writeType: int
+  staticElement: <null>
+  staticType: int
+''');
+  }
+
   test_indexExpression_cascade_compound() async {
     await assertNoErrorsInCode(r'''
 class A {
diff --git a/pkg/analyzer/test/src/dart/resolution/binary_expression_test.dart b/pkg/analyzer/test/src/dart/resolution/binary_expression_test.dart
index 1792ee8..ad16f6b 100644
--- a/pkg/analyzer/test/src/dart/resolution/binary_expression_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/binary_expression_test.dart
@@ -415,6 +415,66 @@
   staticType: int
 ''');
   }
+
+  test_superQualifier_plus() async {
+    await assertNoErrorsInCode(r'''
+class A {
+  int operator +(int other) => 0;
+}
+
+class B extends A {
+  int operator +(int other) => 0;
+
+  void f() {
+    super + 0;
+  }
+}
+''');
+
+    final node = findNode.binary('+ 0');
+    assertResolvedNodeText(node, r'''
+BinaryExpression
+  leftOperand: SuperExpression
+    superKeyword: super
+    staticType: B
+  operator: +
+  rightOperand: IntegerLiteral
+    literal: 0
+    parameter: self::@class::A::@method::+::@parameter::other
+    staticType: int
+  staticElement: self::@class::A::@method::+
+  staticInvokeType: int Function(int)
+  staticType: int
+''');
+  }
+
+  test_thisExpression_plus() async {
+    await assertNoErrorsInCode(r'''
+class A {
+  int operator +(int other) => 0;
+
+  void f() {
+    this + 0;
+  }
+}
+''');
+
+    final node = findNode.binary('+ 0');
+    assertResolvedNodeText(node, r'''
+BinaryExpression
+  leftOperand: ThisExpression
+    thisKeyword: this
+    staticType: A
+  operator: +
+  rightOperand: IntegerLiteral
+    literal: 0
+    parameter: self::@class::A::@method::+::@parameter::other
+    staticType: int
+  staticElement: self::@class::A::@method::+
+  staticInvokeType: int Function(int)
+  staticType: int
+''');
+  }
 }
 
 mixin BinaryExpressionResolutionTestCases on PubPackageResolutionTest {
diff --git a/pkg/analyzer/test/src/dart/resolution/postfix_expression_test.dart b/pkg/analyzer/test/src/dart/resolution/postfix_expression_test.dart
index d310a7f..520b70c 100644
--- a/pkg/analyzer/test/src/dart/resolution/postfix_expression_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/postfix_expression_test.dart
@@ -19,6 +19,102 @@
 @reflectiveTest
 class PostfixExpressionResolutionTest extends PubPackageResolutionTest
     with PostfixExpressionResolutionTestCases {
+  test_formalParameter_inc_inc() async {
+    await assertErrorsInCode(r'''
+void f(int x) {
+  x ++ ++;
+}
+''', [
+      error(ParserErrorCode.ILLEGAL_ASSIGNMENT_TO_NON_ASSIGNABLE, 23, 2),
+    ]);
+
+    final node = findNode.postfix('++;');
+    assertResolvedNodeText(node, r'''
+PostfixExpression
+  operand: PostfixExpression
+    operand: SimpleIdentifier
+      token: x
+      staticElement: self::@function::f::@parameter::x
+      staticType: null
+    operator: ++
+    readElement: self::@function::f::@parameter::x
+    readType: int
+    writeElement: self::@function::f::@parameter::x
+    writeType: int
+    staticElement: dart:core::@class::num::@method::+
+    staticType: int
+  operator: ++
+  readElement: <null>
+  readType: dynamic
+  writeElement: <null>
+  writeType: dynamic
+  staticElement: <null>
+  staticType: dynamic
+''');
+  }
+
+  test_formalParameter_incUnresolved() async {
+    await assertErrorsInCode(r'''
+class A {}
+
+void f(A a) {
+  a++;
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_OPERATOR, 29, 2),
+    ]);
+
+    final node = findNode.postfix('++;');
+    assertResolvedNodeText(node, r'''
+PostfixExpression
+  operand: SimpleIdentifier
+    token: a
+    staticElement: self::@function::f::@parameter::a
+    staticType: null
+  operator: ++
+  readElement: self::@function::f::@parameter::a
+  readType: A
+  writeElement: self::@function::f::@parameter::a
+  writeType: A
+  staticElement: <null>
+  staticType: A
+''');
+  }
+
+  test_inc_formalParameter_inc() async {
+    await assertErrorsInCode(r'''
+void f(int x) {
+  ++x++;
+}
+''', [
+      error(ParserErrorCode.MISSING_ASSIGNABLE_SELECTOR, 21, 2),
+    ]);
+
+    final node = findNode.prefix('++x');
+    assertResolvedNodeText(node, r'''
+PrefixExpression
+  operator: ++
+  operand: PostfixExpression
+    operand: SimpleIdentifier
+      token: x
+      staticElement: self::@function::f::@parameter::x
+      staticType: null
+    operator: ++
+    readElement: self::@function::f::@parameter::x
+    readType: int
+    writeElement: self::@function::f::@parameter::x
+    writeType: int
+    staticElement: dart:core::@class::num::@method::+
+    staticType: int
+  readElement: <null>
+  readType: dynamic
+  writeElement: <null>
+  writeType: dynamic
+  staticElement: <null>
+  staticType: dynamic
+''');
+  }
+
   test_inc_propertyAccess_nullShorting() async {
     await assertNoErrorsInCode(r'''
 class A {
@@ -389,6 +485,32 @@
   staticType: T & num
 ''');
   }
+
+  test_unresolvedIdentifier_inc() async {
+    await assertErrorsInCode(r'''
+void f() {
+  x++;
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_IDENTIFIER, 13, 1),
+    ]);
+
+    final node = findNode.postfix('++;');
+    assertResolvedNodeText(node, r'''
+PostfixExpression
+  operand: SimpleIdentifier
+    token: x
+    staticElement: <null>
+    staticType: null
+  operator: ++
+  readElement: <null>
+  readType: dynamic
+  writeElement: <null>
+  writeType: dynamic
+  staticElement: <null>
+  staticType: dynamic
+''');
+  }
 }
 
 @reflectiveTest
diff --git a/pkg/analyzer/test/src/dart/resolution/prefix_expression_test.dart b/pkg/analyzer/test/src/dart/resolution/prefix_expression_test.dart
index 727fc31..e782ddc 100644
--- a/pkg/analyzer/test/src/dart/resolution/prefix_expression_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/prefix_expression_test.dart
@@ -51,6 +51,68 @@
 ''');
   }
 
+  test_formalParameter_inc_inc() async {
+    await assertErrorsInCode(r'''
+void f(int x) {
+  ++ ++ x;
+}
+''', [
+      error(ParserErrorCode.MISSING_ASSIGNABLE_SELECTOR, 24, 1),
+    ]);
+
+    final node = findNode.prefix('++ ++ x');
+    assertResolvedNodeText(node, r'''
+PrefixExpression
+  operator: ++
+  operand: PrefixExpression
+    operator: ++
+    operand: SimpleIdentifier
+      token: x
+      staticElement: self::@function::f::@parameter::x
+      staticType: null
+    readElement: self::@function::f::@parameter::x
+    readType: int
+    writeElement: self::@function::f::@parameter::x
+    writeType: int
+    staticElement: dart:core::@class::num::@method::+
+    staticType: int
+  readElement: <null>
+  readType: dynamic
+  writeElement: <null>
+  writeType: dynamic
+  staticElement: <null>
+  staticType: dynamic
+''');
+  }
+
+  test_formalParameter_inc_unresolved() async {
+    await assertErrorsInCode(r'''
+class A {}
+
+void f(A a) {
+  ++a;
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_OPERATOR, 28, 2),
+    ]);
+
+    final node = findNode.prefix('++a');
+    assertResolvedNodeText(node, r'''
+PrefixExpression
+  operator: ++
+  operand: SimpleIdentifier
+    token: a
+    staticElement: self::@function::f::@parameter::a
+    staticType: null
+  readElement: self::@function::f::@parameter::a
+  readType: A
+  writeElement: self::@function::f::@parameter::a
+  writeType: A
+  staticElement: <null>
+  staticType: dynamic
+''');
+  }
+
   test_minus_no_nullShorting() async {
     await assertErrorsInCode(r'''
 class A {
@@ -224,6 +286,32 @@
   staticType: int
 ''');
   }
+
+  test_unresolvedIdentifier_inc() async {
+    await assertErrorsInCode(r'''
+void f() {
+  ++x;
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_IDENTIFIER, 15, 1),
+    ]);
+
+    final node = findNode.prefix('++x');
+    assertResolvedNodeText(node, r'''
+PrefixExpression
+  operator: ++
+  operand: SimpleIdentifier
+    token: x
+    staticElement: <null>
+    staticType: null
+  readElement: <null>
+  readType: dynamic
+  writeElement: <null>
+  writeType: dynamic
+  staticElement: <null>
+  staticType: dynamic
+''');
+  }
 }
 
 @reflectiveTest
diff --git a/pkg/analyzer/test/src/dart/resolution/prefixed_identifier_test.dart b/pkg/analyzer/test/src/dart/resolution/prefixed_identifier_test.dart
index 415b7dd..f38c69f 100644
--- a/pkg/analyzer/test/src/dart/resolution/prefixed_identifier_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/prefixed_identifier_test.dart
@@ -176,6 +176,188 @@
     assertType(identifier, 'A?');
   }
 
+  test_importPrefix_class() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+class A {}
+''');
+
+    await assertNoErrorsInCode('''
+import 'a.dart' as prefix;
+
+void f() {
+  prefix.A;
+}
+''');
+
+    final node = findNode.prefixed('prefix.');
+    assertResolvedNodeText(node, r'''
+PrefixedIdentifier
+  prefix: SimpleIdentifier
+    token: prefix
+    staticElement: self::@prefix::prefix
+    staticType: null
+  period: .
+  identifier: SimpleIdentifier
+    token: A
+    staticElement: package:test/a.dart::@class::A
+    staticType: Type
+  staticElement: package:test/a.dart::@class::A
+  staticType: Type
+''');
+  }
+
+  test_importPrefix_functionTypeAlias() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+typedef void F();
+''');
+
+    await assertNoErrorsInCode('''
+import 'a.dart' as prefix;
+
+void f() {
+  prefix.F;
+}
+''');
+
+    final node = findNode.prefixed('prefix.');
+    assertResolvedNodeText(node, r'''
+PrefixedIdentifier
+  prefix: SimpleIdentifier
+    token: prefix
+    staticElement: self::@prefix::prefix
+    staticType: null
+  period: .
+  identifier: SimpleIdentifier
+    token: F
+    staticElement: package:test/a.dart::@typeAlias::F
+    staticType: Type
+  staticElement: package:test/a.dart::@typeAlias::F
+  staticType: Type
+''');
+  }
+
+  test_importPrefix_topLevelFunction() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+void foo() {}
+''');
+
+    await assertNoErrorsInCode('''
+import 'a.dart' as prefix;
+
+void f() {
+  prefix.foo;
+}
+''');
+
+    final node = findNode.prefixed('prefix.');
+    assertResolvedNodeText(node, r'''
+PrefixedIdentifier
+  prefix: SimpleIdentifier
+    token: prefix
+    staticElement: self::@prefix::prefix
+    staticType: null
+  period: .
+  identifier: SimpleIdentifier
+    token: foo
+    staticElement: package:test/a.dart::@function::foo
+    staticType: void Function()
+  staticElement: package:test/a.dart::@function::foo
+  staticType: void Function()
+''');
+  }
+
+  test_importPrefix_topLevelGetter() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+int get foo => 0;
+''');
+
+    await assertNoErrorsInCode('''
+import 'a.dart' as prefix;
+
+void f() {
+  prefix.foo;
+}
+''');
+
+    final node = findNode.prefixed('prefix.');
+    assertResolvedNodeText(node, r'''
+PrefixedIdentifier
+  prefix: SimpleIdentifier
+    token: prefix
+    staticElement: self::@prefix::prefix
+    staticType: null
+  period: .
+  identifier: SimpleIdentifier
+    token: foo
+    staticElement: package:test/a.dart::@getter::foo
+    staticType: int
+  staticElement: package:test/a.dart::@getter::foo
+  staticType: int
+''');
+  }
+
+  test_importPrefix_topLevelSetter() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+set foo(int _) {}
+''');
+
+    await assertErrorsInCode('''
+import 'a.dart' as prefix;
+
+void f() {
+  prefix.foo;
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_PREFIXED_NAME, 48, 3),
+    ]);
+
+    final node = findNode.prefixed('prefix.');
+    assertResolvedNodeText(node, r'''
+PrefixedIdentifier
+  prefix: SimpleIdentifier
+    token: prefix
+    staticElement: self::@prefix::prefix
+    staticType: null
+  period: .
+  identifier: SimpleIdentifier
+    token: foo
+    staticElement: <null>
+    staticType: dynamic
+  staticElement: <null>
+  staticType: dynamic
+''');
+  }
+
+  test_importPrefix_topLevelVariable() async {
+    newFile('$testPackageLibPath/a.dart', r'''
+final foo = 0;
+''');
+
+    await assertNoErrorsInCode('''
+import 'a.dart' as prefix;
+
+void f() {
+  prefix.foo;
+}
+''');
+
+    final node = findNode.prefixed('prefix.');
+    assertResolvedNodeText(node, r'''
+PrefixedIdentifier
+  prefix: SimpleIdentifier
+    token: prefix
+    staticElement: self::@prefix::prefix
+    staticType: null
+  period: .
+  identifier: SimpleIdentifier
+    token: foo
+    staticElement: package:test/a.dart::@getter::foo
+    staticType: int
+  staticElement: package:test/a.dart::@getter::foo
+  staticType: int
+''');
+  }
+
   test_read_typedef_interfaceType() async {
     newFile('$testPackageLibPath/a.dart', r'''
 typedef A = List<int>;
diff --git a/pkg/analyzer/test/src/dart/resolution/property_access_test.dart b/pkg/analyzer/test/src/dart/resolution/property_access_test.dart
index 4a304ae..82e9e49 100644
--- a/pkg/analyzer/test/src/dart/resolution/property_access_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/property_access_test.dart
@@ -39,6 +39,178 @@
     assertType(identifier, 'A?');
   }
 
+  test_inClass_superQualifier_identifier_getter() async {
+    await assertNoErrorsInCode('''
+class A {
+  int get foo => 0;
+}
+
+class B extends A {
+  int get foo => 0;
+
+  void f() {
+    super.foo;
+  }
+}
+''');
+
+    final node = findNode.propertyAccess('foo;');
+    assertResolvedNodeText(node, r'''
+PropertyAccess
+  target: SuperExpression
+    superKeyword: super
+    staticType: B
+  operator: .
+  propertyName: SimpleIdentifier
+    token: foo
+    staticElement: self::@class::A::@getter::foo
+    staticType: int
+  staticType: int
+''');
+  }
+
+  test_inClass_superQualifier_identifier_method() async {
+    await assertNoErrorsInCode('''
+class A {
+  void foo(int _) {}
+}
+
+class B extends A {
+  void foo(int _) {}
+
+  void f() {
+    super.foo;
+  }
+}
+''');
+
+    final node = findNode.propertyAccess('foo;');
+    assertResolvedNodeText(node, r'''
+PropertyAccess
+  target: SuperExpression
+    superKeyword: super
+    staticType: B
+  operator: .
+  propertyName: SimpleIdentifier
+    token: foo
+    staticElement: self::@class::A::@method::foo
+    staticType: void Function(int)
+  staticType: void Function(int)
+''');
+  }
+
+  test_inClass_superQualifier_identifier_setter() async {
+    await assertErrorsInCode('''
+class A {
+  set foo(int _) {}
+}
+
+class B extends A {
+  set foo(int _) {}
+
+  void f() {
+    super.foo;
+  }
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_SUPER_GETTER, 97, 3),
+    ]);
+
+    final node = findNode.propertyAccess('foo;');
+    assertResolvedNodeText(node, r'''
+PropertyAccess
+  target: SuperExpression
+    superKeyword: super
+    staticType: B
+  operator: .
+  propertyName: SimpleIdentifier
+    token: foo
+    staticElement: <null>
+    staticType: dynamic
+  staticType: dynamic
+''');
+  }
+
+  test_inClass_thisExpression_identifier_getter() async {
+    await assertNoErrorsInCode('''
+class A {
+  int get foo => 0;
+
+  void f() {
+    this.foo;
+  }
+}
+''');
+
+    final node = findNode.propertyAccess('foo;');
+    assertResolvedNodeText(node, r'''
+PropertyAccess
+  target: ThisExpression
+    thisKeyword: this
+    staticType: A
+  operator: .
+  propertyName: SimpleIdentifier
+    token: foo
+    staticElement: self::@class::A::@getter::foo
+    staticType: int
+  staticType: int
+''');
+  }
+
+  test_inClass_thisExpression_identifier_method() async {
+    await assertNoErrorsInCode('''
+class A {
+  void foo(int _) {}
+
+  void f() {
+    this.foo;
+  }
+}
+''');
+
+    final node = findNode.propertyAccess('foo;');
+    assertResolvedNodeText(node, r'''
+PropertyAccess
+  target: ThisExpression
+    thisKeyword: this
+    staticType: A
+  operator: .
+  propertyName: SimpleIdentifier
+    token: foo
+    staticElement: self::@class::A::@method::foo
+    staticType: void Function(int)
+  staticType: void Function(int)
+''');
+  }
+
+  test_inClass_thisExpression_identifier_setter() async {
+    await assertErrorsInCode('''
+class A {
+  set foo(int _) {}
+
+  void f() {
+    super.foo;
+  }
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_SUPER_GETTER, 54, 3),
+    ]);
+
+    final node = findNode.propertyAccess('foo;');
+    assertResolvedNodeText(node, r'''
+PropertyAccess
+  target: SuperExpression
+    superKeyword: super
+    staticType: A
+  operator: .
+  propertyName: SimpleIdentifier
+    token: foo
+    staticElement: <null>
+    staticType: dynamic
+  staticType: dynamic
+''');
+  }
+
   test_nullShorting_cascade() async {
     await assertNoErrorsInCode(r'''
 class A {
diff --git a/pkg/analyzer/test/src/dart/resolution/resolution.dart b/pkg/analyzer/test/src/dart/resolution/resolution.dart
index a396c06..02d6583 100644
--- a/pkg/analyzer/test/src/dart/resolution/resolution.dart
+++ b/pkg/analyzer/test/src/dart/resolution/resolution.dart
@@ -453,29 +453,6 @@
     expect(node.staticType, isNull);
   }
 
-  /// TODO(scheglov) Remove [disableElementCheck]
-  void assertUnresolvedPropertyAccess(
-    PropertyAccess node, {
-    bool disableElementCheck = false,
-  }) {
-    if (!disableElementCheck) {
-      assertElementNull(node);
-    }
-    assertTypeNull(node);
-    assertUnresolvedSimpleIdentifier(node.propertyName);
-  }
-
-  /// TODO(scheglov) Remove [disableElementCheck]
-  void assertUnresolvedSimpleIdentifier(
-    SimpleIdentifier node, {
-    bool disableElementCheck = false,
-  }) {
-    if (!disableElementCheck) {
-      assertElementNull(node);
-    }
-    assertTypeNull(node);
-  }
-
   /// TODO(scheglov) Remove `?` from [declaration].
   Matcher elementMatcher(
     Element? declaration, {