blob: 5def9194c3b24a0dbcfca975e9fc196b36e94784 [file] [log] [blame]
// Copyright (c) 2021, 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 prefer_final_parameters`
void badRequiredPositional(String label) { // LINT
print(label);
}
void goodRequiredPositional(final String label) { // OK
print(label);
}
void badOptionalPosition([String? label]) { // LINT
print(label);
}
void goodOptionalPosition([final String? label]) { // OK
print(label);
}
void badRequiredNamed({required String label}) { // LINT
print(label);
}
void goodRequiredNamed({required final String label}) { // OK
print(label);
}
void badOptionalNamed({String? label}) { // LINT
print(label);
}
void goodOptionalNamed({final String? label}) { // OK
print(label);
}
void badExpression(int value) => print(value); // LINT
void goodExpression(final int value) => print(value); // OK
bool? _testingVariable;
void set badSet(bool setting) => _testingVariable = setting; // LINT
void set goodSet(final bool setting) => _testingVariable = setting; // OK
var badClosure = (Object random) { // LINT
print(random);
};
var goodClosure = (final Object random) { // OK
print(random);
};
var _testingList = [1, 7, 15, 20];
void useBadClosureArgument() {
_testingList.forEach((element) => print(element + 4)); // LINT
}
void useGoodClosureArgument() {
_testingList.forEach((final element) => print(element + 4)); // OK
}
void useGoodTypedClosureArgument() {
_testingList.forEach((final int element) => print(element + 4)); // OK
}
void badMixedLast(String bad, final String good) { // LINT
print(bad);
print(good);
}
void badMixedFirst(final String goodFirst, String badSecond) { // LINT
print(goodFirst);
print(badSecond);
}
// LINT [+1]
void badMixedMiddle(String badFirst, final String goodSecond, String badThird) { // LINT
print(badFirst);
print(goodSecond);
print(badThird);
}
void goodMultiple(final String bad, final String good) { // OK
print(bad);
print(good);
}
void mutableCase(String label) { // OK
print(label);
label = 'Lint away!';
print(label);
}
void mutableExpression(int value) => value = 3; // OK
class C {
String value = '';
int _contents = 0;
C(String content) { // LINT
_contents = content.length;
}
C.bad(int contents): _contents = contents; // LINT
C.good(final int contents): _contents = contents; // OK
C.badValue(String value): this.value = value; // LINT
C.goodValue(this.value); // OK
factory C.goodFactory(final String value) { // OK
return C(value);
}
factory C.badFactory(String value) { // LINT
return C(value);
}
void set badContents(int contents) => _contents = contents; // LINT
void set goodContents(final int contents) => _contents = contents; // OK
int get contentValue => _contents + 4; // OK
void badMethod(String bad) { // LINT
print(bad);
}
void goodMethod(final String good) { // OK
print(good);
}
@override
C operator +(C other) { // LINT
return C.good(contentValue + other.contentValue);
}
@override
C operator -(final C other) { // OK
return C.good(contentValue + other.contentValue);
}
}