Skip to content

Commit e958560

Browse files
MarkzipanCommit Queue
authored andcommitted
[ddc] Adding error messages for illegal enum conversions after a hot reload.
Fixes: #60102, #60104 Change-Id: I5b89edffc3aa753d0882c2b9fd6aefd9bfef7175 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/416080 Reviewed-by: Nate Biggs <[email protected]> Reviewed-by: Nicholas Shahan <[email protected]> Commit-Queue: Mark Zhou <[email protected]>
1 parent 55fb750 commit e958560

File tree

1 file changed

+18
-0
lines changed

1 file changed

+18
-0
lines changed

pkg/dev_compiler/lib/src/kernel/hot_reload_delta_inspector.dart

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,9 @@ class HotReloadDeltaInspector {
4040
continue;
4141
}
4242
_checkClassTypeParametersCountChange(acceptedClass, deltaClass);
43+
if (acceptedClass.isEnum || deltaClass.isEnum) {
44+
_checkEnumIllegalConversion(acceptedClass, deltaClass);
45+
}
4346
if (acceptedClass.hasConstConstructor) {
4447
_checkConstClassConsistency(acceptedClass, deltaClass);
4548
_checkConstClassDeletedFields(acceptedClass, deltaClass);
@@ -110,6 +113,21 @@ class HotReloadDeltaInspector {
110113
'Class: ${deltaClass.name}');
111114
}
112115
}
116+
117+
/// Records a rejection error when a class is redefined as or from an [Enum].
118+
///
119+
/// [acceptedClass] and [deltaClass] must represent the same class in the
120+
/// last known accepted and delta components respectively.
121+
void _checkEnumIllegalConversion(Class acceptedClass, Class deltaClass) {
122+
if (acceptedClass.isEnum && !deltaClass.isEnum) {
123+
_rejectionMessages
124+
.add('Enum class cannot be redefined to be a non-enum class.'
125+
'Class: ${deltaClass.name}');
126+
} else if (!acceptedClass.isEnum && deltaClass.isEnum) {
127+
_rejectionMessages.add('Class cannot be redefined to be a enum class.'
128+
'Class: ${deltaClass.name}');
129+
}
130+
}
113131
}
114132

115133
const hotReloadLibraryMetadataTag = 'ddc.hot-reload-library.metadata';

0 commit comments

Comments
 (0)