anchor.diff:    bool calcChangedState = lifecycleHooks.contains(LifecycleHooks.afterChanges);
     var isOnPushComp = directive.isComponent &&
         directive.changeDetection == ChangeDetectionStrategy.OnPush;
  -  var isStatefulComp = directive.isComponent &&
  -      directive.changeDetection == ChangeDetectionStrategy.Stateful;
  -  var isStatefulDirective = !directive.isComponent &&
  +  var isStateful =
         directive.changeDetection == ChangeDetectionStrategy.Stateful;
   
     if (calcChangesMap) {
  
positive.code:         : null;
      var expression =
          converter.convertToExpression(input.value, input.sourceSpan, inputType);
      if (isStatefulComp) {
        _bindToUpdateMethod(
          view,
          currValExpr,
          fieldExpr,
          expression,
          statements,
          dynamicInputsMethod,
          fieldType: inputType,
        );
      } else {
        _bind(
          view.storage,
          currValExpr,
          fieldExpr,
          expression,
          converter.isImmutable(input.value),
          converter.isNullable(input.value),
          statements,
          dynamicInputsMethod,
          constantInputsMethod,
          fieldType: inputType,
          isHostComponent: isHostComponent,
        );
      }
    }
    if (constantInputsMethod.isNotEmpty) {
      detectChangesInInputsMethod.addStmtsIfFirstCheck(
  
negative.code:           .toStmt());
        continue;
      }
      if (isStateful) {
        var fieldType = o.importType(directive.inputTypes[input.directiveName]);
        var checkExpression = converter.convertToExpression(
            input.value, input.sourceSpan, fieldType);
  