@Override
  default void beforePush(@NotNull DfaValue @NotNull [] args,
                          @NotNull DfaValue value,
                          @NotNull DfaAnchor anchor,
                          @NotNull DfaMemoryState state) {
    if (!(anchor instanceof JavaDfaAnchor)) {
      throw new IllegalStateException("Java anchor expected, got: " + anchor + "(" + anchor.getClass() + ")");
    }
    if (anchor instanceof JavaEndOfInstanceInitializerAnchor) {
      beforeInstanceInitializerEnd(state);
      return;
    }
    if (anchor instanceof JavaMethodReferenceReturnAnchor) {
      beforeValueReturn(value, null, ((JavaMethodReferenceReturnAnchor)anchor).getMethodReferenceExpression(), state);
      return;
    }
    if (anchor instanceof JavaExpressionAnchor) {
      PsiExpression psiAnchor = ((JavaExpressionAnchor)anchor).getExpression();
      callBeforeExpressionPush(value, psiAnchor, state, psiAnchor);
    }
    if (anchor instanceof JavaMethodReferenceArgumentAnchor) {
      beforeMethodReferenceArgumentPush(value, ((JavaMethodReferenceArgumentAnchor)anchor).getMethodReference(), state);
    }
  }
@Override
  default void beforePush(@NotNull DfaValue @NotNull [] args,
                          @NotNull DfaValue value,
                          @NotNull DfaAnchor anchor,
                          @NotNull DfaMemoryState state)