@@ -291,7 +291,12 @@ class ConstraintFix {
291
291
virtual bool diagnose (const Solution &solution,
292
292
bool asNote = false ) const = 0;
293
293
294
- virtual bool diagnoseForAmbiguity (ArrayRef<Solution> solutions) const { return false ; }
294
+ using CommonFixesArray =
295
+ ArrayRef<std::pair<const Solution *, const ConstraintFix *>>;
296
+
297
+ virtual bool diagnoseForAmbiguity (CommonFixesArray commonFixes) const {
298
+ return false ;
299
+ }
295
300
296
301
void print (llvm::raw_ostream &Out) const ;
297
302
@@ -847,11 +852,15 @@ class DefineMemberBasedOnUse final : public ConstraintFix {
847
852
848
853
bool diagnose (const Solution &solution, bool asNote = false ) const override ;
849
854
850
- bool diagnoseForAmbiguity (ArrayRef<Solution> solutions ) const override ;
855
+ bool diagnoseForAmbiguity (CommonFixesArray commonFixes ) const override ;
851
856
852
857
static DefineMemberBasedOnUse *create (ConstraintSystem &cs, Type baseType,
853
858
DeclNameRef member, bool alreadyDiagnosed,
854
859
ConstraintLocator *locator);
860
+
861
+ static bool classof (const ConstraintFix *fix) {
862
+ return fix->getKind () == FixKind::DefineMemberBasedOnUse;
863
+ }
855
864
};
856
865
857
866
class AllowInvalidMemberRef : public ConstraintFix {
@@ -1117,8 +1126,8 @@ class AddMissingArguments final
1117
1126
1118
1127
bool diagnose (const Solution &solution, bool asNote = false ) const override ;
1119
1128
1120
- bool diagnoseForAmbiguity (ArrayRef<Solution> solutions ) const override {
1121
- return diagnose (solutions .front ());
1129
+ bool diagnoseForAmbiguity (CommonFixesArray commonFixes ) const override {
1130
+ return diagnose (*commonFixes .front (). first );
1122
1131
}
1123
1132
1124
1133
static AddMissingArguments *create (ConstraintSystem &cs,
@@ -1161,8 +1170,8 @@ class RemoveExtraneousArguments final
1161
1170
1162
1171
bool diagnose (const Solution &solution, bool asNote = false ) const override ;
1163
1172
1164
- bool diagnoseForAmbiguity (ArrayRef<Solution> solutions ) const override {
1165
- return diagnose (solutions .front ());
1173
+ bool diagnoseForAmbiguity (CommonFixesArray commonFixes ) const override {
1174
+ return diagnose (*commonFixes .front (). first );
1166
1175
}
1167
1176
1168
1177
// / FIXME(diagnostics): Once `resolveDeclRefExpr` is gone this
@@ -1371,8 +1380,8 @@ class DefaultGenericArgument final : public ConstraintFix {
1371
1380
1372
1381
bool diagnose (const Solution &solution, bool asNote = false ) const override ;
1373
1382
1374
- bool diagnoseForAmbiguity (ArrayRef<Solution> solutions ) const override {
1375
- return diagnose (solutions .front ());
1383
+ bool diagnoseForAmbiguity (CommonFixesArray commonFixes ) const override {
1384
+ return diagnose (*commonFixes .front (). first );
1376
1385
}
1377
1386
1378
1387
static DefaultGenericArgument *create (ConstraintSystem &cs,
@@ -1446,8 +1455,8 @@ class IgnoreContextualType : public ContextualMismatch {
1446
1455
1447
1456
bool diagnose (const Solution &solution, bool asNote = false ) const override ;
1448
1457
1449
- bool diagnoseForAmbiguity (ArrayRef<Solution> solutions ) const override {
1450
- return diagnose (solutions .front ());
1458
+ bool diagnoseForAmbiguity (CommonFixesArray commonFixes ) const override {
1459
+ return diagnose (*commonFixes .front (). first );
1451
1460
}
1452
1461
1453
1462
static IgnoreContextualType *create (ConstraintSystem &cs, Type resultTy,
0 commit comments