anchor.diff:  /// [CompilationUnit].
   class DartUnitSignatureComputer {
     final DartdocDirectiveInfo _dartdocInfo;
  -  final AstNode _node;
  -  ArgumentList _argumentList;
  +  final AstNode? _node;
  +  late ArgumentList _argumentList;
     DartUnitSignatureComputer(
         this._dartdocInfo, CompilationUnit _unit, int _offset)
         : _node = NodeLocator(_offset).searchWithin(_unit);
  
positive.code: // Copyright (c) 2018, 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.
  
  // @dart = 2.9
  
  import 'package:analysis_server/src/computer/computer_hover.dart';
  import 'package:analysis_server/src/protocol_server.dart';
  
negative.code: 
    bool get offsetIsValid => _node != null;
  
    // Return the closest argument list surrounding the [_node].
    /// Returns the computed signature information, maybe `null`.
    AnalysisGetSignatureResult? compute() {
      var argumentList = _findArgumentList();
      if (argumentList == null) {
        return null;
      }
      String? name;
      ExecutableElement? execElement;
      final parent = argumentList.parent;
      if (parent is MethodInvocation) {
        name = parent.methodName.name;
        var element = ElementLocator.locate(parent);
        execElement = element is ExecutableElement ? element : null;
      } else if (parent is InstanceCreationExpression) {
        name = parent.constructorName.type.name.name;
        var constructorName = parent.constructorName.name;
        if (constructorName != null) {
          name += '.${constructorName.name}';
        }
        execElement = ElementLocator.locate(parent) as ExecutableElement;
      }
  
      if (name == null || execElement == null) {
        return null;
      }
  
      _argumentList = argumentList;
  
      final parameters =
          execElement.parameters.map((p) => _convertParam(p)).toList();
  