[dev_compiler] Fix incorrect debugger information on record types.

Closes: https://github.com/dart-lang/sdk/issues/54609
Change-Id: Ib8a24974ab1a5865d00ee361a151afebdf8a5e65
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/345825
Commit-Queue: Anna Gringauze <annagrin@google.com>
Reviewed-by: Elliott Brooks <elliottbrooks@google.com>
Reviewed-by: Nicholas Shahan <nshahan@google.com>
This commit is contained in:
Anna Gringauze
2024-01-19 18:13:39 +00:00
committed by Commit Queue
parent 74a4d59bba
commit 67e052d7e9
2 changed files with 23 additions and 19 deletions
@@ -350,21 +350,7 @@ void runSharedTests(
'runtimeKind': 'list',
'length': 3,
});
// Old type system incorrectly returns 'dart:_interceptors|List<int>'
}, skip: !setup.canaryFeatures);
test('getObjectMetadata (List) (old types)', () async {
await driver.checkRuntimeInFrame(
breakpointId: 'BP',
expression: 'dart.getObjectMetadata(list)',
expectedResult: {
'className': 'List<int>',
'libraryId': 'dart:_interceptors',
'runtimeKind': 'list',
'length': 3,
});
// Old type system incorrectly returns 'dart:_interceptors|List<int>'
}, skip: setup.canaryFeatures);
});
test('getObjectMetadata (Map)', () async {
await driver.checkRuntimeInFrame(
@@ -538,15 +524,33 @@ void runSharedTests(
});
test('getObjectMetadata (Record type)', () async {
var typeName = await driver.evaluateDartExpressionInFrame(
breakpointId: 'BP',
expression: 'recordType.toString()',
);
expect(typeName, '(int, int, {String name})');
await driver.checkRuntimeInFrame(
breakpointId: 'BP',
expression: 'dart.getObjectMetadata(recordType)',
expectedResult: {
'className': 'RecordType',
'libraryId': 'dart:_runtime',
'className': 'Type',
'libraryId': 'dart:core',
'runtimeKind': 'recordType',
'length': 3,
});
await driver.checkInFrame(
breakpointId: 'BP',
expression: 'record is Record',
expectedResult: 'true',
);
await driver.checkInFrame(
breakpointId: 'BP',
expression: 'recordType is Type',
expectedResult: 'true',
);
});
test('getObjectFieldNames (object)', () async {
@@ -316,8 +316,8 @@ Object getObjectMetadata(@notNull Object object) {
if (_isRecordType(object)) {
var elements = _recordTypeElementTypes(object);
var length = _get(elements, 'length');
_set(result, 'libraryId', 'dart:_runtime');
_set(result, 'className', 'RecordType');
_set(result, 'libraryId', 'dart:core');
_set(result, 'className', 'Type');
_set(result, 'runtimeKind', RuntimeObjectKind.recordType);
_set(result, 'length', length);
} else {