blob: ce15283ea224eaf97e5a8684582732715c08a0be [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.
// SharedOptions=--enable-experiment=generic-metadata
// Check that metadata constructor invocations can have type arguments.
@A<int>(0)
library generic_metadata_test;
@A<int>(0)
import "dart:core";
@A<int>(0)
export "dart:core";
// The annotation to use.
class A<T> {
final T value;
const A(this.value);
}
// Annotations on various declarations.
// Library declarations.
@A<int>(0)
const c = 0;
@A<int>(0)
final f = 0;
@A<int>(0)
void mp(@A<int>(0) Object x, [@A<int>(0) int y = 0]) {}
@A<int>(0)
void mn(@A<int>(0) Object x, {@A<int>(0) int y = 0}) {}
@A<int>(0)
int get g => 0;
@A<int>(0)
void set s(@A<int>(0) int x) {}
// Class declaration and members.
@A<int>(0)
class C<@A<int>(0) T> {
final value;
// Constructor and initializing formal.
@A<int>(0)
const C(@A<int>(0) this.value);
@A<int>(0)
C.genRed(@A<int>(0) int x) : this(x);
@A<int>(0)
factory C.fac(@A<int>(0) int x) => C(x);
@A<int>(0)
factory C.facRed(@A<int>(0) int x) = C;
// Instance (virtual) declartions.
@A<int>(0)
final f = 0;
@A<int>(0)
void mp(@A<int>(0) Object x, [@A<int>(0) int y = 0]) {}
@A<int>(0)
void mn(@A<int>(0) Object x, {@A<int>(0) int y = 0}) {}
@A<int>(0)
int get g => 0;
@A<int>(0)
void set s(@A<int>(0) int x) {}
@A<int>(0)
int operator +(@A<int>(0) int x) => x;
// Static declartions.
@A<int>(0)
static const sc = C<int>(0);
@A<int>(0)
static final sf = C<int>(0);
@A<int>(0)
static void smp(@A<int>(0) Object x, [@A<int>(0) int y = 0]) {}
@A<int>(0)
static void smn(@A<int>(0) Object x, {@A<int>(0) int y = 0}) {}
@A<int>(0)
static int get sg => 0;
@A<int>(0)
static void set ss(@A<int>(0) int x) {}
}
@A<int>(0)
abstract class AC<@A<int>(0) T> {
// Instance (virtual) declartions.
@A<int>(0)
abstract final f;
@A<int>(0)
void mp(@A<int>(0) Object x, [@A<int>(0) int y = 0]);
@A<int>(0)
void mn(@A<int>(0) Object x, {@A<int>(0) int y = 0});
@A<int>(0)
int get g;
@A<int>(0)
void set s(@A<int>(0) int x);
@A<int>(0)
int operator +(@A<int>(0) int x);
}
@A<int>(0)
extension E<@A<int>(0) T> on T {
// Instance extension member declartions.
@A<int>(0)
void mp(@A<int>(0) Object x, [@A<int>(0) int y = 0]) {}
@A<int>(0)
void mn(@A<int>(0) Object x, {@A<int>(0) int y = 0}) {}
@A<int>(0)
int get g => 0;
@A<int>(0)
void set s(@A<int>(0) int x) {}
@A<int>(0)
int operator +(@A<int>(0) int x) => x;
// Static declartions.
@A<int>(0)
static const sc = C<int>(0);
@A<int>(0)
static final sf = C<int>(0);
@A<int>(0)
static void smp(@A<int>(0) Object x, [@A<int>(0) int y = 0]) {}
@A<int>(0)
static void smn(@A<int>(0) Object x, {@A<int>(0) int y = 0}) {}
@A<int>(0)
static int get sg => 0;
@A<int>(0)
static void set ss(@A<int>(0) int x) {}
}
@A<int>(0)
mixin M<@A<int>(0) T> {
// Instance member declartions.
@A<int>(0)
final f = 0;
@A<int>(0)
void mp(@A<int>(0) Object x, [@A<int>(0) int y = 0]) {}
@A<int>(0)
void mn(@A<int>(0) Object x, {@A<int>(0) int y = 0}) {}
@A<int>(0)
int get g => 0;
@A<int>(0)
void set s(@A<int>(0) int x) {}
@A<int>(0)
int operator +(@A<int>(0) int x) => x;
// Static declartions.
@A<int>(0)
static const sc = C<int>(0);
@A<int>(0)
static final sf = C<int>(0);
@A<int>(0)
static void smp(@A<int>(0) Object x, [@A<int>(0) int y = 0]) {}
@A<int>(0)
static void smn(@A<int>(0) Object x, {@A<int>(0) int y = 0}) {}
@A<int>(0)
static int get sg => 0;
@A<int>(0)
static void set ss(@A<int>(0) int x) {}
}
@A<int>(0)
enum En {
@A<int>(0)
foo
}
@A<int>(0)
typedef F<@A<int>(0) T> = int Function<@A<int>(0) X>(@A<int>(0) int);
void main() {
// Function body declarations.
@A<int>(0)
const c = 0;
@A<int>(0)
final f = 0;
@A<int>(0)
void mp(@A<int>(0) Object x, [@A<int>(0) int y = 0]) {}
@A<int>(0)
void mn(@A<int>(0) Object x, {@A<int>(0) int y = 0}) {}
@A<int>(0)
void Function<@A<int>(0) X>(@A<int>(0) int y)? fv = null;
// Recursive annotations.
@A<void Function(@A<int>(0) int)?>(null)
var x = 0;
mn(c);
mp(f);
fv?.call(x);
}