diff --git a/pkg/compiler/test/dump_info/data/deferred_future/lib2.dart b/pkg/compiler/test/dump_info/data/deferred_future/lib2.dart
index 81cc3a1..572c050 100644
--- a/pkg/compiler/test/dump_info/data/deferred_future/lib2.dart
+++ b/pkg/compiler/test/dump_info/data/deferred_future/lib2.dart
@@ -15,6 +15,20 @@
 
 // @dart = 2.7
 
+/*class: A:class=[{
+  "id": "class/memory:sdk/tests/web/native/lib2.dart::A",
+  "kind": "class",
+  "name": "A",
+  "size": 68,
+  "outputUnit": "outputUnit/1",
+  "parent": "library/memory:sdk/tests/web/native/lib2.dart::",
+  "modifiers": {
+    "abstract": false
+  },
+  "children": [
+    "function/memory:sdk/tests/web/native/lib2.dart::A.method"
+  ]
+}]*/
 class A {
   const A();
 
diff --git a/pkg/compiler/test/dump_info/data/js_members.dart b/pkg/compiler/test/dump_info/data/js_members.dart
index db9ca6b..6f18324 100644
--- a/pkg/compiler/test/dump_info/data/js_members.dart
+++ b/pkg/compiler/test/dump_info/data/js_members.dart
@@ -20,6 +20,22 @@
 external void eval(String code);
 
 @JS()
+/*class: Foo:class=[{
+  "id": "class/memory:sdk/tests/web/native/main.dart::Foo",
+  "kind": "class",
+  "name": "Foo",
+  "size": 54,
+  "outputUnit": "outputUnit/main",
+  "parent": "library/memory:sdk/tests/web/native/main.dart::",
+  "modifiers": {
+    "abstract": false
+  },
+  "children": [
+    "function/memory:sdk/tests/web/native/main.dart::Foo.mixedPositionalArgs",
+    "function/memory:sdk/tests/web/native/main.dart::Foo.singleArg",
+    "function/memory:sdk/tests/web/native/main.dart::Foo.singlePositionalArg"
+  ]
+}]*/
 class Foo {
   external factory Foo();
   /*member: Foo.singleArg:function=[{
@@ -117,6 +133,18 @@
 }
 
 @JS()
+/*class: Bar:class=[{
+  "id": "class/memory:sdk/tests/web/native/main.dart::Bar",
+  "kind": "class",
+  "name": "Bar",
+  "size": 54,
+  "outputUnit": "outputUnit/main",
+  "parent": "library/memory:sdk/tests/web/native/main.dart::",
+  "modifiers": {
+    "abstract": false
+  },
+  "children": []
+}]*/
 class Bar {
   external static singleArg(a);
   external static singlePositionalArg([dynamic? a]);
diff --git a/pkg/compiler/test/dump_info/data/members.dart b/pkg/compiler/test/dump_info/data/members.dart
index 8538881..6494321 100644
--- a/pkg/compiler/test/dump_info/data/members.dart
+++ b/pkg/compiler/test/dump_info/data/members.dart
@@ -13,6 +13,25 @@
   ],
   "canonicalUri": "memory:sdk/tests/web/native/main.dart"
 }]*/
+/*class: C:class=[{
+  "id": "class/memory:sdk/tests/web/native/main.dart::C",
+  "kind": "class",
+  "name": "C",
+  "size": 46,
+  "outputUnit": "outputUnit/main",
+  "parent": "library/memory:sdk/tests/web/native/main.dart::",
+  "modifiers": {
+    "abstract": false
+  },
+  "children": [
+    "field/memory:sdk/tests/web/native/main.dart::C.counter",
+    "field/memory:sdk/tests/web/native/main.dart::C.value",
+    "field/memory:sdk/tests/web/native/main.dart::C.y",
+    "function/memory:sdk/tests/web/native/main.dart::C.C._default",
+    "function/memory:sdk/tests/web/native/main.dart::C.C.create",
+    "function/memory:sdk/tests/web/native/main.dart::C.compute"
+  ]
+}]*/
 class C {
   /*member: C.value:
    function=[{
@@ -186,6 +205,31 @@
 }]*/
 void F() {}
 
+/*class: A:
+ class=[{
+  "id": "class/memory:sdk/tests/web/native/main.dart::A",
+  "kind": "class",
+  "name": "A",
+  "size": 46,
+  "outputUnit": "outputUnit/main",
+  "parent": "library/memory:sdk/tests/web/native/main.dart::",
+  "modifiers": {
+    "abstract": false
+  },
+  "children": [
+    "field/memory:sdk/tests/web/native/main.dart::A.a",
+    "function/memory:sdk/tests/web/native/main.dart::A.A"
+  ]
+}],
+ classType=[{
+  "id": "classType/memory:sdk/tests/web/native/main.dart::A",
+  "kind": "classType",
+  "name": "A",
+  "size": 0,
+  "outputUnit": "outputUnit/main",
+  "parent": "library/memory:sdk/tests/web/native/main.dart::"
+}]
+*/
 class A {
   /*member: A.a:function=[{
   "id": "field/memory:sdk/tests/web/native/main.dart::A.a",
diff --git a/pkg/compiler/test/dump_info/dump_info_test.dart b/pkg/compiler/test/dump_info/dump_info_test.dart
index b27abdf..411f65f 100644
--- a/pkg/compiler/test/dump_info/dump_info_test.dart
+++ b/pkg/compiler/test/dump_info/dump_info_test.dart
@@ -21,7 +21,7 @@
 
 main(List<String> args) {
   asyncTest(() async {
-    Directory dataDir = new Directory.fromUri(Platform.script.resolve('data'));
+    Directory dataDir = Directory.fromUri(Platform.script.resolve('data'));
     print('Testing output of dump-info');
     print('==================================================================');
     await checkTests(dataDir, const DumpInfoDataComputer(),
@@ -59,7 +59,7 @@
         isBackwardCompatible: true, filterTreeshaken: false);
     DumpInfoStateData dumpInfoState = compiler.dumpInfoStateForTesting;
 
-    Features features = new Features();
+    final features = Features();
     final libraryInfo = dumpInfoState.entityToInfo[library];
     if (libraryInfo == null) return;
 
@@ -67,8 +67,42 @@
         Tags.library, indentedEncoder.convert(libraryInfo.accept(converter)));
 
     final id = LibraryId(library.canonicalUri);
-    actualMap[id] = new ActualData<Features>(
-        id, features, library.canonicalUri, -1, library);
+    actualMap[id] =
+        ActualData<Features>(id, features, library.canonicalUri, -1, library);
+  }
+
+  @override
+  void computeClassData(Compiler compiler, ClassEntity cls,
+      Map<Id, ActualData<Features>> actualMap,
+      {bool verbose: false}) {
+    final converter = info.AllInfoToJsonConverter(
+        isBackwardCompatible: true, filterTreeshaken: false);
+    DumpInfoStateData dumpInfoState = compiler.dumpInfoStateForTesting;
+
+    final features = Features();
+    final classInfo = dumpInfoState.entityToInfo[cls];
+    if (classInfo == null) return;
+
+    features.addElement(
+        Tags.clazz, indentedEncoder.convert(classInfo.accept(converter)));
+    final classTypeInfos =
+        dumpInfoState.info.classTypes.where((i) => i.name == classInfo.name);
+    assert(
+        classTypeInfos.length < 2,
+        'Ambiguous class type info resolution. '
+        'Expected 0 or 1 elements, found: $classTypeInfos');
+    if (classTypeInfos.length == 1) {
+      features.addElement(Tags.classType,
+          indentedEncoder.convert(classTypeInfos.first.accept(converter)));
+    }
+
+    JsClosedWorld closedWorld = compiler.backendClosedWorldForTesting;
+    JsToElementMap elementMap = closedWorld.elementMap;
+    ir.Class node = elementMap.getClassDefinition(cls).node;
+    ClassId id = ClassId(node.name);
+    ir.TreeNode nodeWithOffset = computeTreeNodeWithOffset(node);
+    actualMap[id] = ActualData<Features>(id, features,
+        nodeWithOffset?.location?.file, nodeWithOffset?.fileOffset, cls);
   }
 
   @override
@@ -79,7 +113,7 @@
         isBackwardCompatible: true, filterTreeshaken: false);
     DumpInfoStateData dumpInfoState = compiler.dumpInfoStateForTesting;
 
-    Features features = new Features();
+    final features = Features();
     final functionInfo = dumpInfoState.entityToInfo[member];
     if (functionInfo == null) return;
 
@@ -106,7 +140,7 @@
     ir.Member node = elementMap.getMemberDefinition(member).node;
     Id id = computeMemberId(node);
     ir.TreeNode nodeWithOffset = computeTreeNodeWithOffset(node);
-    actualMap[id] = new ActualData<Features>(id, features,
+    actualMap[id] = ActualData<Features>(id, features,
         nodeWithOffset?.location?.file, nodeWithOffset?.fileOffset, member);
   }
 
@@ -134,7 +168,7 @@
     } else {
       List<String> errorsFound = [];
       Features expectedFeatures = Features.fromText(expectedData);
-      Set<String> validatedFeatures = new Set<String>();
+      Set<String> validatedFeatures = Set<String>();
       expectedFeatures.forEach((String key, Object expectedValue) {
         validatedFeatures.add(key);
         Object actualValue = actualFeatures[key];
diff --git a/tools/VERSION b/tools/VERSION
index 54c3858..7521b97 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 18
 PATCH 0
-PRERELEASE 52
+PRERELEASE 53
 PRERELEASE_PATCH 0
\ No newline at end of file
