// These 10 should be OK. @abstract @foo.abstract @foo.bar.abstract @foo("hello") @foo.abstract("hello") @foo.bar.abstract("hello") @foo("hello") @foo.abstract("hello") @foo.bar("hello") @foo.bar.abstract("hello") class X {} // They should also be OK in various places for instance: typedef F<@abstract T> = int Function<@abstract X>(@abstract int); typedef F<@foo.abstract T> = int Function<@foo.abstract X>(@foo.abstract int); typedef F<@foo.bar.abstract T> = int Function<@foo.bar.abstract X>(@foo.bar.abstract int); typedef F<@foo("hello") T> = int Function<@foo("hello") X>(@foo("hello") int); typedef F<@foo.abstract("hello") T> = int Function<@foo.abstract("hello") X>(@foo.abstract("hello") int); typedef F<@foo.bar.abstract("hello") T> = int Function<@foo.bar.abstract("hello") X>(@foo.bar.abstract("hello") int); typedef F<@foo("hello") T> = int Function<@foo("hello") X>(@foo("hello") int); typedef F<@foo.abstract("hello") T> = int Function<@foo.abstract("hello") X>(@foo.abstract("hello") int); typedef F<@foo.bar("hello") T> = int Function<@foo.bar("hello") X>(@foo.bar("hello") int); typedef F<@foo.bar.abstract("hello") T> = int Function<@foo.bar.abstract("hello") X>(@foo.bar.abstract("hello") int); // These 9 should fail because they start with a built in which is an // identifier but not a typeIdentifier. // We don't necessarily expect that parser to give the error though, the further // pipeline will give an error because there's no class, variable etc with that // name. @abstract.abstract @abstract.bar.abstract @abstract("hello") @abstract.abstract("hello") @abstract.bar.abstract("hello") @abstract("hello") @abstract.abstract("hello") @abstract.bar("hello") @abstract.bar.abstract("hello") class Y {}