mirror of
https://github.com/dart-lang/sdk
synced 2024-09-16 04:37:12 +00:00
b3af778a38
- including tests for issues 46719 and 46887 Change-Id: I601fcfcb956e059f502cbece29fb2a6a00f68846 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/210464 Commit-Queue: Johnni Winther <johnniwinther@google.com> Reviewed-by: Dmitry Stefantsov <dmitryas@google.com>
99 lines
3.5 KiB
Dart
99 lines
3.5 KiB
Dart
// Copyright (c) 2014, 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.
|
|
|
|
// Regression test for issue 13134. Invocation of a type parameter.
|
|
|
|
import "package:expect/expect.dart";
|
|
|
|
class C<T> {
|
|
noSuchMethod(Invocation im) {
|
|
throw "noSuchMethod shouldn't be called in this test.";
|
|
}
|
|
|
|
// This is equivalent to (T).call(). See issue 19725
|
|
foo() => T();
|
|
// ^
|
|
// [analyzer] COMPILE_TIME_ERROR.INVOCATION_OF_NON_FUNCTION
|
|
// [cfe] Couldn't find constructor 'T'.
|
|
|
|
// T is in scope, even in static context. Compile-time error to call this.T().
|
|
static bar() => T();
|
|
// ^
|
|
// [analyzer] COMPILE_TIME_ERROR.INVOCATION_OF_NON_FUNCTION
|
|
// [analyzer] COMPILE_TIME_ERROR.TYPE_PARAMETER_REFERENCED_BY_STATIC
|
|
// [cfe] Couldn't find constructor 'T'.
|
|
|
|
// X is not in scope. NoSuchMethodError.
|
|
static baz() => X();
|
|
// ^
|
|
// [analyzer] COMPILE_TIME_ERROR.UNDEFINED_METHOD
|
|
// [cfe] Method not found: 'X'.
|
|
|
|
// Class 'C' has no static method 'T': NoSuchMethodError.
|
|
static qux() => C.T();
|
|
// ^
|
|
// [analyzer] COMPILE_TIME_ERROR.UNDEFINED_METHOD
|
|
// [cfe] Member not found: 'C.T'.
|
|
|
|
// Class '_Type' has no instance method 'call': NoSuchMethodError.
|
|
quux() => (T)();
|
|
// ^^^
|
|
// [analyzer] COMPILE_TIME_ERROR.INVOCATION_OF_NON_FUNCTION_EXPRESSION
|
|
// ^
|
|
// [cfe] The method 'call' isn't defined for the class 'Type'.
|
|
|
|
// Runtime type T not accessible from static context. Compile-time error.
|
|
static corge() => (T)();
|
|
// ^^^
|
|
// [analyzer] COMPILE_TIME_ERROR.INVOCATION_OF_NON_FUNCTION_EXPRESSION
|
|
// ^
|
|
// [analyzer] COMPILE_TIME_ERROR.TYPE_PARAMETER_REFERENCED_BY_STATIC
|
|
// [cfe] Type variables can't be used in static members.
|
|
// ^
|
|
// [cfe] The method 'call' isn't defined for the class 'Type'.
|
|
|
|
// Class '_Type' has no [] operator: NoSuchMethodError.
|
|
grault() => T[0];
|
|
// ^^^
|
|
// [analyzer] COMPILE_TIME_ERROR.UNDEFINED_OPERATOR
|
|
// [cfe] The operator '[]' isn't defined for the class 'Type'.
|
|
|
|
// Runtime type T not accessible from static context. Compile-time error.
|
|
static garply() => T[0];
|
|
// ^
|
|
// [analyzer] COMPILE_TIME_ERROR.TYPE_PARAMETER_REFERENCED_BY_STATIC
|
|
// [cfe] Type variables can't be used in static members.
|
|
// ^^^
|
|
// [analyzer] COMPILE_TIME_ERROR.UNDEFINED_OPERATOR
|
|
// [cfe] The operator '[]' isn't defined for the class 'Type'.
|
|
|
|
// Class '_Type' has no member m: NoSuchMethodError.
|
|
waldo() => T.m;
|
|
// ^
|
|
// [analyzer] COMPILE_TIME_ERROR.UNDEFINED_GETTER
|
|
// [cfe] The getter 'm' isn't defined for the class 'Type'.
|
|
|
|
// Runtime type T not accessible from static context. Compile-time error.
|
|
static fred() => T.m;
|
|
// ^
|
|
// [analyzer] COMPILE_TIME_ERROR.TYPE_PARAMETER_REFERENCED_BY_STATIC
|
|
// [cfe] Type variables can't be used in static members.
|
|
// ^
|
|
// [analyzer] COMPILE_TIME_ERROR.UNDEFINED_GETTER
|
|
// [cfe] The getter 'm' isn't defined for the class 'Type'.
|
|
}
|
|
|
|
main() {
|
|
Expect.throwsNoSuchMethodError(() => new C().foo());
|
|
C.bar();
|
|
Expect.throwsNoSuchMethodError(() => C.baz());
|
|
Expect.throwsNoSuchMethodError(() => C.qux());
|
|
Expect.throwsNoSuchMethodError(() => new C().quux());
|
|
C.corge();
|
|
Expect.throwsNoSuchMethodError(() => new C().grault());
|
|
C.garply();
|
|
Expect.throwsNoSuchMethodError(() => new C().waldo());
|
|
C.fred();
|
|
}
|