From eeeafb6e0cf1be64160684e61362f0510365466c Mon Sep 17 00:00:00 2001 From: Martin Strecker Date: Tue, 11 Oct 2022 09:51:37 +0200 Subject: [PATCH 01/12] Add test for NHibernate --- .../Rules/Hotspots/ExecutingSqlQueriesTest.cs | 10 ++++++++++ .../Hotspots/ExecutingSqlQueries.NHibernate.cs | 15 +++++++++++++++ 2 files changed, 25 insertions(+) create mode 100644 analyzers/tests/SonarAnalyzer.UnitTest/TestCases/Hotspots/ExecutingSqlQueries.NHibernate.cs diff --git a/analyzers/tests/SonarAnalyzer.UnitTest/Rules/Hotspots/ExecutingSqlQueriesTest.cs b/analyzers/tests/SonarAnalyzer.UnitTest/Rules/Hotspots/ExecutingSqlQueriesTest.cs index fd920566aeb..45dff84427b 100644 --- a/analyzers/tests/SonarAnalyzer.UnitTest/Rules/Hotspots/ExecutingSqlQueriesTest.cs +++ b/analyzers/tests/SonarAnalyzer.UnitTest/Rules/Hotspots/ExecutingSqlQueriesTest.cs @@ -18,6 +18,7 @@ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ +using Microsoft.VisualStudio.TestTools.UnitTesting; using SonarAnalyzer.Common; using CS = SonarAnalyzer.Rules.CSharp; using VB = SonarAnalyzer.Rules.VisualBasic; @@ -135,5 +136,14 @@ public class ExecutingSqlQueriesTest .AddReferences(MetadataReferenceFacade.SystemData) .AddReferences(NuGetMetadataReference.ServiceStackOrmLite(Constants.NuGetLatestVersion)) .Verify(); + + [TestMethod] + public void ExecutingSqlQueries_NHibernate_CS() + { + builderCS + .AddPaths(@"ExecutingSqlQueries.NHibernate.cs") + .AddReferences(NuGetMetadataReference.NHibernate(Constants.NuGetLatestVersion)) + .Verify(); + } } } diff --git a/analyzers/tests/SonarAnalyzer.UnitTest/TestCases/Hotspots/ExecutingSqlQueries.NHibernate.cs b/analyzers/tests/SonarAnalyzer.UnitTest/TestCases/Hotspots/ExecutingSqlQueries.NHibernate.cs new file mode 100644 index 00000000000..1fa17c501fe --- /dev/null +++ b/analyzers/tests/SonarAnalyzer.UnitTest/TestCases/Hotspots/ExecutingSqlQueries.NHibernate.cs @@ -0,0 +1,15 @@ +using System; +using System.Linq; +using NHibernate; +using NHibernate.Impl; + +namespace Tests.Diagnostics +{ + class Program + { + public void ISessionMethods(ISession session, string query, string param) + { + session.CreateQuery(query + param); // Noncompliant + } + } +} From bb8796a2e0eb23ed0ea2c854e9a01eb152180890 Mon Sep 17 00:00:00 2001 From: Martin Strecker Date: Tue, 11 Oct 2022 10:42:56 +0200 Subject: [PATCH 02/12] Formattings --- .../Rules/Hotspots/ExecutingSqlQueriesTest.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/analyzers/tests/SonarAnalyzer.UnitTest/Rules/Hotspots/ExecutingSqlQueriesTest.cs b/analyzers/tests/SonarAnalyzer.UnitTest/Rules/Hotspots/ExecutingSqlQueriesTest.cs index 45dff84427b..41f72605c35 100644 --- a/analyzers/tests/SonarAnalyzer.UnitTest/Rules/Hotspots/ExecutingSqlQueriesTest.cs +++ b/analyzers/tests/SonarAnalyzer.UnitTest/Rules/Hotspots/ExecutingSqlQueriesTest.cs @@ -141,9 +141,8 @@ public class ExecutingSqlQueriesTest public void ExecutingSqlQueries_NHibernate_CS() { builderCS - .AddPaths(@"ExecutingSqlQueries.NHibernate.cs") + .AddPaths("ExecutingSqlQueries.NHibernate.cs") .AddReferences(NuGetMetadataReference.NHibernate(Constants.NuGetLatestVersion)) .Verify(); - } } } From 3d29e437be4c02cfc6b3244bc6478af6a321cd80 Mon Sep 17 00:00:00 2001 From: Martin Strecker Date: Wed, 12 Oct 2022 13:58:05 +0200 Subject: [PATCH 03/12] Fix after rebase --- .../Rules/Hotspots/ExecutingSqlQueriesTest.cs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/analyzers/tests/SonarAnalyzer.UnitTest/Rules/Hotspots/ExecutingSqlQueriesTest.cs b/analyzers/tests/SonarAnalyzer.UnitTest/Rules/Hotspots/ExecutingSqlQueriesTest.cs index 41f72605c35..4ef48d89674 100644 --- a/analyzers/tests/SonarAnalyzer.UnitTest/Rules/Hotspots/ExecutingSqlQueriesTest.cs +++ b/analyzers/tests/SonarAnalyzer.UnitTest/Rules/Hotspots/ExecutingSqlQueriesTest.cs @@ -18,7 +18,6 @@ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ -using Microsoft.VisualStudio.TestTools.UnitTesting; using SonarAnalyzer.Common; using CS = SonarAnalyzer.Rules.CSharp; using VB = SonarAnalyzer.Rules.VisualBasic; @@ -138,8 +137,7 @@ public class ExecutingSqlQueriesTest .Verify(); [TestMethod] - public void ExecutingSqlQueries_NHibernate_CS() - { + public void ExecutingSqlQueries_NHibernate_CS() => builderCS .AddPaths("ExecutingSqlQueries.NHibernate.cs") .AddReferences(NuGetMetadataReference.NHibernate(Constants.NuGetLatestVersion)) From abed0c4b5af388385de7fbf4ff6a1363b3d67826 Mon Sep 17 00:00:00 2001 From: Martin Strecker Date: Wed, 12 Oct 2022 14:09:52 +0200 Subject: [PATCH 04/12] Add support for CreateQuery --- analyzers/src/SonarAnalyzer.Common/Helpers/KnownType.cs | 1 + .../Rules/Hotspots/ExecutingSqlQueriesBase.cs | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/analyzers/src/SonarAnalyzer.Common/Helpers/KnownType.cs b/analyzers/src/SonarAnalyzer.Common/Helpers/KnownType.cs index 61383927e47..a0cbab0a741 100644 --- a/analyzers/src/SonarAnalyzer.Common/Helpers/KnownType.cs +++ b/analyzers/src/SonarAnalyzer.Common/Helpers/KnownType.cs @@ -130,6 +130,7 @@ internal sealed partial class KnownType internal static readonly KnownType NFluent_Check = new("NFluent.Check"); internal static readonly KnownType NFluent_FluentCheckException = new("NFluent.FluentCheckException"); internal static readonly KnownType NFluent_Kernel_FluentCheckException = new("NFluent.Kernel.FluentCheckException"); + internal static readonly KnownType NHibernate_ISession = new KnownType("NHibernate.ISession"); internal static readonly KnownType NLog_LogManager = new("NLog.LogManager"); internal static readonly KnownType NUnit_Framework_Assert = new("NUnit.Framework.Assert"); internal static readonly KnownType NUnit_Framework_AssertionException = new("NUnit.Framework.AssertionException"); diff --git a/analyzers/src/SonarAnalyzer.Common/Rules/Hotspots/ExecutingSqlQueriesBase.cs b/analyzers/src/SonarAnalyzer.Common/Rules/Hotspots/ExecutingSqlQueriesBase.cs index 10745749b6e..aef583f3e46 100644 --- a/analyzers/src/SonarAnalyzer.Common/Rules/Hotspots/ExecutingSqlQueriesBase.cs +++ b/analyzers/src/SonarAnalyzer.Common/Rules/Hotspots/ExecutingSqlQueriesBase.cs @@ -128,7 +128,8 @@ public abstract class ExecutingSqlQueriesBase Date: Wed, 12 Oct 2022 14:17:13 +0200 Subject: [PATCH 05/12] Add support for ramining ISession methods --- .../Rules/Hotspots/ExecutingSqlQueriesBase.cs | 10 ++++++++-- .../Hotspots/ExecutingSqlQueries.NHibernate.cs | 18 ++++++++++++++++-- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/analyzers/src/SonarAnalyzer.Common/Rules/Hotspots/ExecutingSqlQueriesBase.cs b/analyzers/src/SonarAnalyzer.Common/Rules/Hotspots/ExecutingSqlQueriesBase.cs index aef583f3e46..7f2f8f200d5 100644 --- a/analyzers/src/SonarAnalyzer.Common/Rules/Hotspots/ExecutingSqlQueriesBase.cs +++ b/analyzers/src/SonarAnalyzer.Common/Rules/Hotspots/ExecutingSqlQueriesBase.cs @@ -129,7 +129,11 @@ public abstract class ExecutingSqlQueriesBase Date: Wed, 12 Oct 2022 14:33:28 +0200 Subject: [PATCH 06/12] Add support and tests for SessionImpl --- .../SonarAnalyzer.Common/Helpers/KnownType.cs | 4 +++- .../Rules/Hotspots/ExecutingSqlQueriesBase.cs | 10 +++++++- .../ExecutingSqlQueries.NHibernate.cs | 24 +++++++++++++++++++ 3 files changed, 36 insertions(+), 2 deletions(-) diff --git a/analyzers/src/SonarAnalyzer.Common/Helpers/KnownType.cs b/analyzers/src/SonarAnalyzer.Common/Helpers/KnownType.cs index a0cbab0a741..79ca86abaf2 100644 --- a/analyzers/src/SonarAnalyzer.Common/Helpers/KnownType.cs +++ b/analyzers/src/SonarAnalyzer.Common/Helpers/KnownType.cs @@ -130,7 +130,9 @@ internal sealed partial class KnownType internal static readonly KnownType NFluent_Check = new("NFluent.Check"); internal static readonly KnownType NFluent_FluentCheckException = new("NFluent.FluentCheckException"); internal static readonly KnownType NFluent_Kernel_FluentCheckException = new("NFluent.Kernel.FluentCheckException"); - internal static readonly KnownType NHibernate_ISession = new KnownType("NHibernate.ISession"); + internal static readonly KnownType NHibernate_ISession = new ("NHibernate.ISession"); + internal static readonly KnownType NHibernate_Impl_SessionImpl = new("NHibernate.Impl.SessionImpl"); + internal static readonly KnownType NHibernate_Impl_AbstractSessionImpl = new("NHibernate.Impl.AbstractSessionImpl"); internal static readonly KnownType NLog_LogManager = new("NLog.LogManager"); internal static readonly KnownType NUnit_Framework_Assert = new("NUnit.Framework.Assert"); internal static readonly KnownType NUnit_Framework_AssertionException = new("NUnit.Framework.AssertionException"); diff --git a/analyzers/src/SonarAnalyzer.Common/Rules/Hotspots/ExecutingSqlQueriesBase.cs b/analyzers/src/SonarAnalyzer.Common/Rules/Hotspots/ExecutingSqlQueriesBase.cs index 7f2f8f200d5..049541eb30a 100644 --- a/analyzers/src/SonarAnalyzer.Common/Rules/Hotspots/ExecutingSqlQueriesBase.cs +++ b/analyzers/src/SonarAnalyzer.Common/Rules/Hotspots/ExecutingSqlQueriesBase.cs @@ -133,7 +133,15 @@ public abstract class ExecutingSqlQueriesBase Date: Wed, 12 Oct 2022 14:42:03 +0200 Subject: [PATCH 07/12] Add support and tests for AbstractSessionImplMethods --- .../Rules/Hotspots/ExecutingSqlQueriesBase.cs | 2 ++ .../Hotspots/ExecutingSqlQueries.NHibernate.cs | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/analyzers/src/SonarAnalyzer.Common/Rules/Hotspots/ExecutingSqlQueriesBase.cs b/analyzers/src/SonarAnalyzer.Common/Rules/Hotspots/ExecutingSqlQueriesBase.cs index 049541eb30a..e76bbc11651 100644 --- a/analyzers/src/SonarAnalyzer.Common/Rules/Hotspots/ExecutingSqlQueriesBase.cs +++ b/analyzers/src/SonarAnalyzer.Common/Rules/Hotspots/ExecutingSqlQueriesBase.cs @@ -139,9 +139,11 @@ public abstract class ExecutingSqlQueriesBase Date: Wed, 12 Oct 2022 15:28:20 +0200 Subject: [PATCH 08/12] Add CreateFilterAsync tests --- .../TestCases/Hotspots/ExecutingSqlQueries.NHibernate.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/analyzers/tests/SonarAnalyzer.UnitTest/TestCases/Hotspots/ExecutingSqlQueries.NHibernate.cs b/analyzers/tests/SonarAnalyzer.UnitTest/TestCases/Hotspots/ExecutingSqlQueries.NHibernate.cs index 2f914b3b2c2..f56b0239505 100644 --- a/analyzers/tests/SonarAnalyzer.UnitTest/TestCases/Hotspots/ExecutingSqlQueries.NHibernate.cs +++ b/analyzers/tests/SonarAnalyzer.UnitTest/TestCases/Hotspots/ExecutingSqlQueries.NHibernate.cs @@ -13,6 +13,9 @@ public async Task ISessionMethods(ISession session, string query, string param) session.CreateFilter(null, query); // Compliant session.CreateFilter(null, query + param); // Noncompliant + await session.CreateFilterAsync(null, query); // Compliant + await session.CreateFilterAsync(null, query + param); // Noncompliant + session.CreateQuery(query); // Compliant session.CreateQuery(query + param); // Noncompliant @@ -34,6 +37,9 @@ public async Task SessionImplMethods(SessionImpl session, string query, string p session.CreateFilter(null, query); // Compliant session.CreateFilter(null, query + param); // Noncompliant + await session.CreateFilterAsync(null, query); // Compliant + await session.CreateFilterAsync(null, query + param); // Noncompliant + session.CreateQuery(query); // Compliant session.CreateQuery(query + param); // Noncompliant From 64ad51aed5b1c390564799ac01314a689b1e113a Mon Sep 17 00:00:00 2001 From: Martin Strecker Date: Wed, 12 Oct 2022 15:28:58 +0200 Subject: [PATCH 09/12] Remove namespace --- .../ExecutingSqlQueries.NHibernate.cs | 95 +++++++++---------- 1 file changed, 46 insertions(+), 49 deletions(-) diff --git a/analyzers/tests/SonarAnalyzer.UnitTest/TestCases/Hotspots/ExecutingSqlQueries.NHibernate.cs b/analyzers/tests/SonarAnalyzer.UnitTest/TestCases/Hotspots/ExecutingSqlQueries.NHibernate.cs index f56b0239505..2264a662569 100644 --- a/analyzers/tests/SonarAnalyzer.UnitTest/TestCases/Hotspots/ExecutingSqlQueries.NHibernate.cs +++ b/analyzers/tests/SonarAnalyzer.UnitTest/TestCases/Hotspots/ExecutingSqlQueries.NHibernate.cs @@ -4,74 +4,71 @@ using NHibernate; using NHibernate.Impl; -namespace Tests.Diagnostics +class Program { - class Program + public async Task ISessionMethods(ISession session, string query, string param) { - public async Task ISessionMethods(ISession session, string query, string param) - { - session.CreateFilter(null, query); // Compliant - session.CreateFilter(null, query + param); // Noncompliant + session.CreateFilter(null, query); // Compliant + session.CreateFilter(null, query + param); // Noncompliant - await session.CreateFilterAsync(null, query); // Compliant - await session.CreateFilterAsync(null, query + param); // Noncompliant + await session.CreateFilterAsync(null, query); // Compliant + await session.CreateFilterAsync(null, query + param); // Noncompliant - session.CreateQuery(query); // Compliant - session.CreateQuery(query + param); // Noncompliant + session.CreateQuery(query); // Compliant + session.CreateQuery(query + param); // Noncompliant - session.CreateSQLQuery(query); // Compliant - session.CreateSQLQuery(query + param); // Noncompliant + session.CreateSQLQuery(query); // Compliant + session.CreateSQLQuery(query + param); // Noncompliant - session.Delete(query); // Compliant - session.Delete(query + param); // Noncompliant + session.Delete(query); // Compliant + session.Delete(query + param); // Noncompliant - await session.DeleteAsync(query); // Compliant - await session.DeleteAsync(query + param); // Noncompliant + await session.DeleteAsync(query); // Compliant + await session.DeleteAsync(query + param); // Noncompliant - session.GetNamedQuery(query); // Compliant - session.GetNamedQuery(query + param); // Noncompliant - } + session.GetNamedQuery(query); // Compliant + session.GetNamedQuery(query + param); // Noncompliant + } - public async Task SessionImplMethods(SessionImpl session, string query, string param) - { - session.CreateFilter(null, query); // Compliant - session.CreateFilter(null, query + param); // Noncompliant + public async Task SessionImplMethods(SessionImpl session, string query, string param) + { + session.CreateFilter(null, query); // Compliant + session.CreateFilter(null, query + param); // Noncompliant - await session.CreateFilterAsync(null, query); // Compliant - await session.CreateFilterAsync(null, query + param); // Noncompliant + await session.CreateFilterAsync(null, query); // Compliant + await session.CreateFilterAsync(null, query + param); // Noncompliant - session.CreateQuery(query); // Compliant - session.CreateQuery(query + param); // Noncompliant + session.CreateQuery(query); // Compliant + session.CreateQuery(query + param); // Noncompliant - session.CreateSQLQuery(query); // Compliant - session.CreateSQLQuery(query + param); // Noncompliant + session.CreateSQLQuery(query); // Compliant + session.CreateSQLQuery(query + param); // Noncompliant - session.Delete(query); // Compliant - session.Delete(query + param); // Noncompliant + session.Delete(query); // Compliant + session.Delete(query + param); // Noncompliant - await session.DeleteAsync(query); // Compliant - await session.DeleteAsync(query + param); // Noncompliant + await session.DeleteAsync(query); // Compliant + await session.DeleteAsync(query + param); // Noncompliant - session.GetNamedQuery(query); // Compliant - session.GetNamedQuery(query + param); // Noncompliant + session.GetNamedQuery(query); // Compliant + session.GetNamedQuery(query + param); // Noncompliant - session.GetNamedSQLQuery(query); // Compliant - session.GetNamedSQLQuery(query + param); // Noncompliant - } + session.GetNamedSQLQuery(query); // Compliant + session.GetNamedSQLQuery(query + param); // Noncompliant + } - public async Task AbstractSessionImplMethods(AbstractSessionImpl session, string query, string param) - { - session.CreateQuery(query); // Compliant - session.CreateQuery(query + param); // Noncompliant + public async Task AbstractSessionImplMethods(AbstractSessionImpl session, string query, string param) + { + session.CreateQuery(query); // Compliant + session.CreateQuery(query + param); // Noncompliant - session.CreateSQLQuery(query); // Compliant - session.CreateSQLQuery(query + param); // Noncompliant + session.CreateSQLQuery(query); // Compliant + session.CreateSQLQuery(query + param); // Noncompliant - session.GetNamedQuery(query); // Compliant - session.GetNamedQuery(query + param); // Noncompliant + session.GetNamedQuery(query); // Compliant + session.GetNamedQuery(query + param); // Noncompliant - session.GetNamedSQLQuery(query); // Compliant - session.GetNamedSQLQuery(query + param); // Noncompliant - } + session.GetNamedSQLQuery(query); // Compliant + session.GetNamedSQLQuery(query + param); // Noncompliant } } From 8eb7be9032e614577ae5f29e38529eaff3869c35 Mon Sep 17 00:00:00 2001 From: Martin Strecker Date: Wed, 12 Oct 2022 15:31:06 +0200 Subject: [PATCH 10/12] Fix code smell --- analyzers/src/SonarAnalyzer.Common/Helpers/KnownType.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/analyzers/src/SonarAnalyzer.Common/Helpers/KnownType.cs b/analyzers/src/SonarAnalyzer.Common/Helpers/KnownType.cs index 79ca86abaf2..2f067e1ff3a 100644 --- a/analyzers/src/SonarAnalyzer.Common/Helpers/KnownType.cs +++ b/analyzers/src/SonarAnalyzer.Common/Helpers/KnownType.cs @@ -130,7 +130,7 @@ internal sealed partial class KnownType internal static readonly KnownType NFluent_Check = new("NFluent.Check"); internal static readonly KnownType NFluent_FluentCheckException = new("NFluent.FluentCheckException"); internal static readonly KnownType NFluent_Kernel_FluentCheckException = new("NFluent.Kernel.FluentCheckException"); - internal static readonly KnownType NHibernate_ISession = new ("NHibernate.ISession"); + internal static readonly KnownType NHibernate_ISession = new("NHibernate.ISession"); internal static readonly KnownType NHibernate_Impl_SessionImpl = new("NHibernate.Impl.SessionImpl"); internal static readonly KnownType NHibernate_Impl_AbstractSessionImpl = new("NHibernate.Impl.AbstractSessionImpl"); internal static readonly KnownType NLog_LogManager = new("NLog.LogManager"); From 7bfe52c870ecdb1aa4dc9a21701b910308bcd981 Mon Sep 17 00:00:00 2001 From: Martin Strecker Date: Thu, 13 Oct 2022 13:55:43 +0200 Subject: [PATCH 11/12] Remove commas --- .../Rules/Hotspots/ExecutingSqlQueriesBase.cs | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/analyzers/src/SonarAnalyzer.Common/Rules/Hotspots/ExecutingSqlQueriesBase.cs b/analyzers/src/SonarAnalyzer.Common/Rules/Hotspots/ExecutingSqlQueriesBase.cs index e76bbc11651..79e920af400 100644 --- a/analyzers/src/SonarAnalyzer.Common/Rules/Hotspots/ExecutingSqlQueriesBase.cs +++ b/analyzers/src/SonarAnalyzer.Common/Rules/Hotspots/ExecutingSqlQueriesBase.cs @@ -121,7 +121,7 @@ public abstract class ExecutingSqlQueriesBase Date: Thu, 13 Oct 2022 18:30:33 +0200 Subject: [PATCH 12/12] Update analyzers/src/SonarAnalyzer.Common/Helpers/KnownType.cs Co-authored-by: Pavel Mikula <57188685+pavel-mikula-sonarsource@users.noreply.github.com> --- analyzers/src/SonarAnalyzer.Common/Helpers/KnownType.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/analyzers/src/SonarAnalyzer.Common/Helpers/KnownType.cs b/analyzers/src/SonarAnalyzer.Common/Helpers/KnownType.cs index 2f067e1ff3a..ee50709e7c8 100644 --- a/analyzers/src/SonarAnalyzer.Common/Helpers/KnownType.cs +++ b/analyzers/src/SonarAnalyzer.Common/Helpers/KnownType.cs @@ -131,7 +131,6 @@ internal sealed partial class KnownType internal static readonly KnownType NFluent_FluentCheckException = new("NFluent.FluentCheckException"); internal static readonly KnownType NFluent_Kernel_FluentCheckException = new("NFluent.Kernel.FluentCheckException"); internal static readonly KnownType NHibernate_ISession = new("NHibernate.ISession"); - internal static readonly KnownType NHibernate_Impl_SessionImpl = new("NHibernate.Impl.SessionImpl"); internal static readonly KnownType NHibernate_Impl_AbstractSessionImpl = new("NHibernate.Impl.AbstractSessionImpl"); internal static readonly KnownType NLog_LogManager = new("NLog.LogManager"); internal static readonly KnownType NUnit_Framework_Assert = new("NUnit.Framework.Assert");