@NotNull
  List<PreContract> inferContracts(List<LighterASTNode> statements) {
    if (statements.isEmpty()) return emptyList();

    if (statements.size() == 1) {
      List<PreContract> result = handleSingleStatement(statements.get(0));
      if (result != null) return result;
    }

    List<PreContract> contracts =
      visitStatements(singletonList(StandardMethodContract.createConstraintArray(getParameters().size())), statements);
    if (contracts.isEmpty()) {
      ContractReturnValue value = getDefaultReturnValue(statements);
      if (!value.isFail() && !value.equals(returnAny())) {
        contracts = singletonList(
          new KnownContract(StandardMethodContract.trivialContract(getParameters().size(), value)));
      }
    }
    return contracts;
  }
@NotNull
  List<PreContract> inferContracts(List<LighterASTNode> statements)