anchor.diff:        TypeSystem typeSystem, AstNode node, bool retainDataForTesting) {
       return FlowAnalysisHelper._(
           const AnalyzerNodeOperations(),
  -        _TypeSystemTypeOperations(typeSystem),
  +        TypeSystemTypeOperations(typeSystem),
           computeAssignedVariables(node),
           retainDataForTesting ? FlowAnalysisResult() : null);
     }
  
positive.code:     return promotedType ?? variable.type;
    }
  }
  
  class _TypeSystemTypeOperations
      implements TypeOperations<VariableElement, DartType> {
    final TypeSystem typeSystem;
  
    _TypeSystemTypeOperations(this.typeSystem);
  
    @override
    bool isLocalVariable(VariableElement element) {
      return element is LocalVariableElement;
    }
  
    @override
    bool isSameType(covariant TypeImpl type1, covariant TypeImpl type2) {
      return type1 == type2;
    }
  
    @override
    bool isSubtypeOf(DartType leftType, DartType rightType) {
      return typeSystem.isSubtypeOf(leftType, rightType);
    }
  
    @override
    DartType promoteToNonNull(DartType type) {
      return typeSystem.promoteToNonNull(type);
    }
  
    @override
    DartType variableType(VariableElement variable) {
      return variable.type;
    }
  }
  
negative.code:   final List<AstNode> unassignedNodes = [];
  }
  
  class TypeSystemTypeOperations
      implements TypeOperations<VariableElement, DartType> {
    final TypeSystem typeSystem;
  
    TypeSystemTypeOperations(this.typeSystem);
  
    @override
    bool isLocalVariable(VariableElement element) {
      return element is LocalVariableElement;
    }
  
    @override
    bool isSameType(covariant TypeImpl type1, covariant TypeImpl type2) {
      return type1 == type2;
    }
  
    @override
    bool isSubtypeOf(DartType leftType, DartType rightType) {
      return typeSystem.isSubtypeOf(leftType, rightType);
    }
  
    @override
    DartType promoteToNonNull(DartType type) {
      return typeSystem.promoteToNonNull(type);
    }
  
    @override
    DartType variableType(VariableElement variable) {
      return variable.type;
    }
  }
  
  /// The visitor that gathers local variables that are potentially assigned
  /// in corresponding statements, such as loops, `switch` and `try`.
  class _AssignedVariablesVisitor extends RecursiveAstVisitor<void> {
  