anchor.diff:      }
       if (nonPromotionHistory != null) {
         parts.add('nonPromotionHistory: $nonPromotionHistory');
  +    }
  +    if (properties.isNotEmpty) {
  +      parts.add('properties: $properties');
       }
       return 'VariableModel(${parts.join(', ')})';
     }
  
positive.code:       _wrapped._dumpState();
      }
      if (isQuery) {
        print('  => $result');
      }
      return result;
    }
  }
  
  
negative.code: 
    @override
    void _dumpState() => _wrapped._dumpState();
  
    /// Wraps [callback] so that when it is called, the call (and its return
    /// value) will be printed to the console.  Also registers the wrapped
    /// callback in [_description] so that it will be given a unique identifier
    /// when printed to the console.
    Map<Type, NonPromotionReason> Function() _trackWhyNotPromoted(
        Map<Type, NonPromotionReason> Function() callback) {
      String callbackToString = '#CALLBACK${_nextCallbackId++}';
      Map<Type, NonPromotionReason> Function() wrappedCallback =
          () => _wrap('$callbackToString()', callback, isQuery: true);
      _description[wrappedCallback] = callbackToString;
      return wrappedCallback;
    }
  
    T _wrap<T>(String description, T callback(),
        {bool isQuery: false, bool? isPure}) {
  