// 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. import 'dart:mirrors'; import 'package:expect/expect.dart'; class A {} class B extends A implements C { A m(A a) {} A field; } class C {} class D extends A {} main() { ClassMirror aDecl = reflectClass(A); ClassMirror bDecl = reflectClass(B); ClassMirror cDecl = reflectClass(C); TypeMirror aInstance = reflect(new A()).type; TypeMirror aInstanceDynamic = reflect(new A()).type; TypeMirror dInstance = reflect(new D()).type; TypeMirror cInstance = reflect(new C()).type; TypeMirror cNestedInstance = reflect(new C()).type; TypeMirror cTypeArgument = cNestedInstance.typeArguments.first; TypeMirror superA = bDecl.superclass; TypeMirror superC = bDecl.superinterfaces.single; MethodMirror m = bDecl.declarations[#m] as MethodMirror; VariableMirror field = bDecl.declarations[#field] as VariableMirror; TypeMirror returnTypeA = m.returnType; TypeMirror parameterTypeA = m.parameters.first.type; TypeMirror fieldTypeA = field.type; TypeMirror upperBoundA = bDecl.typeVariables.single.upperBound; TypeMirror dynamicMirror = currentMirrorSystem().dynamicType; Expect.isTrue(aDecl.isOriginalDeclaration); Expect.isTrue(reflect(dInstance).type.isOriginalDeclaration); Expect.isFalse(aInstance.isOriginalDeclaration); Expect.isFalse(aInstanceDynamic.isOriginalDeclaration); Expect.isFalse(superA.isOriginalDeclaration); Expect.isFalse(superC.isOriginalDeclaration); Expect.isFalse(returnTypeA.isOriginalDeclaration); Expect.isFalse(parameterTypeA.isOriginalDeclaration); Expect.isFalse(fieldTypeA.isOriginalDeclaration); Expect.isFalse(upperBoundA.isOriginalDeclaration); Expect.isFalse(cInstance.isOriginalDeclaration); Expect.isFalse(cNestedInstance.isOriginalDeclaration); Expect.isFalse(cTypeArgument.isOriginalDeclaration); Expect.isTrue(aDecl.typeArguments.isEmpty); Expect.isTrue(dInstance.typeArguments.isEmpty); Expect.equals(dynamicMirror, aInstance.typeArguments.single); Expect.equals(dynamicMirror, aInstanceDynamic.typeArguments.single); Expect.equals(dynamicMirror, superA.typeArguments.single); Expect.equals(dynamicMirror, superC.typeArguments.first); Expect.equals(dynamicMirror, superC.typeArguments.last); Expect.equals(dynamicMirror, returnTypeA.typeArguments.single); Expect.equals(dynamicMirror, parameterTypeA.typeArguments.single); Expect.equals(dynamicMirror, fieldTypeA.typeArguments.single); Expect.equals(dynamicMirror, upperBoundA.typeArguments.single); Expect.equals(dynamicMirror, cInstance.typeArguments.first); Expect.equals(dynamicMirror, cInstance.typeArguments.last); Expect.equals(dynamicMirror, cNestedInstance.typeArguments.last); Expect.equals(dynamicMirror, cTypeArgument.typeArguments.first); Expect.equals(dynamicMirror, cTypeArgument.typeArguments.last); }