dart-sdk/tests/language/interface/interface_test.dart
Alexander Markov 300a2ea952 [cfe] Create normal bodies for redirecting factories
Replace bogus body created for redirecting factories with a
normal body which calls target factory or constructor and
forwards all arguments. Such a body can be used by back-ends
if they choose to treat redirecting factories as ordinary
factories.

TEST=ci
Fixes https://github.com/dart-lang/sdk/issues/41915
Issue https://github.com/dart-lang/sdk/issues/46231

Change-Id: I62c83bcc9005995e85de049d3d929ca86a75297f
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/208681
Commit-Queue: Alexander Markov <alexmarkov@google.com>
Reviewed-by: Johnni Winther <johnniwinther@google.com>
2021-08-04 17:51:07 +00:00

47 lines
1 KiB
Dart

// Copyright (c) 2012, 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 test program for testing Interfaces.
abstract class Ai {
int foo();
}
abstract class Bi implements Ai {
factory Bi() = InterfaceTest;
// ^
// [cfe] Factory redirects to class 'InterfaceTest', which is abstract and can't be instantiated.
// ^^^^^^^^^^^^^
// [analyzer] COMPILE_TIME_ERROR.REDIRECT_TO_ABSTRACT_CLASS_CONSTRUCTOR
}
abstract class Simple implements Ai {}
abstract class Aai {}
abstract class Abi {}
abstract class Bar {}
abstract class Foo implements Bar {}
abstract class Baz implements Bar, Foo {}
abstract class InterfaceTest implements Ai, Aai, Abi, Baz, Bi {
var f;
InterfaceTest() {}
int foo() {
return 1;
}
// intentionally unimplemented methods
beta(); // Abstract.
String beta1(); // Abstract.
String beta2(double d); // Abstract.
}
main() {
new Bi();
}