From 606e8d24d041d2f286535e3f37526ff7b038a480 Mon Sep 17 00:00:00 2001 From: Anna Gringauze Date: Mon, 24 Apr 2023 16:22:03 -0700 Subject: [PATCH 1/4] Simplify class metadata --- dwds/lib/src/debugging/classes.dart | 8 +- dwds/lib/src/debugging/instance.dart | 163 +++++++++++----- dwds/lib/src/debugging/libraries.dart | 8 +- dwds/lib/src/debugging/metadata/class.dart | 213 +++++++++++++++------ dwds/test/metadata/class_test.dart | 8 +- fixtures/_testPackageSound/pubspec.yaml | 2 +- 6 files changed, 286 insertions(+), 116 deletions(-) diff --git a/dwds/lib/src/debugging/classes.dart b/dwds/lib/src/debugging/classes.dart index f5a529a93..256240dcb 100644 --- a/dwds/lib/src/debugging/classes.dart +++ b/dwds/lib/src/debugging/classes.dart @@ -199,8 +199,12 @@ class ClassHelper extends Domain { fieldDescriptors.forEach((name, descriptor) { final classMetaData = ClassMetaData( jsName: descriptor['classRefName'], - libraryId: descriptor['classRefLibraryId'], - dartName: descriptor['classRefDartName'], + //libraryId: descriptor['classRefLibraryId'], + //dartName: descriptor['classRefDartName'], + classRef: classRefFor( + descriptor['classRefLibraryId'], + descriptor['classRefDartName'], + ), ); fieldRefs.add( FieldRef( diff --git a/dwds/lib/src/debugging/instance.dart b/dwds/lib/src/debugging/instance.dart index 8f43172b5..c6d9b26b9 100644 --- a/dwds/lib/src/debugging/instance.dart +++ b/dwds/lib/src/debugging/instance.dart @@ -127,6 +127,60 @@ class InstanceHelper extends Domain { final classRef = metaData?.classRef; if (metaData == null || classRef == null) return null; + + switch (metaData.kind) { + case InstanceKind.kClosure: + return _closureInstanceFor(remoteObject); + case InstanceKind.kList: + return await _listInstanceFor( + classRef, + remoteObject, + offset: offset, + count: count, + length: metaData.length, + ); + case InstanceKind.kSet: + return await _setInstanceFor( + classRef, + remoteObject, + offset: offset, + count: count, + length: metaData.length, + ); + case InstanceKind.kMap: + return await _mapInstanceFor( + classRef, + remoteObject, + offset: offset, + count: count, + length: metaData.length, + ); + case InstanceKind.kRecord: + return await _recordInstanceFor( + classRef, + remoteObject, + offset: offset, + count: count, + length: metaData.length, + ); + case InstanceKind.kRecordType: + return await _recordTypeInstanceFor( + classRef, + remoteObject, + offset: offset, + count: count, + length: metaData.length, + ); + default: + return await _plainInstanceFor( + classRef, + remoteObject, + offset: offset, + count: count, + length: metaData.length, + ); + } + /* if (metaData.isFunction) { return _closureInstanceFor(remoteObject); } @@ -187,7 +241,7 @@ class InstanceHelper extends Domain { count: count, length: metaData.length, ); - } + }*/ } /// If [remoteObject] represents a primitive, return an [Instance] for it, @@ -868,60 +922,67 @@ class InstanceHelper extends Domain { inspector, ); if (metaData == null) return null; - if (metaData.isSystemList) { - return InstanceRef( - kind: InstanceKind.kList, - id: objectId, - identityHashCode: remoteObject.objectId.hashCode, - classRef: metaData.classRef, - )..length = metaData.length; - } - if (metaData.isSystemMap) { - return InstanceRef( - kind: InstanceKind.kMap, - id: objectId, - identityHashCode: remoteObject.objectId.hashCode, - classRef: metaData.classRef, - )..length = metaData.length; - } - if (metaData.isRecord) { - return InstanceRef( - kind: InstanceKind.kRecord, - id: objectId, - identityHashCode: remoteObject.objectId.hashCode, - classRef: metaData.classRef, - )..length = metaData.length; - } - if (metaData.isRecordType) { - return InstanceRef( - kind: InstanceKind.kRecordType, - id: objectId, - identityHashCode: remoteObject.objectId.hashCode, - classRef: metaData.classRef, - )..length = metaData.length; - } - if (metaData.isSet) { - return InstanceRef( - kind: InstanceKind.kSet, - id: objectId, - identityHashCode: remoteObject.objectId.hashCode, - classRef: metaData.classRef, - )..length = metaData.length; - } - if (metaData.isNativeError) { - return InstanceRef( - kind: InstanceKind.kPlainInstance, - id: objectId, - identityHashCode: remoteObject.objectId.hashCode, - classRef: classRefForNativeJsError, - )..length = metaData.length; - } return InstanceRef( - kind: InstanceKind.kPlainInstance, + kind: metaData.kind, id: objectId, identityHashCode: remoteObject.objectId.hashCode, classRef: metaData.classRef, - ); + )..length = metaData.length; + + // if (metaData.isSystemList) { + // return InstanceRef( + // kind: InstanceKind.kList, + // id: objectId, + // identityHashCode: remoteObject.objectId.hashCode, + // classRef: metaData.classRef, + // )..length = metaData.length; + // } + // if (metaData.isSystemMap) { + // return InstanceRef( + // kind: InstanceKind.kMap, + // id: objectId, + // identityHashCode: remoteObject.objectId.hashCode, + // classRef: metaData.classRef, + // )..length = metaData.length; + // } + // if (metaData.isRecord) { + // return InstanceRef( + // kind: InstanceKind.kRecord, + // id: objectId, + // identityHashCode: remoteObject.objectId.hashCode, + // classRef: metaData.classRef, + // )..length = metaData.length; + // } + // if (metaData.isRecordType) { + // return InstanceRef( + // kind: InstanceKind.kRecordType, + // id: objectId, + // identityHashCode: remoteObject.objectId.hashCode, + // classRef: metaData.classRef, + // )..length = metaData.length; + // } + // if (metaData.isSet) { + // return InstanceRef( + // kind: InstanceKind.kSet, + // id: objectId, + // identityHashCode: remoteObject.objectId.hashCode, + // classRef: metaData.classRef, + // )..length = metaData.length; + // } + // if (metaData.isNativeError) { + // return InstanceRef( + // kind: InstanceKind.kPlainInstance, + // id: objectId, + // identityHashCode: remoteObject.objectId.hashCode, + // classRef: classRefForNativeJsError, + // )..length = metaData.length; + // } + // return InstanceRef( + // kind: InstanceKind.kPlainInstance, + // id: objectId, + // identityHashCode: remoteObject.objectId.hashCode, + // classRef: metaData.classRef, + // ); case 'function': final functionMetaData = await FunctionMetaData.metaDataFor( inspector.remoteDebugger, diff --git a/dwds/lib/src/debugging/libraries.dart b/dwds/lib/src/debugging/libraries.dart index 5b9b96851..d152ced30 100644 --- a/dwds/lib/src/debugging/libraries.dart +++ b/dwds/lib/src/debugging/libraries.dart @@ -120,9 +120,11 @@ class LibraryHelper extends Domain { List>.from(jsonValues['classes'] ?? []); for (final classDescriptor in classDescriptors) { final classMetaData = ClassMetaData( - jsName: classDescriptor['name'] as Object?, - libraryId: libraryRef.id, - dartName: classDescriptor['dartName'] as Object?, + jsName: classDescriptor['name'], + classRef: classRefFor( + libraryRef.id, + classDescriptor['dartName'], + ), ); classRefs.add(classMetaData.classRef); } diff --git a/dwds/lib/src/debugging/metadata/class.dart b/dwds/lib/src/debugging/metadata/class.dart index 1d0c861a8..eca649d3a 100644 --- a/dwds/lib/src/debugging/metadata/class.dart +++ b/dwds/lib/src/debugging/metadata/class.dart @@ -40,6 +40,8 @@ final classRefForUnknown = classRefFor(_dartCoreLibrary, 'Unknown'); final classRefForNativeJsError = classRefFor(_dartInterceptorsLibrary, 'NativeError'); +String classMetaDataIdFor(String library, String? jsName) => '$library:$jsName'; + /// Returns true for non-dart JavaScript classes. /// /// TODO(annagrin): this breaks on name changes for JS types. @@ -69,18 +71,57 @@ LibraryRef libraryRefFor(String libraryId) => LibraryRef( ); /// Returns a [ClassRef] for the provided library ID and class name. -ClassRef classRefFor(String libraryId, String? name) => ClassRef( - id: classIdFor(libraryId, name), - name: name, - library: libraryRefFor(libraryId), - ); +ClassRef classRefFor(Object? libraryId, Object? dartName) { + final library = libraryId as String? ?? _dartCoreLibrary; + final name = dartName as String?; + return ClassRef( + id: classIdFor(library, name), + name: name, + library: libraryRefFor(library), + ); +} String classIdFor(String libraryId, String? name) => 'classes|$libraryId|$name'; +enum ClassMetaDataKind { + object, + map, + set, + list, + function, + record, + recordType, + nativeError, +} + +String toInstanceKind(ClassMetaDataKind kind) { + switch (kind) { + case ClassMetaDataKind.function: + return InstanceKind.kClosure; + case ClassMetaDataKind.list: + return InstanceKind.kList; + case ClassMetaDataKind.map: + return InstanceKind.kMap; + case ClassMetaDataKind.set: + return InstanceKind.kSet; + case ClassMetaDataKind.record: + return InstanceKind.kRecord; + case ClassMetaDataKind.recordType: + return InstanceKind.kRecordType; + case ClassMetaDataKind.nativeError: + case ClassMetaDataKind.object: + default: + return InstanceKind.kPlainInstance; + } +} + /// Meta data for a remote Dart class in Chrome. class ClassMetaData { static final _logger = Logger('ClassMetadata'); + /// Instance kind. + final String kind; + /// Class id. /// /// Takes the form of 'libraryId:name'. @@ -98,44 +139,51 @@ class ClassMetaData { /// The dart type name for the object. /// /// For example, 'int', 'List', 'Null' - final String? dartName; + String? get dartName => classRef.name; /// Class ref for the class metadata. final ClassRef classRef; factory ClassMetaData({ Object? jsName, - Object? libraryId, - Object? dartName, + //Object? libraryId, + //Object? dartName, Object? length, - bool isFunction = false, - bool isRecord = false, - bool isRecordType = false, - bool isNativeError = false, + String kind = InstanceKind.kPlainInstance, + required ClassRef classRef, + //bool isFunction = false, + //bool isRecord = false, + //bool isRecordType = false, + //bool isNativeError = false, }) { - final jName = jsName as String?; - final dName = dartName as String?; - final library = libraryId as String? ?? _dartCoreLibrary; - final id = '$library:$jName'; - - var classRef = classRefFor(library, dName); - if (isRecord) { - classRef = classRefForRecord; - } - if (isRecordType) { - classRef = classRefForRecordType; - } + final id = classMetaDataIdFor(classRef.library!.id!, jsName as String?); + // final jName = jsName as String?; + // final dName = dartName as String?; + //final library = libraryId as String? ?? _dartCoreLibrary; + //final id = '$library:$jName'; + + // var classRef = classRefFor(library, dName); + // if (kind == ClassMetaDataKind.record) { + // classRef = classRefForRecord; + // } + // if (kind == ClassMetaDataKind.recordType) { + // classRef = classRefForRecordType; + // } + // if (kind == ClassMetaDataKind.nativeError) { + // classRef = classRefForNativeJsError; + // } return ClassMetaData._( id, classRef, - jName, - dName, + jsName, + //dartName as String?, int.tryParse('$length'), - isFunction, - isRecord, - isRecordType, - isNativeError, + kind, + // isFunction, + // isRecord, + // isRecordType, + // isNativeError, ); } @@ -143,12 +191,13 @@ class ClassMetaData { this.id, this.classRef, this.jsName, - this.dartName, + //this.dartName, this.length, - this.isFunction, - this.isRecord, - this.isRecordType, - this.isNativeError, + this.kind, + // this.isFunction, + // this.isRecord, + // this.isRecordType, + // this.isNativeError, ); /// Returns the [ClassMetaData] for the Chrome [remoteObject]. @@ -205,14 +254,21 @@ class ClassMetaData { returnByValue: true, ); final metadata = result.value as Map; + final jsName = metadata['name']; + + final kind = _computeInstanceKind(metadata); + final classRef = _computeClassRef(metadata); + return ClassMetaData( - jsName: metadata['name'], - libraryId: metadata['libraryId'], - dartName: metadata['dartName'], - isFunction: metadata['isFunction'], - isRecord: metadata['isRecord'], - isRecordType: metadata['isRecordType'], - isNativeError: metadata['isNativeError'], + jsName: jsName, + //libraryId: library, + //dartName: dartName, + kind: kind, + classRef: classRef, + // isFunction: metadata['isFunction'], + // isRecord: metadata['isRecord'], + // isRecordType: metadata['isRecordType'], + // isNativeError: metadata['isNativeError'], length: metadata['length'], ); } on ChromeDebugException catch (e, s) { @@ -233,23 +289,70 @@ class ClassMetaData { /// plain objects. // TODO(alanknight): It may be that IdentityMap should not be treated as a // system map. - bool get isSystemMap => jsName == 'LinkedMap' || jsName == 'IdentityMap'; + // bool get isSystemMap => jsName == 'LinkedMap' || jsName == 'IdentityMap'; + + // /// True if this class refers to system Lists, which are treated specially. + // bool get isSystemList => jsName == 'JSArray'; - /// True if this class refers to system Lists, which are treated specially. - bool get isSystemList => jsName == 'JSArray'; + // bool get isSet => jsName == '_HashSet'; - bool get isSet => jsName == '_HashSet'; + // /// True if this class refers to a function type. + // bool isFunction; - /// True if this class refers to a function type. - bool isFunction; + // /// True if this class refers to a Record type. + // bool isRecord; - /// True if this class refers to a Record type. - bool isRecord; + // /// True if this class refers to a RecordType type. + // bool isRecordType; - /// True if this class refers to a RecordType type. - bool isRecordType; + // /// True is this class refers to a native JS type. + // /// i.e. inherits from NativeError. + // bool isNativeError; +} + +String _computeInstanceKind(Map metadata) { + final jsName = metadata['name']; + final isFunction = metadata['isFunction']; + final isRecord = metadata['isRecord']; + final isRecordType = metadata['isRecordType']; + + if (jsName == '_HashSet') { + return InstanceKind.kSet; + } + if (jsName == 'JSArray') { + return InstanceKind.kList; + } + if (jsName == 'LinkedMap' || jsName == 'IdentityMap') { + return InstanceKind.kMap; + } + if (isFunction) { + return InstanceKind.kClosure; + } + if (isRecord) { + return InstanceKind.kRecord; + } + if (isRecordType) { + return InstanceKind.kRecordType; + } + return InstanceKind.kPlainInstance; +} + +ClassRef _computeClassRef(Map metadata) { + final dartName = metadata['dartName']; + final library = metadata['libraryId']; + final isRecord = metadata['isRecord']; + final isRecordType = metadata['isRecordType']; + final isNativeError = metadata['isNativeError']; + + if (isRecord) { + return classRefForRecord; + } + if (isRecordType) { + return classRefForRecordType; + } + if (isNativeError) { + return classRefForNativeJsError; + } - /// True is this class refers to a native JS type. - /// i.e. inherits from NativeError. - bool isNativeError; + return classRefFor(library, dartName); } diff --git a/dwds/test/metadata/class_test.dart b/dwds/test/metadata/class_test.dart index 49b4e4b96..d0c765ebe 100644 --- a/dwds/test/metadata/class_test.dart +++ b/dwds/test/metadata/class_test.dart @@ -9,16 +9,16 @@ import 'package:test/test.dart'; void main() { test('Gracefully handles invalid length objects', () async { - var metadata = ClassMetaData(length: null); + var metadata = ClassMetaData(length: null, classRef: classRefForUnknown); expect(metadata.length, isNull); - metadata = ClassMetaData(length: {}); + metadata = ClassMetaData(length: {}, classRef: classRefForUnknown); expect(metadata.length, isNull); - metadata = ClassMetaData(length: '{}'); + metadata = ClassMetaData(length: '{}', classRef: classRefForUnknown); expect(metadata.length, isNull); - metadata = ClassMetaData(length: 0); + metadata = ClassMetaData(length: 0, classRef: classRefForUnknown); expect(metadata.length, equals(0)); }); } diff --git a/fixtures/_testPackageSound/pubspec.yaml b/fixtures/_testPackageSound/pubspec.yaml index 4207b8667..c7d473804 100644 --- a/fixtures/_testPackageSound/pubspec.yaml +++ b/fixtures/_testPackageSound/pubspec.yaml @@ -12,6 +12,6 @@ dependencies: path: ../_testSound dev_dependencies: - build_runner: ^2.4.0 + build_runner: 2.4.0 build_web_compilers: ^4.0.0 From a896519bf1ca31a81032520367af9b4c18cbd72a Mon Sep 17 00:00:00 2001 From: Anna Gringauze Date: Tue, 25 Apr 2023 15:23:51 -0700 Subject: [PATCH 2/4] Cleanup --- dwds/CHANGELOG.md | 1 + dwds/lib/src/debugging/classes.dart | 6 +- dwds/lib/src/debugging/instance.dart | 68 ------------------ dwds/lib/src/debugging/libraries.dart | 1 + dwds/lib/src/debugging/metadata/class.dart | 84 +++------------------- dwds/test/metadata/class_test.dart | 25 +++++-- 6 files changed, 33 insertions(+), 152 deletions(-) diff --git a/dwds/CHANGELOG.md b/dwds/CHANGELOG.md index 65c501916..dca5e719e 100644 --- a/dwds/CHANGELOG.md +++ b/dwds/CHANGELOG.md @@ -3,6 +3,7 @@ - Do not show async frame errors on evaluation. - [#2073](https://github.com/dart-lang/webdev/pull/2073) - Refactor code for presenting record instances. - [#2074](https://github.com/dart-lang/webdev/pull/2074) - Display record types concisely. - [#2070](https://github.com/dart-lang/webdev/pull/2070) +- Simplify class metadata. - [#2070](https://github.com/dart-lang/webdev/pull/2070) ## 19.0.0 diff --git a/dwds/lib/src/debugging/classes.dart b/dwds/lib/src/debugging/classes.dart index 256240dcb..87b8e6d94 100644 --- a/dwds/lib/src/debugging/classes.dart +++ b/dwds/lib/src/debugging/classes.dart @@ -199,8 +199,7 @@ class ClassHelper extends Domain { fieldDescriptors.forEach((name, descriptor) { final classMetaData = ClassMetaData( jsName: descriptor['classRefName'], - //libraryId: descriptor['classRefLibraryId'], - //dartName: descriptor['classRefDartName'], + kind: InstanceKind.kType, classRef: classRefFor( descriptor['classRefLibraryId'], descriptor['classRefDartName'], @@ -213,8 +212,7 @@ class ClassHelper extends Domain { declaredType: InstanceRef( identityHashCode: createId().hashCode, id: createId(), - kind: InstanceKind.kType, - // TODO(elliette): Is this the same as classRef? + kind: classMetaData.kind, classRef: classMetaData.classRef, ), isConst: descriptor['isConst'] as bool, diff --git a/dwds/lib/src/debugging/instance.dart b/dwds/lib/src/debugging/instance.dart index c6d9b26b9..f6e389e9c 100644 --- a/dwds/lib/src/debugging/instance.dart +++ b/dwds/lib/src/debugging/instance.dart @@ -114,12 +114,6 @@ class InstanceHelper extends Domain { final objectId = remoteObject?.objectId; if (remoteObject == null || objectId == null) return null; - // TODO: This is checking the JS object ID for the dart pattern we use for - // VM objects, which seems wrong (and, we catch 'string' types above). - if (isStringId(objectId)) { - return _stringInstanceFor(remoteObject, offset, count); - } - final metaData = await ClassMetaData.metaDataFor( remoteObject, inspector, @@ -180,68 +174,6 @@ class InstanceHelper extends Domain { length: metaData.length, ); } - /* - if (metaData.isFunction) { - return _closureInstanceFor(remoteObject); - } - - if (metaData.isSystemList) { - return await _listInstanceFor( - classRef, - remoteObject, - offset: offset, - count: count, - length: metaData.length, - ); - } else if (metaData.isSystemMap) { - return await _mapInstanceFor( - classRef, - remoteObject, - offset: offset, - count: count, - length: metaData.length, - ); - } else if (metaData.isRecord) { - return await _recordInstanceFor( - classRef, - remoteObject, - offset: offset, - count: count, - length: metaData.length, - ); - } else if (metaData.isRecordType) { - return await _recordTypeInstanceFor( - classRef, - remoteObject, - offset: offset, - count: count, - length: metaData.length, - ); - } else if (metaData.isSet) { - return await _setInstanceFor( - classRef, - remoteObject, - offset: offset, - count: count, - length: metaData.length, - ); - } else if (metaData.isNativeError) { - return await _plainInstanceFor( - classRefForNativeJsError, - remoteObject, - offset: offset, - count: count, - length: metaData.length, - ); - } else { - return await _plainInstanceFor( - classRef, - remoteObject, - offset: offset, - count: count, - length: metaData.length, - ); - }*/ } /// If [remoteObject] represents a primitive, return an [Instance] for it, diff --git a/dwds/lib/src/debugging/libraries.dart b/dwds/lib/src/debugging/libraries.dart index d152ced30..68b65e57f 100644 --- a/dwds/lib/src/debugging/libraries.dart +++ b/dwds/lib/src/debugging/libraries.dart @@ -121,6 +121,7 @@ class LibraryHelper extends Domain { for (final classDescriptor in classDescriptors) { final classMetaData = ClassMetaData( jsName: classDescriptor['name'], + kind: InstanceKind.kType, classRef: classRefFor( libraryRef.id, classDescriptor['dartName'], diff --git a/dwds/lib/src/debugging/metadata/class.dart b/dwds/lib/src/debugging/metadata/class.dart index eca649d3a..06b90c78e 100644 --- a/dwds/lib/src/debugging/metadata/class.dart +++ b/dwds/lib/src/debugging/metadata/class.dart @@ -146,44 +146,17 @@ class ClassMetaData { factory ClassMetaData({ Object? jsName, - //Object? libraryId, - //Object? dartName, Object? length, - String kind = InstanceKind.kPlainInstance, + required String kind, required ClassRef classRef, - //bool isFunction = false, - //bool isRecord = false, - //bool isRecordType = false, - //bool isNativeError = false, }) { final id = classMetaDataIdFor(classRef.library!.id!, jsName as String?); - // final jName = jsName as String?; - // final dName = dartName as String?; - //final library = libraryId as String? ?? _dartCoreLibrary; - //final id = '$library:$jName'; - - // var classRef = classRefFor(library, dName); - // if (kind == ClassMetaDataKind.record) { - // classRef = classRefForRecord; - // } - // if (kind == ClassMetaDataKind.recordType) { - // classRef = classRefForRecordType; - // } - // if (kind == ClassMetaDataKind.nativeError) { - // classRef = classRefForNativeJsError; - // } - return ClassMetaData._( id, classRef, jsName, - //dartName as String?, int.tryParse('$length'), kind, - // isFunction, - // isRecord, - // isRecordType, - // isNativeError, ); } @@ -191,13 +164,8 @@ class ClassMetaData { this.id, this.classRef, this.jsName, - //this.dartName, this.length, this.kind, - // this.isFunction, - // this.isRecord, - // this.isRecordType, - // this.isNativeError, ); /// Returns the [ClassMetaData] for the Chrome [remoteObject]. @@ -254,22 +222,12 @@ class ClassMetaData { returnByValue: true, ); final metadata = result.value as Map; - final jsName = metadata['name']; - - final kind = _computeInstanceKind(metadata); - final classRef = _computeClassRef(metadata); return ClassMetaData( - jsName: jsName, - //libraryId: library, - //dartName: dartName, - kind: kind, - classRef: classRef, - // isFunction: metadata['isFunction'], - // isRecord: metadata['isRecord'], - // isRecordType: metadata['isRecordType'], - // isNativeError: metadata['isNativeError'], + jsName: metadata['name'], length: metadata['length'], + kind: _getInstanceKind(metadata), + classRef: _getClassRef(metadata), ); } on ChromeDebugException catch (e, s) { _logger.fine( @@ -280,37 +238,10 @@ class ClassMetaData { return null; } } - - /// TODO(annagrin): convert fields and getters below to kinds. - - /// True if this class refers to system maps, which are treated specially. - /// - /// Classes that implement Map or inherit from MapBase are still treated as - /// plain objects. - // TODO(alanknight): It may be that IdentityMap should not be treated as a - // system map. - // bool get isSystemMap => jsName == 'LinkedMap' || jsName == 'IdentityMap'; - - // /// True if this class refers to system Lists, which are treated specially. - // bool get isSystemList => jsName == 'JSArray'; - - // bool get isSet => jsName == '_HashSet'; - - // /// True if this class refers to a function type. - // bool isFunction; - - // /// True if this class refers to a Record type. - // bool isRecord; - - // /// True if this class refers to a RecordType type. - // bool isRecordType; - - // /// True is this class refers to a native JS type. - // /// i.e. inherits from NativeError. - // bool isNativeError; } -String _computeInstanceKind(Map metadata) { +/// Find instance kind of an object from [metadata]. +String _getInstanceKind(Map metadata) { final jsName = metadata['name']; final isFunction = metadata['isFunction']; final isRecord = metadata['isRecord']; @@ -337,7 +268,8 @@ String _computeInstanceKind(Map metadata) { return InstanceKind.kPlainInstance; } -ClassRef _computeClassRef(Map metadata) { +/// Find class ref of an object from [metadata]. +ClassRef _getClassRef(Map metadata) { final dartName = metadata['dartName']; final library = metadata['libraryId']; final isRecord = metadata['isRecord']; diff --git a/dwds/test/metadata/class_test.dart b/dwds/test/metadata/class_test.dart index d0c765ebe..dce372729 100644 --- a/dwds/test/metadata/class_test.dart +++ b/dwds/test/metadata/class_test.dart @@ -6,19 +6,36 @@ import 'package:dwds/src/debugging/metadata/class.dart'; import 'package:test/test.dart'; +import 'package:vm_service/vm_service.dart'; void main() { test('Gracefully handles invalid length objects', () async { - var metadata = ClassMetaData(length: null, classRef: classRefForUnknown); + var metadata = ClassMetaData( + length: null, + kind: InstanceKind.kPlainInstance, + classRef: classRefForUnknown, + ); expect(metadata.length, isNull); - metadata = ClassMetaData(length: {}, classRef: classRefForUnknown); + metadata = ClassMetaData( + length: {}, + kind: InstanceKind.kPlainInstance, + classRef: classRefForUnknown, + ); expect(metadata.length, isNull); - metadata = ClassMetaData(length: '{}', classRef: classRefForUnknown); + metadata = ClassMetaData( + length: '{}', + kind: InstanceKind.kPlainInstance, + classRef: classRefForUnknown, + ); expect(metadata.length, isNull); - metadata = ClassMetaData(length: 0, classRef: classRefForUnknown); + metadata = ClassMetaData( + length: 0, + kind: InstanceKind.kPlainInstance, + classRef: classRefForUnknown, + ); expect(metadata.length, equals(0)); }); } From 0fedc4bf196fc44b27f988fc8f29047acf30e3f3 Mon Sep 17 00:00:00 2001 From: Anna Gringauze Date: Tue, 25 Apr 2023 15:25:19 -0700 Subject: [PATCH 3/4] update changelog ref --- dwds/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dwds/CHANGELOG.md b/dwds/CHANGELOG.md index dca5e719e..4cc1af707 100644 --- a/dwds/CHANGELOG.md +++ b/dwds/CHANGELOG.md @@ -3,7 +3,7 @@ - Do not show async frame errors on evaluation. - [#2073](https://github.com/dart-lang/webdev/pull/2073) - Refactor code for presenting record instances. - [#2074](https://github.com/dart-lang/webdev/pull/2074) - Display record types concisely. - [#2070](https://github.com/dart-lang/webdev/pull/2070) -- Simplify class metadata. - [#2070](https://github.com/dart-lang/webdev/pull/2070) +- Simplify class metadata. - [#2102](https://github.com/dart-lang/webdev/pull/2102) ## 19.0.0 From e5f2938615a35d16db47e4af42d420c47084755e Mon Sep 17 00:00:00 2001 From: Anna Gringauze Date: Tue, 25 Apr 2023 15:28:56 -0700 Subject: [PATCH 4/4] Cleanup --- dwds/lib/src/debugging/instance.dart | 63 ++-------------------------- 1 file changed, 4 insertions(+), 59 deletions(-) diff --git a/dwds/lib/src/debugging/instance.dart b/dwds/lib/src/debugging/instance.dart index f6e389e9c..92612a1a9 100644 --- a/dwds/lib/src/debugging/instance.dart +++ b/dwds/lib/src/debugging/instance.dart @@ -860,70 +860,15 @@ class InstanceHelper extends Domain { identityHashCode: remoteObject.objectId.hashCode, classRef: metaData.classRef, )..length = metaData.length; - - // if (metaData.isSystemList) { - // return InstanceRef( - // kind: InstanceKind.kList, - // id: objectId, - // identityHashCode: remoteObject.objectId.hashCode, - // classRef: metaData.classRef, - // )..length = metaData.length; - // } - // if (metaData.isSystemMap) { - // return InstanceRef( - // kind: InstanceKind.kMap, - // id: objectId, - // identityHashCode: remoteObject.objectId.hashCode, - // classRef: metaData.classRef, - // )..length = metaData.length; - // } - // if (metaData.isRecord) { - // return InstanceRef( - // kind: InstanceKind.kRecord, - // id: objectId, - // identityHashCode: remoteObject.objectId.hashCode, - // classRef: metaData.classRef, - // )..length = metaData.length; - // } - // if (metaData.isRecordType) { - // return InstanceRef( - // kind: InstanceKind.kRecordType, - // id: objectId, - // identityHashCode: remoteObject.objectId.hashCode, - // classRef: metaData.classRef, - // )..length = metaData.length; - // } - // if (metaData.isSet) { - // return InstanceRef( - // kind: InstanceKind.kSet, - // id: objectId, - // identityHashCode: remoteObject.objectId.hashCode, - // classRef: metaData.classRef, - // )..length = metaData.length; - // } - // if (metaData.isNativeError) { - // return InstanceRef( - // kind: InstanceKind.kPlainInstance, - // id: objectId, - // identityHashCode: remoteObject.objectId.hashCode, - // classRef: classRefForNativeJsError, - // )..length = metaData.length; - // } - // return InstanceRef( - // kind: InstanceKind.kPlainInstance, - // id: objectId, - // identityHashCode: remoteObject.objectId.hashCode, - // classRef: metaData.classRef, - // ); case 'function': - final functionMetaData = await FunctionMetaData.metaDataFor( - inspector.remoteDebugger, - remoteObject, - ); final objectId = remoteObject.objectId; if (objectId == null) { return _primitiveInstanceRef(InstanceKind.kNull, remoteObject); } + final functionMetaData = await FunctionMetaData.metaDataFor( + inspector.remoteDebugger, + remoteObject, + ); return InstanceRef( kind: InstanceKind.kClosure, id: objectId,