// Copyright (c) 2015, 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

// Verify that instance creation expressions inside function
// annotations are properly handled.  See dartbug.com/23354

import 'dart:mirrors';
import 'package:expect/expect.dart';

class C {
  final String s;
  const C(this.s);
}

class D {
  final C c;
  const D(this.c);
}

@D(const C('foo'))
f() {}

main() {
  ClosureMirror closureMirror = reflect(f) as ClosureMirror;
  List<InstanceMirror> metadata = closureMirror.function.metadata;
  Expect.equals(1, metadata.length);
  Expect.equals(metadata[0].reflectee.c.s, 'foo');
}
