Skip to content

Commit 5bf1f99

Browse files
authored
Merge pull request #45726 from wddgit/bugFixLabelInExceptionMessage
Fix bug affecting label in exception message
2 parents 96fbe75 + 5dea066 commit 5bf1f99

File tree

4 files changed

+30
-33
lines changed

4 files changed

+30
-33
lines changed

FWCore/Framework/interface/EDConsumerBase.h

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
#include <vector>
2626
#include <array>
2727
#include <cassert>
28+
#include <tuple>
2829

2930
// user include files
3031
#include "DataFormats/Provenance/interface/BranchType.h"
@@ -196,14 +197,15 @@ namespace edm {
196197

197198
template <typename ESProduct, typename ESRecord, Transition Tr = Transition::Event>
198199
auto esConsumes(ESInputTag const& tag) {
199-
auto index = recordESConsumes(Tr,
200-
eventsetup::EventSetupRecordKey::makeKey<
201-
std::conditional_t<std::is_same_v<ESRecord, edm::DefaultRecord>,
202-
eventsetup::default_record_t<ESHandleAdapter<ESProduct>>,
203-
ESRecord>>(),
204-
eventsetup::heterocontainer::HCTypeTag::make<ESProduct>(),
205-
tag);
206-
return ESGetToken<ESProduct, ESRecord>{static_cast<unsigned int>(Tr), index, labelFor(index)};
200+
auto [index, productLabel] =
201+
recordESConsumes(Tr,
202+
eventsetup::EventSetupRecordKey::makeKey<
203+
std::conditional_t<std::is_same_v<ESRecord, edm::DefaultRecord>,
204+
eventsetup::default_record_t<ESHandleAdapter<ESProduct>>,
205+
ESRecord>>(),
206+
eventsetup::heterocontainer::HCTypeTag::make<ESProduct>(),
207+
tag);
208+
return ESGetToken<ESProduct, ESRecord>{static_cast<unsigned int>(Tr), index, productLabel};
207209
}
208210

209211
template <Transition Tr = Transition::Event>
@@ -219,9 +221,8 @@ namespace edm {
219221
///Used with EventSetupRecord::doGet
220222
template <Transition Tr = Transition::Event>
221223
ESGetTokenGeneric esConsumes(eventsetup::EventSetupRecordKey const& iRecord, eventsetup::DataKey const& iKey) {
222-
return ESGetTokenGeneric(static_cast<unsigned int>(Tr),
223-
recordESConsumes(Tr, iRecord, iKey.type(), ESInputTag("", iKey.name().value())),
224-
iRecord.type());
224+
auto [index, productLabel] = recordESConsumes(Tr, iRecord, iKey.type(), ESInputTag("", iKey.name().value()));
225+
return ESGetTokenGeneric(static_cast<unsigned int>(Tr), index, iRecord.type());
225226
}
226227

227228
//used for FinalPath
@@ -231,12 +232,10 @@ namespace edm {
231232
virtual void extendUpdateLookup(BranchType iBranchType, ProductResolverIndexHelper const&);
232233
virtual void registerLateConsumes(eventsetup::ESRecordsToProductResolverIndices const&) {}
233234
unsigned int recordConsumes(BranchType iBranch, TypeToGet const& iType, edm::InputTag const& iTag, bool iAlwaysGets);
234-
ESTokenIndex recordESConsumes(Transition,
235-
eventsetup::EventSetupRecordKey const&,
236-
eventsetup::heterocontainer::HCTypeTag const&,
237-
edm::ESInputTag const& iTag);
238-
239-
const char* labelFor(ESTokenIndex) const;
235+
std::tuple<ESTokenIndex, char const*> recordESConsumes(Transition,
236+
eventsetup::EventSetupRecordKey const&,
237+
eventsetup::heterocontainer::HCTypeTag const&,
238+
edm::ESInputTag const& iTag);
240239

241240
void throwTypeMismatch(edm::TypeID const&, EDGetToken) const;
242241
void throwBranchMismatch(BranchType, EDGetToken) const;

FWCore/Framework/interface/EventSetupRecord.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -206,9 +206,9 @@ namespace edm {
206206
template <template <typename> typename H, typename T, typename R>
207207
H<T> noResolverHandle(ESGetToken<T, R> const& iToken) const {
208208
auto const key = this->key();
209-
auto name = iToken.name();
210-
return H<T>{makeESHandleExceptionFactory([key, name] {
211-
NoProductResolverException<T> ex(key, DataKey{DataKey::makeTypeTag<T>(), name});
209+
auto productLabel = iToken.productLabel();
210+
return H<T>{makeESHandleExceptionFactory([key, productLabel] {
211+
NoProductResolverException<T> ex(key, DataKey{DataKey::makeTypeTag<T>(), productLabel});
212212
return std::make_exception_ptr(ex);
213213
})};
214214
}

FWCore/Framework/src/EDConsumerBase.cc

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -186,10 +186,11 @@ void EDConsumerBase::updateLookup(eventsetup::ESRecordsToProductResolverIndices
186186
}
187187
}
188188

189-
ESTokenIndex EDConsumerBase::recordESConsumes(Transition iTrans,
190-
eventsetup::EventSetupRecordKey const& iRecord,
191-
eventsetup::heterocontainer::HCTypeTag const& iDataType,
192-
edm::ESInputTag const& iTag) {
189+
std::tuple<ESTokenIndex, char const*> EDConsumerBase::recordESConsumes(
190+
Transition iTrans,
191+
eventsetup::EventSetupRecordKey const& iRecord,
192+
eventsetup::heterocontainer::HCTypeTag const& iDataType,
193+
edm::ESInputTag const& iTag) {
193194
if (frozen_) {
194195
throwESConsumesCallAfterFrozen(iRecord, iDataType, iTag);
195196
}
@@ -218,7 +219,8 @@ ESTokenIndex EDConsumerBase::recordESConsumes(Transition iTrans,
218219
auto indexForToken = esItemsToGetFromTransition_[static_cast<unsigned int>(iTrans)].size();
219220
esItemsToGetFromTransition_[static_cast<unsigned int>(iTrans)].emplace_back(-1 * (index + 1));
220221
esRecordsToGetFromTransition_[static_cast<unsigned int>(iTrans)].emplace_back();
221-
return ESTokenIndex{static_cast<ESTokenIndex::Value_t>(indexForToken)};
222+
return {ESTokenIndex{static_cast<ESTokenIndex::Value_t>(indexForToken)},
223+
m_esTokenInfo.get<kESLookupInfo>(index).m_key.name().value()};
222224
}
223225

224226
//
@@ -590,7 +592,3 @@ std::vector<ConsumesInfo> EDConsumerBase::consumesInfo() const {
590592
}
591593
return result;
592594
}
593-
594-
const char* EDConsumerBase::labelFor(ESTokenIndex iIndex) const {
595-
return m_esTokenInfo.get<kESLookupInfo>(iIndex.value()).m_key.name().value();
596-
}

FWCore/Utilities/interface/ESGetToken.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -75,11 +75,11 @@ namespace edm {
7575
static constexpr ESTokenIndex invalidIndex() noexcept { return ESTokenIndex{std::numeric_limits<int>::max()}; }
7676

7777
private:
78-
explicit constexpr ESGetToken(unsigned int transitionID, ESTokenIndex index, char const* label) noexcept
79-
: m_label{label}, m_transitionID{transitionID}, m_index{index} {}
78+
explicit constexpr ESGetToken(unsigned int transitionID, ESTokenIndex index, char const* productLabel) noexcept
79+
: m_productLabel{productLabel}, m_transitionID{transitionID}, m_index{index} {}
8080

81-
constexpr char const* name() const noexcept { return m_label; }
82-
char const* m_label{nullptr};
81+
constexpr char const* productLabel() const noexcept { return m_productLabel; }
82+
char const* m_productLabel{nullptr};
8383
unsigned int m_transitionID{std::numeric_limits<unsigned int>::max()};
8484
ESTokenIndex m_index{std::numeric_limits<int>::max()};
8585
};

0 commit comments

Comments
 (0)