diff --git a/dev/tools/gen_defaults/lib/chip_template.dart b/dev/tools/gen_defaults/lib/chip_template.dart
index cdbe103..4d93833 100644
--- a/dev/tools/gen_defaults/lib/chip_template.dart
+++ b/dev/tools/gen_defaults/lib/chip_template.dart
@@ -19,6 +19,7 @@
   _${blockName}DefaultsM3(this.context, this.isEnabled)
     : super(
         elevation: ${elevation("$tokenGroup$variant.container")},
+        shape: ${shape("$tokenGroup.container")},
         showCheckmark: true,
       );
 
@@ -46,13 +47,9 @@
   Color? get deleteIconColor => ${color("$tokenGroup.with-icon.selected.icon.color")};
 
   @override
-  OutlinedBorder? get shape {
-    return ${shape("$tokenGroup.container")}.copyWith(
-      side: isEnabled
-        ? ${border('$tokenGroup$variant.outline')}
-        : ${border('$tokenGroup$variant.disabled.outline')},
-    );
-  }
+  BorderSide? get side => isEnabled
+    ? ${border('$tokenGroup$variant.outline')}
+    : ${border('$tokenGroup$variant.disabled.outline')};
 
   @override
   IconThemeData? get iconTheme => IconThemeData(
diff --git a/packages/flutter/lib/src/material/chip.dart b/packages/flutter/lib/src/material/chip.dart
index 65ee890..3e1eb6d 100644
--- a/packages/flutter/lib/src/material/chip.dart
+++ b/packages/flutter/lib/src/material/chip.dart
@@ -997,7 +997,6 @@
     final OutlinedBorder resolvedShape = MaterialStateProperty.resolveAs<OutlinedBorder?>(widget.shape, materialStates)
       ?? MaterialStateProperty.resolveAs<OutlinedBorder?>(chipTheme.shape, materialStates)
       ?? MaterialStateProperty.resolveAs<OutlinedBorder?>(chipDefaults.shape, materialStates)
-      // TODO(tahatesser): Remove this fallback when Material 2 is deprecated.
       ?? const StadiumBorder();
     return resolvedShape.copyWith(side: resolvedSide);
   }
@@ -2235,6 +2234,7 @@
   _ChipDefaultsM3(this.context, this.isEnabled)
     : super(
         elevation: 0.0,
+        shape: const RoundedRectangleBorder(borderRadius: BorderRadius.all(Radius.circular(8.0))),
         showCheckmark: true,
       );
 
@@ -2262,13 +2262,9 @@
   Color? get deleteIconColor => null;
 
   @override
-  OutlinedBorder? get shape {
-    return const RoundedRectangleBorder(borderRadius: BorderRadius.all(Radius.circular(8.0))).copyWith(
-      side: isEnabled
-        ? BorderSide(color: _colors.outline)
-        : BorderSide(color: _colors.onSurface.withOpacity(0.12)),
-    );
-  }
+  BorderSide? get side => isEnabled
+    ? BorderSide(color: _colors.outline)
+    : BorderSide(color: _colors.onSurface.withOpacity(0.12));
 
   @override
   IconThemeData? get iconTheme => IconThemeData(
diff --git a/packages/flutter/test/material/chip_test.dart b/packages/flutter/test/material/chip_test.dart
index 9f369c2..d098936 100644
--- a/packages/flutter/test/material/chip_test.dart
+++ b/packages/flutter/test/material/chip_test.dart
@@ -3503,60 +3503,6 @@
     expect(calledDelete, isTrue);
   });
 
-  testWidgets("Material3 - RawChip.shape's side is used when provided", (WidgetTester tester) async {
-    Widget buildChip({ OutlinedBorder? shape, BorderSide? side }) {
-      return MaterialApp(
-        theme: ThemeData(useMaterial3: true),
-        home: Material(
-          child: Center(
-            child: RawChip(
-              shape: shape,
-              side: side,
-              label: const Text('RawChip'),
-            ),
-          ),
-        ),
-      );
-    }
-
-    // Test [RawChip.shape] with a side.
-    await tester.pumpWidget(buildChip(
-      shape: const RoundedRectangleBorder(
-        side: BorderSide(color: Color(0xffff00ff)),
-        borderRadius: BorderRadius.all(Radius.circular(7.0)),
-      )),
-    );
-
-    // Chip should have the provided shape and the side from [RawChip.shape].
-    expect(
-      getMaterial(tester).shape,
-      const RoundedRectangleBorder(
-        side: BorderSide(color: Color(0xffff00ff)),
-        borderRadius: BorderRadius.all(Radius.circular(7.0)),
-      ),
-    );
-
-    // Test [RawChip.shape] with a side and [RawChip.side].
-    await tester.pumpWidget(buildChip(
-      shape: const RoundedRectangleBorder(
-        side: BorderSide(color: Color(0xffff00ff)),
-        borderRadius: BorderRadius.all(Radius.circular(7.0)),
-      ),
-      side: const BorderSide(color: Color(0xfffff000))),
-    );
-    await tester.pumpAndSettle();
-
-    // Chip use shape from [RawChip.shape] and the side from [RawChip.side].
-    // [RawChip.shape]'s side should be ignored.
-    expect(
-      getMaterial(tester).shape,
-      const RoundedRectangleBorder(
-        side: BorderSide(color: Color(0xfffff000)),
-        borderRadius: BorderRadius.all(Radius.circular(7.0)),
-      ),
-    );
-  });
-
   group('Material 2', () {
     // These tests are only relevant for Material 2. Once Material 2
     // support is deprecated and the APIs are removed, these tests
diff --git a/packages/flutter/test/material/chip_theme_test.dart b/packages/flutter/test/material/chip_theme_test.dart
index 4ff0c5c..2303b56 100644
--- a/packages/flutter/test/material/chip_theme_test.dart
+++ b/packages/flutter/test/material/chip_theme_test.dart
@@ -928,64 +928,6 @@
       )),
     );
   });
-
-  testWidgets("Material3 - RawChip.shape's side is used when provided", (WidgetTester tester) async {
-    Widget buildChip({ OutlinedBorder? shape, BorderSide? side }) {
-      return MaterialApp(
-        theme: ThemeData(
-          useMaterial3: true,
-          chipTheme: ChipThemeData(
-            shape: shape,
-            side: side,
-          ),
-        ),
-        home: const Material(
-          child: Center(
-            child: RawChip(
-              label: Text('RawChip'),
-            ),
-          ),
-        ),
-      );
-    }
-
-    // Test [RawChip.shape] with a side.
-    await tester.pumpWidget(buildChip(
-      shape: const RoundedRectangleBorder(
-        side: BorderSide(color: Color(0xffff00ff)),
-        borderRadius: BorderRadius.all(Radius.circular(7.0)),
-      )),
-    );
-
-    // Chip should have the provided shape and the side from [RawChip.shape].
-    expect(
-      getMaterial(tester).shape,
-      const RoundedRectangleBorder(
-        side: BorderSide(color: Color(0xffff00ff)),
-        borderRadius: BorderRadius.all(Radius.circular(7.0)),
-      ),
-    );
-
-    // Test [RawChip.shape] with a side and [RawChip.side].
-    await tester.pumpWidget(buildChip(
-      shape: const RoundedRectangleBorder(
-        side: BorderSide(color: Color(0xffff00ff)),
-        borderRadius: BorderRadius.all(Radius.circular(7.0)),
-      ),
-      side: const BorderSide(color: Color(0xfffff000))),
-    );
-    await tester.pumpAndSettle();
-
-    // Chip use shape from [RawChip.shape] and the side from [RawChip.side].
-    // [RawChip.shape]'s side should be ignored.
-    expect(
-      getMaterial(tester).shape,
-      const RoundedRectangleBorder(
-        side: BorderSide(color: Color(0xfffff000)),
-        borderRadius: BorderRadius.all(Radius.circular(7.0)),
-      ),
-    );
-  });
 }
 
 class _MaterialStateOutlinedBorder extends StadiumBorder implements MaterialStateOutlinedBorder {
