From 8cc4f86e7d3ba76e345923b5112d6bb2bd0a7feb Mon Sep 17 00:00:00 2001 From: Michael Nebel Date: Thu, 4 Apr 2024 13:21:34 +0200 Subject: [PATCH] C#: Only attempt to generate models for properties that does not both have a get and a set accessor. --- .../modelgenerator/internal/CaptureModelsSpecific.qll | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/csharp/ql/src/utils/modelgenerator/internal/CaptureModelsSpecific.qll b/csharp/ql/src/utils/modelgenerator/internal/CaptureModelsSpecific.qll index bc994491d6e..566645a197f 100644 --- a/csharp/ql/src/utils/modelgenerator/internal/CaptureModelsSpecific.qll +++ b/csharp/ql/src/utils/modelgenerator/internal/CaptureModelsSpecific.qll @@ -27,6 +27,10 @@ private predicate isHigherOrder(CS::Callable api) { ) } +private predicate irrelevantAccessor(CS::Accessor a) { + exists(CS::Property p | p = a.getDeclaration() | exists(p.getSetter()) and exists(p.getGetter())) +} + /** * Holds if it is relevant to generate models for `api`. */ @@ -40,7 +44,10 @@ private predicate isRelevantForModels(CS::Callable api) { not api.(CS::Constructor).isParameterless() and // Disregard all APIs that have a manual model. not api = any(FlowSummaryImpl::Public::SummarizedCallable sc | sc.applyManualModel()) and - not api = any(FlowSummaryImpl::Public::NeutralSummaryCallable sc | sc.hasManualModel()) + not api = any(FlowSummaryImpl::Public::NeutralSummaryCallable sc | sc.hasManualModel()) and + // Disregard properties that have both a get and a set accessor, + // which implicitly means auto implemented properties. + not irrelevantAccessor(api) } /**