package org.checkerframework.common.initializedfields;

import org.checkerframework.common.accumulation.AccumulationTransfer;
import org.checkerframework.dataflow.analysis.TransferInput;
import org.checkerframework.dataflow.analysis.TransferResult;
import org.checkerframework.dataflow.cfg.node.AssignmentNode;
import org.checkerframework.dataflow.cfg.node.FieldAccessNode;
import org.checkerframework.dataflow.cfg.node.Node;
import org.checkerframework.framework.flow.CFAnalysis;
import org.checkerframework.framework.flow.CFStore;
import org.checkerframework.framework.flow.CFValue;

/** Accumulates the names of fields that are initialized. */
public class InitializedFieldsTransfer extends AccumulationTransfer {

  /**
   * Create an InitializedFieldsTransfer.
   *
   * @param analysis the analysis
   */
  public InitializedFieldsTransfer(final CFAnalysis analysis) {
    super(analysis);
  }

  @Override
  public TransferResult<CFValue, CFStore> visitAssignment(
      final AssignmentNode node, final TransferInput<CFValue, CFStore> input) {
    TransferResult<CFValue, CFStore> result = super.visitAssignment(node, input);
    Node lhs = node.getTarget();
    if (lhs instanceof FieldAccessNode) {
      FieldAccessNode fieldAccess = (FieldAccessNode) lhs;
      accumulate(fieldAccess.getReceiver(), result, fieldAccess.getFieldName());
    }
    return result;
  }
}
