mirror of
https://github.com/dart-lang/sdk
synced 2024-09-16 01:30:32 +00:00
[VM] Cleanup typing issues in mirrors_impl.dart
Bug: https://github.com/dart-lang/sdk/issues/31052 Change-Id: Ib209aed8d3e2871d8c5676b1c89a2ec2487649af Reviewed-on: https://dart-review.googlesource.com/12447 Commit-Queue: Vyacheslav Egorov <vegorov@google.com> Reviewed-by: Martin Kustermann <kustermann@google.com> Reviewed-by: Ryan Macnak <rmacnak@google.com>
This commit is contained in:
parent
2e0261dddf
commit
0179aa14b3
|
@ -5,7 +5,8 @@
|
|||
// part of "mirrors_patch.dart";
|
||||
|
||||
var _dirty = false;
|
||||
final _emptyList = new UnmodifiableListView([]);
|
||||
// Note: _emtpyList needs to be assignable to List<T> for any T hence Null.
|
||||
final _emptyList = new UnmodifiableListView<Null>([]);
|
||||
|
||||
class _InternalMirrorError {
|
||||
final String _msg;
|
||||
|
@ -80,7 +81,7 @@ class _AccessorCacheAssociation {
|
|||
* associations that have not been used since the last growth when needing to
|
||||
* grow again. Implemented as an open addressing hash table.
|
||||
*/
|
||||
class _AccessorCache {
|
||||
class _AccessorCache<T extends Function> {
|
||||
List table;
|
||||
int shift;
|
||||
int mask;
|
||||
|
@ -179,7 +180,7 @@ class _AccessorCache {
|
|||
if (needToGrow) grow();
|
||||
}
|
||||
|
||||
operator []=(String key, Function value) {
|
||||
operator []=(String key, T value) {
|
||||
int index = scanFor(key);
|
||||
var assoc = table[index];
|
||||
if (null != assoc) {
|
||||
|
@ -201,7 +202,7 @@ class _AccessorCache {
|
|||
}
|
||||
}
|
||||
|
||||
Function operator [](String key) {
|
||||
T operator [](String key) {
|
||||
var index = scanFor(key);
|
||||
var assoc = table[index];
|
||||
if (null == assoc) return null;
|
||||
|
@ -421,8 +422,11 @@ class _LocalInstanceMirror extends _LocalObjectMirror
|
|||
return identityHashCode(_reflectee) ^ 0x36363636;
|
||||
}
|
||||
|
||||
static var _getFieldClosures = new _AccessorCache.withInitialShift(4);
|
||||
static var _setFieldClosures = new _AccessorCache.withInitialShift(4);
|
||||
static var _getFieldClosures =
|
||||
new _AccessorCache<dynamic Function(dynamic)>.withInitialShift(4);
|
||||
static var _setFieldClosures =
|
||||
new _AccessorCache<dynamic Function(dynamic, dynamic)>.withInitialShift(
|
||||
4);
|
||||
|
||||
_createGetterClosure(unwrapped) {
|
||||
var atPosition = unwrapped.indexOf('@');
|
||||
|
@ -556,7 +560,12 @@ class _LocalClosureMirror extends _LocalInstanceMirror
|
|||
static _computeFunction(reflectee) native 'ClosureMirror_function';
|
||||
}
|
||||
|
||||
class _LocalClassMirror extends _LocalObjectMirror implements ClassMirror {
|
||||
abstract class _LocalTypeMirror {
|
||||
Type get _reflectedType;
|
||||
}
|
||||
|
||||
class _LocalClassMirror extends _LocalObjectMirror
|
||||
implements ClassMirror, _LocalTypeMirror {
|
||||
final Type _reflectedType;
|
||||
Symbol _simpleName;
|
||||
DeclarationMirror _owner;
|
||||
|
@ -623,8 +632,8 @@ class _LocalClassMirror extends _LocalObjectMirror implements ClassMirror {
|
|||
return _location(_reflectee);
|
||||
}
|
||||
|
||||
ClassMirror _trueSuperclassField;
|
||||
ClassMirror get _trueSuperclass {
|
||||
_LocalClassMirror _trueSuperclassField;
|
||||
_LocalClassMirror get _trueSuperclass {
|
||||
if (_trueSuperclassField == null) {
|
||||
Type supertype = isOriginalDeclaration
|
||||
? _supertype(_reflectedType)
|
||||
|
@ -751,8 +760,8 @@ class _LocalClassMirror extends _LocalObjectMirror implements ClassMirror {
|
|||
var decls = new Map<Symbol, DeclarationMirror>();
|
||||
|
||||
var whoseMembers = _isMixinAlias ? _trueSuperclass : this;
|
||||
var members =
|
||||
mixin._computeMembers(_instantiator, whoseMembers.mixin._reflectee);
|
||||
var members = (mixin as _LocalClassMirror)._computeMembers(
|
||||
_instantiator, (whoseMembers.mixin as _LocalClassMirror)._reflectee);
|
||||
for (var member in members) {
|
||||
decls[member.simpleName] = member;
|
||||
}
|
||||
|
@ -862,14 +871,16 @@ class _LocalClassMirror extends _LocalObjectMirror implements ClassMirror {
|
|||
bool isSubtypeOf(TypeMirror other) {
|
||||
if (other == currentMirrorSystem().dynamicType) return true;
|
||||
if (other == currentMirrorSystem().voidType) return false;
|
||||
return _subtypeTest(_reflectedType, other._reflectedType);
|
||||
return _subtypeTest(
|
||||
_reflectedType, (other as _LocalTypeMirror)._reflectedType);
|
||||
}
|
||||
|
||||
bool isAssignableTo(TypeMirror other) {
|
||||
if (other == currentMirrorSystem().dynamicType) return true;
|
||||
if (other == currentMirrorSystem().voidType) return false;
|
||||
return _subtypeTest(_reflectedType, other._reflectedType) ||
|
||||
_subtypeTest(other._reflectedType, _reflectedType);
|
||||
final otherReflectedType = (other as _LocalTypeMirror)._reflectedType;
|
||||
return _subtypeTest(_reflectedType, otherReflectedType) ||
|
||||
_subtypeTest(otherReflectedType, _reflectedType);
|
||||
}
|
||||
|
||||
bool isSubclassOf(ClassMirror other) {
|
||||
|
@ -967,7 +978,7 @@ class _LocalFunctionTypeMirror extends _LocalClassMirror
|
|||
}
|
||||
|
||||
bool get isOriginalDeclaration => true;
|
||||
get originalDeclaration => this;
|
||||
ClassMirror get originalDeclaration => this;
|
||||
get typeVariables => _emptyList;
|
||||
get typeArguments => _emptyList;
|
||||
get metadata => _emptyList;
|
||||
|
@ -1023,14 +1034,15 @@ abstract class _LocalDeclarationMirror extends _LocalMirror
|
|||
}
|
||||
|
||||
class _LocalTypeVariableMirror extends _LocalDeclarationMirror
|
||||
implements TypeVariableMirror {
|
||||
implements TypeVariableMirror, _LocalTypeMirror {
|
||||
_LocalTypeVariableMirror(reflectee, String simpleName, this._owner)
|
||||
: super(reflectee, _s(simpleName));
|
||||
|
||||
DeclarationMirror _owner;
|
||||
DeclarationMirror get owner {
|
||||
if (_owner == null) {
|
||||
_owner = _TypeVariableMirror_owner(_reflectee).originalDeclaration;
|
||||
_owner = (_TypeVariableMirror_owner(_reflectee) as TypeMirror)
|
||||
.originalDeclaration;
|
||||
}
|
||||
return _owner;
|
||||
}
|
||||
|
@ -1072,14 +1084,16 @@ class _LocalTypeVariableMirror extends _LocalDeclarationMirror
|
|||
bool isSubtypeOf(TypeMirror other) {
|
||||
if (other == currentMirrorSystem().dynamicType) return true;
|
||||
if (other == currentMirrorSystem().voidType) return false;
|
||||
return _subtypeTest(_reflectedType, other._reflectedType);
|
||||
return _subtypeTest(
|
||||
_reflectedType, (other as _LocalTypeMirror)._reflectedType);
|
||||
}
|
||||
|
||||
bool isAssignableTo(TypeMirror other) {
|
||||
if (other == currentMirrorSystem().dynamicType) return true;
|
||||
if (other == currentMirrorSystem().voidType) return false;
|
||||
return _subtypeTest(_reflectedType, other._reflectedType) ||
|
||||
_subtypeTest(other._reflectedType, _reflectedType);
|
||||
final otherReflectedType = (other as _LocalTypeMirror)._reflectedType;
|
||||
return _subtypeTest(_reflectedType, otherReflectedType) ||
|
||||
_subtypeTest(otherReflectedType, _reflectedType);
|
||||
}
|
||||
|
||||
static DeclarationMirror _TypeVariableMirror_owner(reflectee)
|
||||
|
@ -1090,7 +1104,7 @@ class _LocalTypeVariableMirror extends _LocalDeclarationMirror
|
|||
}
|
||||
|
||||
class _LocalTypedefMirror extends _LocalDeclarationMirror
|
||||
implements TypedefMirror {
|
||||
implements TypedefMirror, _LocalTypeMirror {
|
||||
final Type _reflectedType;
|
||||
final bool _isGeneric;
|
||||
final bool _isGenericDeclaration;
|
||||
|
@ -1110,8 +1124,8 @@ class _LocalTypedefMirror extends _LocalDeclarationMirror
|
|||
return _owner;
|
||||
}
|
||||
|
||||
TypeMirror _referent = null;
|
||||
TypeMirror get referent {
|
||||
_LocalFunctionTypeMirror _referent = null;
|
||||
FunctionTypeMirror get referent {
|
||||
if (_referent == null) {
|
||||
_referent = _nativeReferent(_reflectedType);
|
||||
_referent._instantiator = _reflectedType;
|
||||
|
@ -1171,14 +1185,16 @@ class _LocalTypedefMirror extends _LocalDeclarationMirror
|
|||
bool isSubtypeOf(TypeMirror other) {
|
||||
if (other == currentMirrorSystem().dynamicType) return true;
|
||||
if (other == currentMirrorSystem().voidType) return false;
|
||||
return _subtypeTest(_reflectedType, other._reflectedType);
|
||||
return _subtypeTest(
|
||||
_reflectedType, (other as _LocalTypeMirror)._reflectedType);
|
||||
}
|
||||
|
||||
bool isAssignableTo(TypeMirror other) {
|
||||
if (other == currentMirrorSystem().dynamicType) return true;
|
||||
if (other == currentMirrorSystem().voidType) return false;
|
||||
return _subtypeTest(_reflectedType, other._reflectedType) ||
|
||||
_subtypeTest(other._reflectedType, _reflectedType);
|
||||
final otherReflectedType = (other as _LocalTypeMirror)._reflectedType;
|
||||
return _subtypeTest(_reflectedType, otherReflectedType) ||
|
||||
_subtypeTest(otherReflectedType, _reflectedType);
|
||||
}
|
||||
|
||||
static _nativeReferent(reflectedType) native "TypedefMirror_referent";
|
||||
|
@ -1462,7 +1478,16 @@ class _LocalVariableMirror extends _LocalDeclarationMirror
|
|||
bool get isTopLevel => owner is LibraryMirror;
|
||||
|
||||
Type get _instantiator {
|
||||
return owner._instantiator;
|
||||
final o = owner; // Note: need local variable for promotion to happen.
|
||||
if (o is _LocalClassMirror) {
|
||||
return o._instantiator;
|
||||
} else if (o is _LocalMethodMirror) {
|
||||
return o._instantiator;
|
||||
} else if (o is _LocalLibraryMirror) {
|
||||
return o._instantiator;
|
||||
} else {
|
||||
throw new UnsupportedError("unexpected owner ${owner}");
|
||||
}
|
||||
}
|
||||
|
||||
TypeMirror _type;
|
||||
|
@ -1530,10 +1555,6 @@ class _LocalParameterMirror extends _LocalVariableMirror
|
|||
return new UnmodifiableListView(_unmirroredMetadata.map(reflect));
|
||||
}
|
||||
|
||||
Type get _instantiator {
|
||||
return owner._instantiator;
|
||||
}
|
||||
|
||||
TypeMirror _type = null;
|
||||
TypeMirror get type {
|
||||
if (_type == null) {
|
||||
|
@ -1617,7 +1638,8 @@ class _Mirrors {
|
|||
static Type instantiateGenericType(Type key, typeArguments)
|
||||
native "Mirrors_instantiateGenericType";
|
||||
|
||||
static Expando<ClassMirror> _declarationCache = new Expando("ClassMirror");
|
||||
static Expando<_LocalClassMirror> _declarationCache =
|
||||
new Expando("ClassMirror");
|
||||
static Expando<TypeMirror> _instantiationCache = new Expando("TypeMirror");
|
||||
|
||||
static ClassMirror reflectClass(Type key) {
|
||||
|
@ -1640,7 +1662,7 @@ class _Mirrors {
|
|||
if (typeMirror == null) {
|
||||
typeMirror = makeLocalTypeMirror(key);
|
||||
_instantiationCache[key] = typeMirror;
|
||||
if (typeMirror is ClassMirror && !typeMirror._isGeneric) {
|
||||
if (typeMirror is _LocalClassMirror && !typeMirror._isGeneric) {
|
||||
_declarationCache[key] = typeMirror;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -82,7 +82,9 @@ class MirrorSystem {
|
|||
((name.length > 0) && (name[0] == '_') && (library == null))) {
|
||||
throw new ArgumentError(library);
|
||||
}
|
||||
if (library != null) name = _mangleName(name, library._reflectee);
|
||||
if (library != null) {
|
||||
name = _mangleName(name, (library as _LocalLibraryMirror)._reflectee);
|
||||
}
|
||||
return new internal.Symbol.unvalidated(name);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue