// Copyright (c) 2013, 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. library test.generic_mixin; import 'dart:mirrors'; import 'package:expect/expect.dart'; import 'generics_helper.dart'; class Super {} class Mixin {} class Nixim {} class NonGenericMixinApplication1 = Super with Mixin; class NonGenericMixinApplication2 = Super with Mixin; class GenericMixinApplication1 = Super with Mixin; class GenericMixinApplication2 = Super with Mixin; class NonGenericClass1 extends Super with Mixin {} class NonGenericClass2 extends Super with Mixin {} class GenericClass1 extends Super with Mixin {} class GenericClass2 extends Super with Mixin {} class GenericMultipleMixins extends Super with Mixin, Nixim {} main() { TypeMirror dynamicMirror = currentMirrorSystem().dynamicType; typeParameters(reflectClass(NonGenericMixinApplication1).mixin, [#M]); typeParameters(reflectClass(NonGenericMixinApplication2).mixin, [#M]); typeParameters(reflectClass(GenericMixinApplication1).mixin, [#M]); typeParameters(reflectClass(GenericMixinApplication2).mixin, [#M]); typeParameters(reflectClass(NonGenericClass1).mixin, []); typeParameters(reflectClass(NonGenericClass2).mixin, []); typeParameters(reflectClass(GenericClass1).mixin, [#C]); typeParameters(reflectClass(GenericClass2).mixin, [#C]); typeParameters(reflectClass(NonGenericClass1).superclass!.mixin, [#M]); typeParameters(reflectClass(NonGenericClass2).superclass!.mixin, [#M]); typeParameters(reflectClass(GenericClass1).superclass!.mixin, [#M]); typeParameters(reflectClass(GenericClass2).superclass!.mixin, [#M]); typeParameters(reflectClass(GenericMultipleMixins).mixin, [#A, #B, #C]); typeParameters(reflectClass(GenericMultipleMixins).superclass!.mixin, [#N]); typeParameters( reflectClass(GenericMultipleMixins).superclass!.superclass!.mixin, [#M]); typeParameters( reflectClass(GenericMultipleMixins) .superclass! .superclass! .superclass! .mixin, [#S]); typeArguments( reflectClass(NonGenericMixinApplication1).mixin, [dynamicMirror]); typeArguments( reflectClass(NonGenericMixinApplication2).mixin, [reflectClass(String)]); typeArguments(reflectClass(GenericMixinApplication1).mixin, [reflectClass(GenericMixinApplication1).typeVariables.single]); typeArguments( reflectClass(GenericMixinApplication2).mixin, [reflectClass(String)]); typeArguments(reflectClass(NonGenericClass1).mixin, []); typeArguments(reflectClass(NonGenericClass2).mixin, []); typeArguments(reflectClass(GenericClass1).mixin, []); typeArguments(reflectClass(GenericClass2).mixin, []); typeArguments( reflectClass(NonGenericClass1).superclass!.mixin, [dynamicMirror]); typeArguments( reflectClass(NonGenericClass2).superclass!.mixin, [reflectClass(String)]); typeArguments(reflectClass(GenericClass1).superclass!.mixin, [reflectClass(GenericClass1).typeVariables.single]); typeArguments( reflectClass(GenericClass2).superclass!.mixin, [reflectClass(String)]); typeArguments(reflectClass(GenericMultipleMixins).mixin, []); typeArguments(reflectClass(GenericMultipleMixins).superclass!.mixin, [reflectClass(GenericMultipleMixins).typeVariables[2]]); typeArguments( reflectClass(GenericMultipleMixins).superclass!.superclass!.mixin, [reflectClass(GenericMultipleMixins).typeVariables[1]]); typeArguments( reflectClass(GenericMultipleMixins) .superclass! .superclass! .superclass! .mixin, [reflectClass(GenericMultipleMixins).typeVariables[0]]); typeParameters(reflect(new NonGenericMixinApplication1()).type.mixin, [#M]); typeParameters(reflect(new NonGenericMixinApplication2()).type.mixin, [#M]); typeParameters( reflect(new GenericMixinApplication1()).type.mixin, [#M]); typeParameters( reflect(new GenericMixinApplication2()).type.mixin, [#M]); typeParameters(reflect(new NonGenericClass1()).type.mixin, []); typeParameters(reflect(new NonGenericClass2()).type.mixin, []); typeParameters(reflect(new GenericClass1()).type.mixin, [#C]); typeParameters(reflect(new GenericClass2()).type.mixin, [#C]); typeParameters(reflect(new NonGenericClass1()).type.superclass!.mixin, [#M]); typeParameters(reflect(new NonGenericClass2()).type.superclass!.mixin, [#M]); typeParameters( reflect(new GenericClass1()).type.superclass!.mixin, [#M]); typeParameters( reflect(new GenericClass2()).type.superclass!.mixin, [#M]); typeParameters( reflect(new GenericMultipleMixins()).type.mixin, [#A, #B, #C]); typeParameters( reflect(new GenericMultipleMixins()) .type .superclass! .mixin, [#N]); typeParameters( reflect(new GenericMultipleMixins()) .type .superclass! .superclass! .mixin, [#M]); typeParameters( reflect(new GenericMultipleMixins()) .type .superclass! .superclass! .superclass! .mixin, [#S]); typeArguments( reflect(new NonGenericMixinApplication1()).type.mixin, [dynamicMirror]); typeArguments(reflect(new NonGenericMixinApplication2()).type.mixin, [reflectClass(String)]); typeArguments(reflect(new GenericMixinApplication1()).type.mixin, [reflectClass(bool)]); typeArguments(reflect(new GenericMixinApplication2()).type.mixin, [reflectClass(String)]); typeArguments(reflect(new NonGenericClass1()).type.mixin, []); typeArguments(reflect(new NonGenericClass2()).type.mixin, []); typeArguments( reflect(new GenericClass1()).type.mixin, [reflectClass(bool)]); typeArguments( reflect(new GenericClass2()).type.mixin, [reflectClass(bool)]); typeArguments( reflect(new NonGenericClass1()).type.superclass!.mixin, [dynamicMirror]); typeArguments(reflect(new NonGenericClass2()).type.superclass!.mixin, [reflectClass(String)]); typeArguments(reflect(new GenericClass1()).type.superclass!.mixin, [reflectClass(bool)]); typeArguments(reflect(new GenericClass2()).type.superclass!.mixin, [reflectClass(String)]); typeArguments( reflect(new GenericMultipleMixins()).type.mixin, [reflectClass(bool), reflectClass(String), reflectClass(int)]); typeArguments( reflect(new GenericMultipleMixins()) .type .superclass! .mixin, [reflectClass(int)]); typeArguments( reflect(new GenericMultipleMixins()) .type .superclass! .superclass! .mixin, [reflectClass(String)]); typeArguments( reflect(new GenericMultipleMixins()) .type .superclass! .superclass! .superclass! .mixin, [reflectClass(bool)]); }