diff --git a/dwds/lib/src/debugging/instance.dart b/dwds/lib/src/debugging/instance.dart index c7bf045ac..450f3e241 100644 --- a/dwds/lib/src/debugging/instance.dart +++ b/dwds/lib/src/debugging/instance.dart @@ -288,7 +288,6 @@ class InstanceHelper extends Domain { // // For maps and lists it's more complicated. Treat the actual SDK versions // of these as special. - // TODO(alanknight): Handle superclass fields. final fieldNameExpression = '''function() { const sdk = ${globalLoadStrategy.loadModuleSnippet}("dart_sdk"); const sdk_utils = sdk.dart; @@ -302,7 +301,9 @@ class InstanceHelper extends Domain { const privateFields = sdk_utils.getOwnPropertySymbols(fields); const nonSymbolNames = privateFields.map(sym => sym.description); const publicFieldNames = sdk_utils.getOwnPropertyNames(fields); - return nonSymbolNames.concat(publicFieldNames).join(','); + const symbolNames = Object.getOwnPropertySymbols(this) + .map(sym => sym.description.split('.').slice(-1)[0]); + return nonSymbolNames.concat(publicFieldNames).concat(symbolNames).join(','); } '''; var allNames = (await inspector diff --git a/dwds/test/inspector_test.dart b/dwds/test/inspector_test.dart index aa2b16874..c2cf6d6da 100644 --- a/dwds/test/inspector_test.dart +++ b/dwds/test/inspector_test.dart @@ -84,6 +84,7 @@ void main() { properties.map((p) => p.name).where((x) => x != '__proto__').toList(); var expected = [ '_privateField', + 'abstractField', 'closure', 'count', 'message', diff --git a/dwds/test/instance_test.dart b/dwds/test/instance_test.dart index d3a4d17b4..0525cf8d7 100644 --- a/dwds/test/instance_test.dart +++ b/dwds/test/instance_test.dart @@ -141,6 +141,7 @@ void main() { instance.fields.map((boundField) => boundField.decl.name).toList(); expect(fieldNames, [ '_privateField', + 'abstractField', 'closure', 'count', 'message', diff --git a/example/web/scopes_main.dart b/example/web/scopes_main.dart index f00ef6fd7..e2063f0f1 100644 --- a/example/web/scopes_main.dart +++ b/example/web/scopes_main.dart @@ -3,7 +3,6 @@ // BSD-style license that can be found in the LICENSE file. /// An example with more complicated scope - import 'dart:async'; import 'dart:collection'; @@ -75,7 +74,11 @@ String libraryFunction(String arg) { return concat; } -class MyTestClass { +abstract class MyAbstractClass { + String abstractField = 'abstract-field-value'; +} + +class MyTestClass extends MyAbstractClass { final String message; String notFinal;