main() {
dynamic foo = new X();
var bar = foo.required;
required();
bar();
new X().required();
new Y().required;
}

required({required int named}) {
print("hello");
}

class X {
required() {
print("hello");
}
}

class Y {
int required = 42;
}


main[StringToken]([BeginToken])[SimpleToken] {[BeginToken]
dynamic[KeywordToken] foo[StringToken] =[SimpleToken] new[KeywordToken] X[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
var[KeywordToken] bar[StringToken] =[SimpleToken] foo[StringToken].[SimpleToken]required[KeywordToken];[SimpleToken]
required[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
bar[StringToken]([BeginToken])[SimpleToken];[SimpleToken]
new[KeywordToken] X[StringToken]([BeginToken])[SimpleToken].[SimpleToken]required[KeywordToken]([BeginToken])[SimpleToken];[SimpleToken]
new[KeywordToken] Y[StringToken]([BeginToken])[SimpleToken].[SimpleToken]required[KeywordToken];[SimpleToken]
}[SimpleToken]

required[KeywordToken]([BeginToken]{[BeginToken]required[KeywordToken] int[StringToken] named[StringToken]}[SimpleToken])[SimpleToken] {[BeginToken]
print[StringToken]([BeginToken]"hello"[StringToken])[SimpleToken];[SimpleToken]
}[SimpleToken]

class[KeywordToken] X[StringToken] {[BeginToken]
required[KeywordToken]([BeginToken])[SimpleToken] {[BeginToken]
print[StringToken]([BeginToken]"hello"[StringToken])[SimpleToken];[SimpleToken]
}[SimpleToken]
}[SimpleToken]

class[KeywordToken] Y[StringToken] {[BeginToken]
int[StringToken] required[KeywordToken] =[SimpleToken] 42[StringToken];[SimpleToken]
}[SimpleToken]
[SimpleToken]
