// compile options: --closure-experimental --destructure-named-params --modules=es6
library test;
import 'dart:js';

List/*<T>*/ generic_function/*<T>*/(List/*<T>*/ items, dynamic/*=T*/ seed) {
  var strings = items.map((i) => "$i").toList();
  return items;
}

typedef void Callback({int i});

class Foo<T> {
  final int i;
  bool b;
  String s;
  T v;

  Foo(this.i, this.v);

  factory Foo.build() => new Foo(1, null);

  untyped_method(a, b) {}

  T pass(T t) => t;

  String typed_method(
      Foo foo, List list,
      int i, num n, double d, bool b, String s,
      JsArray a, JsObject o, JsFunction f) {
    return '';
  }

  optional_params(a, [b, int c]) {}

  static named_params(a, {b, int c}) {}

  nullary_method() {}

  function_params(int f(x, [y]), g(x, {String y, z}), Callback cb) {
    cb(i: i);
  }

  run(List a, String b, List c(String d), List<int> e(f(g)), {Map<Map, Map> h}) {}

  String get prop => null;
  set prop(String value) {}

  static String get staticProp => null;
  static set staticProp(String value) {}

  static const String some_static_constant = "abc";
  static final String some_static_final = "abc";
  static String some_static_var = "abc";
}

class Bar {}

class Baz extends Foo<int> with Bar {
  Baz(int i) : super(i, 123);
}

void main(args) {}

var closure = () { return; };

const String some_top_level_constant = "abc";
final String some_top_level_final = "abc";
String some_top_level_var = "abc";
