// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

part of dart.core;

@deprecated
abstract class Strings {
  /**
   * Joins all the given strings to create a new string.
   *
   * *Deprecated* Use `strings.join(separator)` instead.
   */
  @deprecated
  external static String join(Iterable<String> strings, String separator);

  /**
   * Concatenates all the given strings to create a new string.
   *
   * *Deprecated* Use `strings.join()` instead.
   */
  @deprecated
  external static String concatAll(Iterable<String> strings);
}
