// Copyright (c) 2017, 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.

// test w/ `dart test -N use_string_buffer`

class A {
  String buffer;

  void foo(int n) {
    int aux = n;
    while (aux-- > 0) {
      buffer += 'a'; // LINT
    }
  }

  void bar(int count) {
    int auxCount = count;
    while (auxCount-- > 0) {
      buffer += baz(); // LINT
    }
  }

  String baz() {
    buffer = buffer + buffer;
    return buffer;
  }
}

void badStringInterpolation() {
  String buffer = '';
  for (int i = 0; i < 10; i++) {
    buffer = '${buffer}a'; // LINT
  }
}

void goodStringInterpolation() {
  String buffer = '';
  for (int i = 0; i < 10; i++) {
    buffer = 'a$buffer'; // OK
  }

}

void foo() {
  String buffer = '';
  for (int i = 0; i < 10; i++) {
    buffer += 'a'; // LINT
  }
}

void foo2() {
  String buffer = '';
  for (int i = 0; i < 10; i++) {
    buffer = '${buffer + 'a'}a'; // LINT
  }
}

void foo3() {
  String buffer = '';
  for (int i = 0; i < 10; i++) {
    buffer = buffer + 'a'; // LINT
  }
}

void bar() {
  String buffer = '';
  while (buffer.length < 10) {
    buffer += 'a'; // LINT
  }
}

void bar2() {
  String buffer = '';
  do {
    buffer += 'a'; // LINT
  } while (buffer.length < 10);
}

void bar3() {
  String buffer = '';
  for (final s in [ 'a', 'b']) {
    buffer += s; // LINT
  }
}

void bar4() {
  String buffer = '';
  for (final s in [ 'a', 'b']) {
    (buffer += s); // LINT
  }
}

void bar5() {
  for (final s in [ 'a', 'b']) {
    String str;
    str += s; // OK
  }
}

class B {
  operator +(B other) => this;

  B m1() {
    B b = new B();
    for (int i = 0; i < 10; i++) {
      b = b + this; // OK
    }
    return b;
  }

  B m2() {
    B b = new B();
    for (int i = 0; i < 10; i++) {
      b += this; // OK
    }
    return b;
  }
}
