6abae965db
Make mirrors no longer able to create new instances of enum classes. (If that breaks anyone, they had it coming! It would invalidate exhaustiveness of switches and thereby soundness in general.) Also fix a number of failing tests, delete some no longer relevant tests (e.g. testing reflection of programs that won't compile, there are no runtime compilation errors any more.) Fix some more tests that were failing. Not all. Tested: Refactoring of existing tests. Change-Id: I558fe0ed45d23cac9eddbfdfa3d560d09195955d Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/403587 Commit-Queue: Lasse Nielsen <lrn@google.com> Reviewed-by: Martin Kustermann <kustermann@google.com>
107 lines
4.1 KiB
Dart
107 lines
4.1 KiB
Dart
// 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';
|
|
|
|
import 'generics_helper.dart';
|
|
|
|
class Interface<T> {}
|
|
|
|
class Bounded<S extends num> {}
|
|
|
|
class Fixed implements Interface<int> {}
|
|
|
|
class Generic<R> implements Interface<R> {}
|
|
|
|
class Bienbounded implements Bounded<int> {}
|
|
|
|
class FBounded implements Interface<FBounded> {}
|
|
|
|
mixin Mixin {}
|
|
|
|
class FixedMixinApplication = Object with Mixin implements Interface<int>;
|
|
class GenericMixinApplication<X> = Object with Mixin implements Interface<X>;
|
|
|
|
class FixedClass extends Object with Mixin implements Interface<int> {}
|
|
|
|
class GenericClass<Y> extends Object with Mixin implements Interface<Y> {}
|
|
|
|
void main() {
|
|
ClassMirror interfaceDecl = reflectClass(Interface);
|
|
ClassMirror boundedDecl = reflectClass(Bounded);
|
|
|
|
ClassMirror interfaceOfInt = reflectClass(Fixed).superinterfaces.single;
|
|
ClassMirror interfaceOfR = reflectClass(Generic).superinterfaces.single;
|
|
ClassMirror interfaceOfBool = reflect(
|
|
Generic<bool>(),
|
|
).type.superinterfaces.single;
|
|
|
|
ClassMirror boundedOfInt = reflectClass(Bienbounded).superinterfaces.single;
|
|
ClassMirror interfaceOfFBounded = reflectClass(
|
|
FBounded,
|
|
).superinterfaces.single;
|
|
|
|
ClassMirror interfaceOfInt2 = reflectClass(
|
|
FixedMixinApplication,
|
|
).superinterfaces.single;
|
|
ClassMirror interfaceOfX = reflectClass(
|
|
GenericMixinApplication,
|
|
).superinterfaces.single;
|
|
ClassMirror interfaceOfDouble = reflect(
|
|
GenericMixinApplication<double>(),
|
|
).type.superinterfaces.single;
|
|
ClassMirror interfaceOfInt3 = reflectClass(FixedClass).superinterfaces.single;
|
|
ClassMirror interfaceOfY = reflectClass(GenericClass).superinterfaces.single;
|
|
ClassMirror interfaceOfDouble2 = reflect(
|
|
GenericClass<double>(),
|
|
).type.superinterfaces.single;
|
|
|
|
Expect.isTrue(interfaceDecl.isOriginalDeclaration);
|
|
Expect.isTrue(boundedDecl.isOriginalDeclaration);
|
|
|
|
Expect.isFalse(interfaceOfInt.isOriginalDeclaration);
|
|
Expect.isFalse(interfaceOfR.isOriginalDeclaration);
|
|
Expect.isFalse(interfaceOfBool.isOriginalDeclaration);
|
|
Expect.isFalse(boundedOfInt.isOriginalDeclaration);
|
|
Expect.isFalse(interfaceOfFBounded.isOriginalDeclaration);
|
|
Expect.isFalse(interfaceOfInt2.isOriginalDeclaration);
|
|
Expect.isFalse(interfaceOfX.isOriginalDeclaration);
|
|
Expect.isFalse(interfaceOfDouble.isOriginalDeclaration);
|
|
Expect.isFalse(interfaceOfInt3.isOriginalDeclaration);
|
|
Expect.isFalse(interfaceOfY.isOriginalDeclaration);
|
|
Expect.isFalse(interfaceOfDouble2.isOriginalDeclaration);
|
|
|
|
TypeVariableMirror tFromInterface = interfaceDecl.typeVariables.single;
|
|
TypeVariableMirror sFromBounded = boundedDecl.typeVariables.single;
|
|
TypeVariableMirror rFromGeneric = reflectClass(Generic).typeVariables.single;
|
|
TypeVariableMirror xFromGenericMixinApplication = reflectClass(
|
|
GenericMixinApplication,
|
|
).typeVariables.single;
|
|
TypeVariableMirror yFromGenericClass = reflectClass(
|
|
GenericClass,
|
|
).typeVariables.single;
|
|
|
|
Expect.equals(reflectClass(Object), tFromInterface.upperBound);
|
|
Expect.equals(reflectClass(num), sFromBounded.upperBound);
|
|
Expect.equals(reflectClass(Object), rFromGeneric.upperBound);
|
|
Expect.equals(reflectClass(Object), xFromGenericMixinApplication.upperBound);
|
|
Expect.equals(reflectClass(Object), yFromGenericClass.upperBound);
|
|
|
|
typeArguments(interfaceDecl, []);
|
|
typeArguments(boundedDecl, []);
|
|
typeArguments(interfaceOfInt, [reflectClass(int)]);
|
|
typeArguments(interfaceOfR, [rFromGeneric]);
|
|
typeArguments(interfaceOfBool, [reflectClass(bool)]);
|
|
typeArguments(boundedOfInt, [reflectClass(int)]);
|
|
typeArguments(interfaceOfFBounded, [reflectClass(FBounded)]);
|
|
typeArguments(interfaceOfInt2, [reflectClass(int)]);
|
|
typeArguments(interfaceOfX, [xFromGenericMixinApplication]);
|
|
typeArguments(interfaceOfDouble, [reflectClass(double)]);
|
|
typeArguments(interfaceOfInt3, [reflectClass(int)]);
|
|
typeArguments(interfaceOfY, [yFromGenericClass]);
|
|
typeArguments(interfaceOfDouble2, [reflectClass(double)]);
|
|
}
|