@@ -3640,103 +3640,6 @@ static bool shouldRecordMissingWitness(
3640
3640
return true ;
3641
3641
}
3642
3642
3643
- // / Prune the set of missing witnesses for the given conformance, eliminating
3644
- // / any requirements that do not actually need to satisfied.
3645
- static ArrayRef<ASTContext::MissingWitness> pruneMissingWitnesses (
3646
- ProtocolDecl *proto,
3647
- NormalProtocolConformance *conformance,
3648
- ArrayRef<ASTContext::MissingWitness> missingWitnesses,
3649
- SmallVectorImpl<ASTContext::MissingWitness> &scratch) {
3650
- if (missingWitnesses.empty ()) {
3651
- return missingWitnesses;
3652
- }
3653
-
3654
- ObjCRequirementMap map = getObjCRequirementMap (proto);
3655
-
3656
- // Consider each of the missing witnesses to remove any that should not
3657
- // longer be considered "missing".
3658
- llvm::SmallDenseSet<ObjCMethodKey> alreadyReportedAsMissing;
3659
- bool removedAny = false ;
3660
- for (unsigned missingWitnessIdx : indices (missingWitnesses)) {
3661
- const auto &missingWitness = missingWitnesses[missingWitnessIdx];
3662
-
3663
- // Local function to skip this particular witness.
3664
- auto skipWitness = [&] {
3665
- if (removedAny) {
3666
- return ;
3667
- }
3668
-
3669
- // This is the first witness we skipped. Copy all of the earlier
3670
- // missing witnesses over.
3671
- scratch.clear ();
3672
- scratch.append (
3673
- missingWitnesses.begin (),
3674
- missingWitnesses.begin () + missingWitnessIdx);
3675
- removedAny = true ;
3676
- };
3677
-
3678
- // Local function to add this particular witness.
3679
- auto addWitness = [&] {
3680
- if (removedAny)
3681
- scratch.push_back (missingWitness);
3682
- };
3683
-
3684
- // We only care about functions.
3685
- if (!isa<AbstractFunctionDecl>(missingWitness.requirement )) {
3686
- addWitness ();
3687
- continue ;
3688
- }
3689
-
3690
- // For an @objc protocol defined in Objective-C, the Clang importer might
3691
- // have imported the same underlying Objective-C declaration as more than
3692
- // one Swift declaration. Only one of those requirements should be witnessed
3693
- // so if the requirement sibling is witnessed then this requirement is not
3694
- // missing.
3695
-
3696
- // Prune requirements that come from other protocols - we don't want to
3697
- // attempt to diagnose those here since we won't be able to find their
3698
- // siblings.
3699
- if (proto != missingWitness.requirement ->getDeclContext ()->getAsDecl ()) {
3700
- skipWitness ();
3701
- continue ;
3702
- }
3703
-
3704
- if (!proto->isObjC ()) {
3705
- addWitness ();
3706
- continue ;
3707
- }
3708
-
3709
- auto fnRequirement = cast<AbstractFunctionDecl>(missingWitness.requirement );
3710
- auto key = getObjCMethodKey (fnRequirement);
3711
-
3712
- if (getObjCRequirementSibling (
3713
- proto, fnRequirement, map,
3714
- [conformance](AbstractFunctionDecl *candidate) {
3715
- return static_cast <bool >(conformance->getWitness (candidate));
3716
- })) {
3717
- skipWitness ();
3718
- continue ;
3719
- }
3720
-
3721
- // If we have already reported a function with this selector as missing,
3722
- // don't do it again.
3723
- if (alreadyReportedAsMissing.count (key)) {
3724
- skipWitness ();
3725
- continue ;
3726
- }
3727
-
3728
- // There is really a missing requirement for this witness.
3729
- alreadyReportedAsMissing.insert (key);
3730
- addWitness ();
3731
- }
3732
-
3733
- if (removedAny) {
3734
- return scratch;
3735
- }
3736
-
3737
- return missingWitnesses;
3738
- }
3739
-
3740
3643
static void diagnoseProtocolStubFixit (
3741
3644
NormalProtocolConformance *Conf,
3742
3645
llvm::SmallVector<ASTContext::MissingWitness, 4 > MissingWitnesses) {
@@ -3853,10 +3756,6 @@ bool ConformanceChecker::
3853
3756
diagnoseMissingWitnesses (MissingWitnessDiagnosisKind Kind, bool Delayed) {
3854
3757
auto LocalMissing = getLocalMissingWitness ();
3855
3758
3856
- SmallVector<ASTContext::MissingWitness, 4 > MissingWitnessScratch;
3857
- LocalMissing = pruneMissingWitnesses (
3858
- Proto, Conformance, LocalMissing, MissingWitnessScratch);
3859
-
3860
3759
// If this conformance has nothing to complain, return.
3861
3760
if (LocalMissing.empty ())
3862
3761
return false ;
0 commit comments