blob: 42b228db379f0f486a59cdb32064449be7eb9011 [file] [log] [blame]
// Copyright (c) 2020, 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.
// @dart=2.9
abstract class A {
int get property1; // ok
void set property1(int i);
num get property2a; // ok
void set property2a(int i);
int get property2b; // ok
void set property2b(num i);
String get property3; // error
void set property3(int i);
int property4; // ok
int property5; // ok
covariant String property6; // ok
static int get property7 => 0; // ok
static void set property7(int value) {}
static int get property8a => 0; // ok
static void set property8a(num value) {}
static num get property8b => 0; // ok
static void set property8b(int value) {}
static num get property9 => 0; // error
static void set property9(String value) {}
}
abstract class B1 {
int get property1;
int get property2;
String get property3;
final int property4;
final int property5;
final String property6;
B1(this.property4, this.property5, this.property6);
}
abstract class B2 implements B1 {
void set property1(int i); // ok
void set property2(String i); // error
void set property3(int i); // error
void set property4(int i); // ok
void set property5(String i); // error
void set property6(int i); // error
}
abstract class C1 {
void set property1(int i);
void set property2(String i);
void set property3(int i);
int property4;
String property5;
int property6;
}
abstract class C2 implements C1 {
int get property1; // ok
int get property2; // error
String get property3; // error
int get property4; // ok
// This results in two errors; one for the getter/setter type mismatch and one
// for the getter override.
int get property5; // error
// This results in two errors; one for the getter/setter type mismatch and one
// for the getter override.
String get property6; // error
}
abstract class D1 {
int get property1;
int get property2;
String get property3;
}
abstract class D2 {
void set property1(int i);
void set property2(String i);
void set property3(int i);
}
abstract class D3 implements D1, D2 /* error on property2 and property3 */ {}
abstract class D4
implements D3 /* no need for error on property2 and property3 */ {}
extension Extension<T extends num, S extends T> on int {
int get property1 => 0; // ok
void set property1(int i) {}
num get property2a => 0; // ok
void set property2a(int i) {}
int get property2b => 0; // ok
void set property2b(num i) {}
String get property3 => ''; // error
void set property3(int i) {}
S get property4 => 0; // ok
void set property4(S i) {}
S get property5a => 0; // ok
void set property5a(T i) {}
T get property5b => 0; // ok
void set property5b(S i) {}
String get property6 => ''; // error
void set property6(S i) {}
static int get property7 => 0; // ok
static void set property7(int value) {}
static int get property8a => 0; // ok
static void set property8a(num value) {}
static num get property8b => 0; // ok
static void set property8b(int value) {}
static num get property9 => 0; // error
static void set property9(String value) {}
}
main() {}