From 4f84189a9dda80cb42cd40ddae50cce01fca5b92 Mon Sep 17 00:00:00 2001 From: Alban Auzeill Date: Mon, 7 Aug 2023 15:23:18 +0200 Subject: [PATCH 1/3] Update sonar-plugin-api to 10.0 and fix LogTester package name --- commons/pom.xml | 10 ++++++++++ .../commons/EducationRuleLoaderTest.java | 10 +++++----- .../commons/ExternalReportProviderTest.java | 5 +++-- .../analyzer/commons/ProgressReportTest.java | 8 ++++---- performance-measure/pom.xml | 10 ++++++++++ .../log/SonarSourceLoggerBridgeTest.java | 18 +++++++++--------- pom.xml | 15 +++++++++++++-- regex-parsing/pom.xml | 6 ++++++ test-xml-parsing/pom.xml | 7 +++++++ xml-parsing/pom.xml | 11 +++++++++++ .../xml/checks/SimpleXPathBasedCheckTest.java | 16 ++++++++-------- 11 files changed, 86 insertions(+), 30 deletions(-) diff --git a/commons/pom.xml b/commons/pom.xml index 62d14be1..8fe553b0 100644 --- a/commons/pom.xml +++ b/commons/pom.xml @@ -19,6 +19,11 @@ sonar-plugin-api provided + + org.slf4j + slf4j-api + provided + org.jetbrains annotations @@ -42,6 +47,11 @@ sonar-plugin-api-impl test + + org.sonarsource.api.plugin + sonar-plugin-api-test-fixtures + test + junit junit diff --git a/commons/src/test/java/org/sonarsource/analyzer/commons/EducationRuleLoaderTest.java b/commons/src/test/java/org/sonarsource/analyzer/commons/EducationRuleLoaderTest.java index 077eaa43..1554f94c 100644 --- a/commons/src/test/java/org/sonarsource/analyzer/commons/EducationRuleLoaderTest.java +++ b/commons/src/test/java/org/sonarsource/analyzer/commons/EducationRuleLoaderTest.java @@ -29,6 +29,7 @@ import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; +import org.slf4j.event.Level; import org.sonar.api.SonarEdition; import org.sonar.api.SonarQubeSide; import org.sonar.api.SonarRuntime; @@ -38,9 +39,8 @@ import org.sonar.api.server.rule.RulesDefinition.NewRepository; import org.sonar.api.server.rule.RulesDefinition.Repository; import org.sonar.api.server.rule.RulesDefinitionAnnotationLoader; +import org.sonar.api.testfixtures.log.LogTester; import org.sonar.api.utils.Version; -import org.sonar.api.utils.log.LogTester; -import org.sonar.api.utils.log.LoggerLevel; import static org.assertj.core.api.Assertions.assertThat; import static org.sonar.api.server.rule.RulesDefinition.Context; @@ -52,7 +52,7 @@ public class EducationRuleLoaderTest { private static final String RULE_REPOSITORY_KEY = "rule-definition-test"; @Rule - public LogTester logTester = new LogTester(); + public LogTester logTester = new LogTester().setLevel(Level.TRACE); @Rule public ExpectedException exceptionRule = ExpectedException.none(); @@ -157,7 +157,7 @@ public void education_description_content_with_empty_sections() throws IOExcepti newRepository.done(); RulesDefinition.Rule rule = context.repository(RULE_REPOSITORY_KEY).rule("MyRuleKey"); - assertThat(String.join("\n", logTester.logs(LoggerLevel.DEBUG))).isEqualTo("Skipping section 'introduction' for rule 'MyRuleKey', content is empty\n" + + assertThat(String.join("\n", logTester.logs(Level.DEBUG))).isEqualTo("Skipping section 'introduction' for rule 'MyRuleKey', content is empty\n" + "Skipping section 'resources' for rule 'MyRuleKey', content is empty"); assertThat(rule.ruleDescriptionSections()).hasSize(2); assertThat(fallbackDescription).isEqualTo(testFileContent); @@ -239,7 +239,7 @@ public void education_description_content_with_non_education_format() throws IOE newRepository.done(); RulesDefinition.Rule rule = context.repository(RULE_REPOSITORY_KEY).rule("MyRuleKey"); - assertThat(logTester.logs(LoggerLevel.ERROR)).isEmpty(); + assertThat(logTester.logs(Level.ERROR)).isEmpty(); assertThat(rule.ruleDescriptionSections()).isEmpty(); assertThat(fallbackDescription).isEqualTo(testFileContent); } diff --git a/commons/src/test/java/org/sonarsource/analyzer/commons/ExternalReportProviderTest.java b/commons/src/test/java/org/sonarsource/analyzer/commons/ExternalReportProviderTest.java index 0a20d36a..2b51bb96 100644 --- a/commons/src/test/java/org/sonarsource/analyzer/commons/ExternalReportProviderTest.java +++ b/commons/src/test/java/org/sonarsource/analyzer/commons/ExternalReportProviderTest.java @@ -23,15 +23,16 @@ import java.util.List; import org.junit.Rule; import org.junit.Test; +import org.slf4j.event.Level; import org.sonar.api.batch.sensor.internal.SensorContextTester; -import org.sonar.api.utils.log.LogTester; +import org.sonar.api.testfixtures.log.LogTester; import static org.assertj.core.api.Assertions.assertThat; public class ExternalReportProviderTest { @Rule - public final LogTester logTester = new LogTester(); + public final LogTester logTester = new LogTester().setLevel(Level.TRACE); private final String EXTERNAL_REPORTS_PROPERTY = "sonar.foo.mylinter.reportPaths"; @Test diff --git a/commons/src/test/java/org/sonarsource/analyzer/commons/ProgressReportTest.java b/commons/src/test/java/org/sonarsource/analyzer/commons/ProgressReportTest.java index 63a383b7..990af3b0 100644 --- a/commons/src/test/java/org/sonarsource/analyzer/commons/ProgressReportTest.java +++ b/commons/src/test/java/org/sonarsource/analyzer/commons/ProgressReportTest.java @@ -27,9 +27,9 @@ import org.junit.Rule; import org.junit.Test; import org.mockito.ArgumentCaptor; -import org.sonar.api.utils.log.LogTester; +import org.slf4j.event.Level; +import org.sonar.api.testfixtures.log.LogTester; import org.sonar.api.utils.log.Logger; -import org.sonar.api.utils.log.LoggerLevel; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.atLeast; @@ -39,7 +39,7 @@ public class ProgressReportTest { @Rule - public LogTester logTester = new LogTester(); + public LogTester logTester = new LogTester().setLevel(Level.TRACE); @Test(timeout = 5000) public void testSonarLogger() throws Exception { @@ -48,7 +48,7 @@ public void testSonarLogger() throws Exception { report.start(Arrays.asList("foo.java", "foo.java")); report.stop(); - assertThat(logTester.logs(LoggerLevel.INFO)).isNotEmpty(); + assertThat(logTester.logs(Level.INFO)).isNotEmpty(); } @Test(timeout = 5000) diff --git a/performance-measure/pom.xml b/performance-measure/pom.xml index 950c03fb..652118a9 100644 --- a/performance-measure/pom.xml +++ b/performance-measure/pom.xml @@ -25,6 +25,16 @@ sonar-plugin-api provided + + org.slf4j + slf4j-api + provided + + + org.sonarsource.api.plugin + sonar-plugin-api-test-fixtures + test + org.junit.jupiter junit-jupiter diff --git a/performance-measure/src/test/java/org/sonarsource/performance/measure/log/SonarSourceLoggerBridgeTest.java b/performance-measure/src/test/java/org/sonarsource/performance/measure/log/SonarSourceLoggerBridgeTest.java index 7c550408..ef0d0d4b 100644 --- a/performance-measure/src/test/java/org/sonarsource/performance/measure/log/SonarSourceLoggerBridgeTest.java +++ b/performance-measure/src/test/java/org/sonarsource/performance/measure/log/SonarSourceLoggerBridgeTest.java @@ -22,8 +22,8 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; import org.junit.jupiter.migrationsupport.rules.EnableRuleMigrationSupport; -import org.sonar.api.utils.log.LogTesterJUnit5; -import org.sonar.api.utils.log.LoggerLevel; +import org.slf4j.event.Level; +import org.sonar.api.testfixtures.log.LogTesterJUnit5; import static org.assertj.core.api.Assertions.assertThat; @@ -41,20 +41,20 @@ void log() { assertThat(logTester.logs()).isEmpty(); - logTester.setLevel(LoggerLevel.INFO); + logTester.setLevel(Level.INFO); logger.debug(() -> "A debug message"); assertThat(logTester.logs()).isEmpty(); - logTester.setLevel(LoggerLevel.DEBUG); + logTester.setLevel(Level.DEBUG); logger.debug(() -> "A debug message"); logger.info(() -> "An info message"); logger.warning(() -> "A warning message"); logger.error(() -> "An error message"); - assertThat(logTester.logs(LoggerLevel.TRACE)).isEmpty(); - assertThat(logTester.logs(LoggerLevel.DEBUG)).containsExactly("A debug message"); - assertThat(logTester.logs(LoggerLevel.INFO)).containsExactly("An info message"); - assertThat(logTester.logs(LoggerLevel.WARN)).containsExactly("A warning message"); - assertThat(logTester.logs(LoggerLevel.ERROR)).containsExactly("An error message"); + assertThat(logTester.logs(Level.TRACE)).isEmpty(); + assertThat(logTester.logs(Level.DEBUG)).containsExactly("A debug message"); + assertThat(logTester.logs(Level.INFO)).containsExactly("An info message"); + assertThat(logTester.logs(Level.WARN)).containsExactly("A warning message"); + assertThat(logTester.logs(Level.ERROR)).containsExactly("An error message"); } } diff --git a/pom.xml b/pom.xml index eb538a40..1174fe2e 100644 --- a/pom.xml +++ b/pom.xml @@ -73,8 +73,8 @@ - 9.9.0.229 - 9.3.0.51899 + 10.0.0.695 + 10.1.0.73491 3.17.1 3.0.2 3.5.7 @@ -98,11 +98,22 @@ ${version.sonar} provided + + org.slf4j + slf4j-api + 1.7.30 + provided + org.sonarsource.sonarqube sonar-plugin-api-impl ${sonarqube.api.impl.version} + + org.sonarsource.api.plugin + sonar-plugin-api-test-fixtures + ${version.sonar} + diff --git a/regex-parsing/pom.xml b/regex-parsing/pom.xml index eed1a3fb..769e229e 100644 --- a/regex-parsing/pom.xml +++ b/regex-parsing/pom.xml @@ -15,6 +15,12 @@ org.sonarsource.api.plugin sonar-plugin-api + provided + + + org.slf4j + slf4j-api + provided com.google.code.findbugs diff --git a/test-xml-parsing/pom.xml b/test-xml-parsing/pom.xml index ab4f0444..1b77bc9f 100644 --- a/test-xml-parsing/pom.xml +++ b/test-xml-parsing/pom.xml @@ -16,7 +16,14 @@ org.sonarsource.api.plugin sonar-plugin-api + provided + + org.slf4j + slf4j-api + provided + + org.sonarsource.sonarqube sonar-plugin-api-impl diff --git a/xml-parsing/pom.xml b/xml-parsing/pom.xml index 4bd4dcd6..a740cc8b 100644 --- a/xml-parsing/pom.xml +++ b/xml-parsing/pom.xml @@ -16,6 +16,12 @@ org.sonarsource.api.plugin sonar-plugin-api + provided + + + org.slf4j + slf4j-api + provided @@ -54,6 +60,11 @@ sonar-plugin-api-impl test + + org.sonarsource.api.plugin + sonar-plugin-api-test-fixtures + test + junit junit diff --git a/xml-parsing/src/test/java/org/sonarsource/analyzer/commons/xml/checks/SimpleXPathBasedCheckTest.java b/xml-parsing/src/test/java/org/sonarsource/analyzer/commons/xml/checks/SimpleXPathBasedCheckTest.java index 7bcb8e08..db6f9de3 100644 --- a/xml-parsing/src/test/java/org/sonarsource/analyzer/commons/xml/checks/SimpleXPathBasedCheckTest.java +++ b/xml-parsing/src/test/java/org/sonarsource/analyzer/commons/xml/checks/SimpleXPathBasedCheckTest.java @@ -29,12 +29,12 @@ import javax.xml.xpath.XPathExpression; import org.junit.Rule; import org.junit.Test; +import org.slf4j.event.Level; import org.sonar.api.batch.fs.InputFile; import org.sonar.api.batch.fs.internal.DefaultInputFile; import org.sonar.api.batch.fs.internal.TestInputFileBuilder; import org.sonar.api.rule.RuleKey; -import org.sonar.api.utils.log.LogTester; -import org.sonar.api.utils.log.LoggerLevel; +import org.sonar.api.testfixtures.log.LogTester; import org.sonarsource.analyzer.commons.xml.XmlFile; import org.w3c.dom.Document; import org.w3c.dom.Node; @@ -45,7 +45,7 @@ public class SimpleXPathBasedCheckTest { @Rule - public LogTester logTester = new LogTester(); + public LogTester logTester = new LogTester().setLevel(Level.TRACE); @Test(expected = IllegalStateException.class) public void test_invalid_xpath_compilation_throws_exception() throws Exception { @@ -76,18 +76,18 @@ public void scanFile(XmlFile file) { }; logTester.clear(); - logTester.setLevel(LoggerLevel.INFO); + logTester.setLevel(Level.INFO); check.scanFile(null, RuleKey.of("tst", "failingXpath"), xmlFile); assertThat(check.hasBeenExecuted()).isTrue(); assertThat(logTester.logs()).isEmpty(); logTester.clear(); - logTester.setLevel(LoggerLevel.DEBUG); + logTester.setLevel(Level.DEBUG); check.scanFile(null, RuleKey.of("tst", "failingXpath"), xmlFile); assertThat(logTester.logs()).isNotEmpty(); - List debugs = logTester.logs(LoggerLevel.DEBUG); + List debugs = logTester.logs(Level.DEBUG); assertThat(debugs).isEmpty(); - List errors = logTester.logs(LoggerLevel.ERROR); + List errors = logTester.logs(Level.ERROR); assertThat(errors).hasSize(1); assertThat(errors.get(0)).startsWith("[tst:failingXpath] Unable to evaluate XPath expression on file "); } @@ -120,7 +120,7 @@ public void scanFile(XmlFile file) { } }; - logTester.setLevel(LoggerLevel.DEBUG); + logTester.setLevel(Level.DEBUG); check.scanFile(null, RuleKey.of("tst", "nodeList"), xmlFile); assertThat(check.hasBeenExecuted()).isTrue(); assertThat(logTester.logs()).isEmpty(); From 2faa4dec10d61e452a6b08e4ccce26d095591761 Mon Sep 17 00:00:00 2001 From: Alban Auzeill Date: Mon, 7 Aug 2023 15:58:13 +0200 Subject: [PATCH 2/3] Replace deprecated sonar Logger by slf4j (Breaking change for one ProgressReport constructor) --- .../analyzer/commons/EducationRuleLoader.java | 6 +- .../commons/ExternalReportProvider.java | 6 +- .../analyzer/commons/ProgressReport.java | 6 +- .../analyzer/commons/ProgressReportTest.java | 2 +- .../performance/measure/log/Logger.java | 10 +-- .../measure/log/SonarSourceLoggerBridge.java | 16 ++-- .../log/SonarSourceLoggerBridgeTest.java | 74 ++++++++++++++++--- .../performance/measure/log/StringLogger.java | 2 +- .../analyzer/commons/regex/RegexParser.java | 6 +- .../xml/checks/SimpleXPathBasedCheck.java | 6 +- 10 files changed, 98 insertions(+), 36 deletions(-) diff --git a/commons/src/main/java/org/sonarsource/analyzer/commons/EducationRuleLoader.java b/commons/src/main/java/org/sonarsource/analyzer/commons/EducationRuleLoader.java index 19ed9920..ad370bfb 100644 --- a/commons/src/main/java/org/sonarsource/analyzer/commons/EducationRuleLoader.java +++ b/commons/src/main/java/org/sonarsource/analyzer/commons/EducationRuleLoader.java @@ -25,14 +25,14 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.annotation.Nullable; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.sonar.api.SonarRuntime; import org.sonar.api.server.rule.Context; import org.sonar.api.server.rule.RuleDescriptionSection; import org.sonar.api.server.rule.RuleDescriptionSectionBuilder; import org.sonar.api.server.rule.RulesDefinition.NewRule; import org.sonar.api.utils.Version; -import org.sonar.api.utils.log.Logger; -import org.sonar.api.utils.log.Loggers; import static org.sonar.api.server.rule.RuleDescriptionSection.RuleDescriptionSectionKeys.HOW_TO_FIX_SECTION_KEY; import static org.sonar.api.server.rule.RuleDescriptionSection.RuleDescriptionSectionKeys.INTRODUCTION_SECTION_KEY; @@ -44,7 +44,7 @@ */ class EducationRuleLoader { - private static final Logger LOG = Loggers.get(EducationRuleLoader.class); + private static final Logger LOG = LoggerFactory.getLogger(EducationRuleLoader.class); private static final String CODE_EXAMPLES_HEADER = "

Code examples

"; private static final String WHY_SECTION_HEADER = "

Why is this an issue\\?

"; private static final String HOW_TO_FIX_SECTION_HEADER = "

How to fix it

"; diff --git a/commons/src/main/java/org/sonarsource/analyzer/commons/ExternalReportProvider.java b/commons/src/main/java/org/sonarsource/analyzer/commons/ExternalReportProvider.java index 900337fe..122f1b93 100644 --- a/commons/src/main/java/org/sonarsource/analyzer/commons/ExternalReportProvider.java +++ b/commons/src/main/java/org/sonarsource/analyzer/commons/ExternalReportProvider.java @@ -23,17 +23,17 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.sonar.api.batch.sensor.SensorContext; import org.sonar.api.utils.Version; -import org.sonar.api.utils.log.Logger; -import org.sonar.api.utils.log.Loggers; public class ExternalReportProvider { private ExternalReportProvider() { } - private static final Logger LOG = Loggers.get(ExternalReportProvider.class); + private static final Logger LOG = LoggerFactory.getLogger(ExternalReportProvider.class); public static List getReportFiles(SensorContext context, String externalReportsProperty) { boolean externalIssuesSupported = context.getSonarQubeVersion().isGreaterThanOrEqual(Version.create(7, 2)); diff --git a/commons/src/main/java/org/sonarsource/analyzer/commons/ProgressReport.java b/commons/src/main/java/org/sonarsource/analyzer/commons/ProgressReport.java index 6040ce4a..90ba68d5 100644 --- a/commons/src/main/java/org/sonarsource/analyzer/commons/ProgressReport.java +++ b/commons/src/main/java/org/sonarsource/analyzer/commons/ProgressReport.java @@ -22,8 +22,8 @@ import java.util.Iterator; import java.util.concurrent.atomic.AtomicBoolean; import java.util.stream.StreamSupport; -import org.sonar.api.utils.log.Logger; -import org.sonar.api.utils.log.Loggers; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class ProgressReport implements Runnable { @@ -58,7 +58,7 @@ public ProgressReport(String threadName, long period, Logger logger, String adje } public ProgressReport(String threadName, long period, String adjective) { - this(threadName, period, Loggers.get(ProgressReport.class), adjective); + this(threadName, period, LoggerFactory.getLogger(ProgressReport.class), adjective); } public ProgressReport(String threadName, long period) { diff --git a/commons/src/test/java/org/sonarsource/analyzer/commons/ProgressReportTest.java b/commons/src/test/java/org/sonarsource/analyzer/commons/ProgressReportTest.java index 990af3b0..6b37d4a3 100644 --- a/commons/src/test/java/org/sonarsource/analyzer/commons/ProgressReportTest.java +++ b/commons/src/test/java/org/sonarsource/analyzer/commons/ProgressReportTest.java @@ -27,9 +27,9 @@ import org.junit.Rule; import org.junit.Test; import org.mockito.ArgumentCaptor; +import org.slf4j.Logger; import org.slf4j.event.Level; import org.sonar.api.testfixtures.log.LogTester; -import org.sonar.api.utils.log.Logger; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.atLeast; diff --git a/performance-measure/src/main/java/org/sonarsource/performance/measure/log/Logger.java b/performance-measure/src/main/java/org/sonarsource/performance/measure/log/Logger.java index eac4ddc3..3e740089 100644 --- a/performance-measure/src/main/java/org/sonarsource/performance/measure/log/Logger.java +++ b/performance-measure/src/main/java/org/sonarsource/performance/measure/log/Logger.java @@ -24,16 +24,16 @@ public abstract class Logger { - public static final String DEFAULT_SONAR_API_LOGGER = "org.sonar.api.utils.log.Loggers"; + public static final String DEFAULT_SLF4J_LOGGER = "org.slf4j.LoggerFactory"; - private static String sonarApiLogger = DEFAULT_SONAR_API_LOGGER ; + private static String loggerImpl = DEFAULT_SLF4J_LOGGER; public static final Function, Logger> DEFAULT_FACTORY = cls -> { try { - Class.forName(sonarApiLogger); + Class.forName(loggerImpl); return new SonarSourceLoggerBridge(cls); } catch (ClassNotFoundException e) { - // SonarSource logger not available + // slf4j logger not available return new JavaLoggerBridge(cls); } }; @@ -55,7 +55,7 @@ public static Logger get(Class cls) { // Visible for testing public static void overrideFactory(Function, Logger> factory, String sonarLoggerClass) { Logger.factory = factory; - Logger.sonarApiLogger = sonarLoggerClass; + Logger.loggerImpl = sonarLoggerClass; } } diff --git a/performance-measure/src/main/java/org/sonarsource/performance/measure/log/SonarSourceLoggerBridge.java b/performance-measure/src/main/java/org/sonarsource/performance/measure/log/SonarSourceLoggerBridge.java index 665ccb8f..78f8c078 100644 --- a/performance-measure/src/main/java/org/sonarsource/performance/measure/log/SonarSourceLoggerBridge.java +++ b/performance-measure/src/main/java/org/sonarsource/performance/measure/log/SonarSourceLoggerBridge.java @@ -24,25 +24,31 @@ public class SonarSourceLoggerBridge extends Logger { @SuppressWarnings("java:S1312") - private final org.sonar.api.utils.log.Logger delegate; + private final org.slf4j.Logger delegate; public SonarSourceLoggerBridge(Class cls) { - delegate = org.sonar.api.utils.log.Loggers.get(cls); + delegate = org.slf4j.LoggerFactory.getLogger(cls); } @Override public void debug(Supplier messageSupplier) { - delegate.debug(messageSupplier); + if (delegate.isDebugEnabled()) { + delegate.debug(messageSupplier.get()); + } } @Override public void info(Supplier messageSupplier) { - delegate.info(messageSupplier.get()); + if (delegate.isInfoEnabled()) { + delegate.info(messageSupplier.get()); + } } @Override public void warning(Supplier messageSupplier) { - delegate.warn(messageSupplier.get()); + if (delegate.isWarnEnabled()) { + delegate.warn(messageSupplier.get()); + } } @Override diff --git a/performance-measure/src/test/java/org/sonarsource/performance/measure/log/SonarSourceLoggerBridgeTest.java b/performance-measure/src/test/java/org/sonarsource/performance/measure/log/SonarSourceLoggerBridgeTest.java index ef0d0d4b..7302acc3 100644 --- a/performance-measure/src/test/java/org/sonarsource/performance/measure/log/SonarSourceLoggerBridgeTest.java +++ b/performance-measure/src/test/java/org/sonarsource/performance/measure/log/SonarSourceLoggerBridgeTest.java @@ -19,6 +19,8 @@ */ package org.sonarsource.performance.measure.log; +import org.junit.Before; +import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; import org.junit.jupiter.migrationsupport.rules.EnableRuleMigrationSupport; @@ -27,24 +29,36 @@ import static org.assertj.core.api.Assertions.assertThat; -@EnableRuleMigrationSupport class SonarSourceLoggerBridgeTest { @RegisterExtension public LogTesterJUnit5 logTester = new LogTesterJUnit5(); - @Test - void log() { - Logger.overrideFactory(Logger.DEFAULT_FACTORY, Logger.DEFAULT_SONAR_API_LOGGER); - Logger logger = Logger.get(SonarSourceLoggerBridgeTest.class); - assertThat(logger).isInstanceOf(SonarSourceLoggerBridge.class); + private Logger logger; - assertThat(logTester.logs()).isEmpty(); + @BeforeEach + void beforeEach() { + Logger.overrideFactory(Logger.DEFAULT_FACTORY, Logger.DEFAULT_SLF4J_LOGGER); + logger = Logger.get(SonarSourceLoggerBridgeTest.class); + assertThat(logger).isInstanceOf(SonarSourceLoggerBridge.class); + } - logTester.setLevel(Level.INFO); + @Test + void log_trace() { + logTester.setLevel(Level.TRACE); logger.debug(() -> "A debug message"); - assertThat(logTester.logs()).isEmpty(); + logger.info(() -> "An info message"); + logger.warning(() -> "A warning message"); + logger.error(() -> "An error message"); + assertThat(logTester.logs(Level.TRACE)).isEmpty(); + assertThat(logTester.logs(Level.DEBUG)).containsExactly("A debug message"); + assertThat(logTester.logs(Level.INFO)).containsExactly("An info message"); + assertThat(logTester.logs(Level.WARN)).containsExactly("A warning message"); + assertThat(logTester.logs(Level.ERROR)).containsExactly("An error message"); + } + @Test + void log_debug() { logTester.setLevel(Level.DEBUG); logger.debug(() -> "A debug message"); logger.info(() -> "An info message"); @@ -57,4 +71,46 @@ void log() { assertThat(logTester.logs(Level.ERROR)).containsExactly("An error message"); } + @Test + void log_info() { + logTester.setLevel(Level.INFO); + logger.debug(() -> "A debug message"); + logger.info(() -> "An info message"); + logger.warning(() -> "A warning message"); + logger.error(() -> "An error message"); + assertThat(logTester.logs(Level.TRACE)).isEmpty(); + assertThat(logTester.logs(Level.DEBUG)).isEmpty(); + assertThat(logTester.logs(Level.INFO)).containsExactly("An info message"); + assertThat(logTester.logs(Level.WARN)).containsExactly("A warning message"); + assertThat(logTester.logs(Level.ERROR)).containsExactly("An error message"); + } + + @Test + void log_warning() { + logTester.setLevel(Level.WARN); + logger.debug(() -> "A debug message"); + logger.info(() -> "An info message"); + logger.warning(() -> "A warning message"); + logger.error(() -> "An error message"); + assertThat(logTester.logs(Level.TRACE)).isEmpty(); + assertThat(logTester.logs(Level.DEBUG)).isEmpty(); + assertThat(logTester.logs(Level.INFO)).isEmpty(); + assertThat(logTester.logs(Level.WARN)).containsExactly("A warning message"); + assertThat(logTester.logs(Level.ERROR)).containsExactly("An error message"); + } + + @Test + void log_error() { + logTester.setLevel(Level.ERROR); + logger.debug(() -> "A debug message"); + logger.info(() -> "An info message"); + logger.warning(() -> "A warning message"); + logger.error(() -> "An error message"); + assertThat(logTester.logs(Level.TRACE)).isEmpty(); + assertThat(logTester.logs(Level.DEBUG)).isEmpty(); + assertThat(logTester.logs(Level.INFO)).isEmpty(); + assertThat(logTester.logs(Level.WARN)).isEmpty(); + assertThat(logTester.logs(Level.ERROR)).containsExactly("An error message"); + } + } diff --git a/performance-measure/src/test/java/org/sonarsource/performance/measure/log/StringLogger.java b/performance-measure/src/test/java/org/sonarsource/performance/measure/log/StringLogger.java index eb531bf3..813201b5 100644 --- a/performance-measure/src/test/java/org/sonarsource/performance/measure/log/StringLogger.java +++ b/performance-measure/src/test/java/org/sonarsource/performance/measure/log/StringLogger.java @@ -36,7 +36,7 @@ private StringLogger() { } public static StringLogger initialize(Level level) { - Logger.overrideFactory(cls -> INSTANCE, Logger.DEFAULT_SONAR_API_LOGGER); + Logger.overrideFactory(cls -> INSTANCE, Logger.DEFAULT_SLF4J_LOGGER); INSTANCE.clear(); INSTANCE.setLevel(level); return INSTANCE; diff --git a/regex-parsing/src/main/java/org/sonarsource/analyzer/commons/regex/RegexParser.java b/regex-parsing/src/main/java/org/sonarsource/analyzer/commons/regex/RegexParser.java index 68b4c4f5..4a7c9f5b 100644 --- a/regex-parsing/src/main/java/org/sonarsource/analyzer/commons/regex/RegexParser.java +++ b/regex-parsing/src/main/java/org/sonarsource/analyzer/commons/regex/RegexParser.java @@ -33,8 +33,8 @@ import java.util.stream.Collectors; import javax.annotation.CheckForNull; import javax.annotation.Nullable; -import org.sonar.api.utils.log.Logger; -import org.sonar.api.utils.log.Loggers; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.sonarsource.analyzer.commons.regex.ast.AtomicGroupTree; import org.sonarsource.analyzer.commons.regex.ast.BackReferenceTree; import org.sonarsource.analyzer.commons.regex.ast.BoundaryTree; @@ -73,7 +73,7 @@ public class RegexParser { - private static final Logger LOG = Loggers.get(RegexParser.class); + private static final Logger LOG = LoggerFactory.getLogger(RegexParser.class); private static final String HEX_DIGIT = "hexadecimal digit"; diff --git a/xml-parsing/src/main/java/org/sonarsource/analyzer/commons/xml/checks/SimpleXPathBasedCheck.java b/xml-parsing/src/main/java/org/sonarsource/analyzer/commons/xml/checks/SimpleXPathBasedCheck.java index 49a06ab0..934f1578 100644 --- a/xml-parsing/src/main/java/org/sonarsource/analyzer/commons/xml/checks/SimpleXPathBasedCheck.java +++ b/xml-parsing/src/main/java/org/sonarsource/analyzer/commons/xml/checks/SimpleXPathBasedCheck.java @@ -26,15 +26,15 @@ import javax.xml.xpath.XPathExpression; import javax.xml.xpath.XPathExpressionException; import javax.xml.xpath.XPathFactory; -import org.sonar.api.utils.log.Logger; -import org.sonar.api.utils.log.Loggers; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.sonarsource.analyzer.commons.xml.XmlFile; import org.w3c.dom.Node; import org.w3c.dom.NodeList; public abstract class SimpleXPathBasedCheck extends SonarXmlCheck { - private static final Logger LOG = Loggers.get(SimpleXPathBasedCheck.class); + private static final Logger LOG = LoggerFactory.getLogger(SimpleXPathBasedCheck.class); private final XPath xpath = XPathFactory.newInstance().newXPath(); From 7f4bc982a07b7cceadd107c92c0e6f33e7fd133d Mon Sep 17 00:00:00 2001 From: Alban Auzeill Date: Mon, 7 Aug 2023 17:28:15 +0200 Subject: [PATCH 3/3] Remove deprecated method calls --- .../analyzer/commons/ExternalReportProvider.java | 2 +- .../analyzer/commons/EducationRuleLoaderTest.java | 9 ++++----- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/commons/src/main/java/org/sonarsource/analyzer/commons/ExternalReportProvider.java b/commons/src/main/java/org/sonarsource/analyzer/commons/ExternalReportProvider.java index 122f1b93..de878854 100644 --- a/commons/src/main/java/org/sonarsource/analyzer/commons/ExternalReportProvider.java +++ b/commons/src/main/java/org/sonarsource/analyzer/commons/ExternalReportProvider.java @@ -36,7 +36,7 @@ private ExternalReportProvider() { private static final Logger LOG = LoggerFactory.getLogger(ExternalReportProvider.class); public static List getReportFiles(SensorContext context, String externalReportsProperty) { - boolean externalIssuesSupported = context.getSonarQubeVersion().isGreaterThanOrEqual(Version.create(7, 2)); + boolean externalIssuesSupported = context.runtime().getApiVersion().isGreaterThanOrEqual(Version.create(7, 2)); String[] reportPaths = context.config().getStringArray(externalReportsProperty); if (reportPaths.length == 0) { diff --git a/commons/src/test/java/org/sonarsource/analyzer/commons/EducationRuleLoaderTest.java b/commons/src/test/java/org/sonarsource/analyzer/commons/EducationRuleLoaderTest.java index 1554f94c..0783b1b3 100644 --- a/commons/src/test/java/org/sonarsource/analyzer/commons/EducationRuleLoaderTest.java +++ b/commons/src/test/java/org/sonarsource/analyzer/commons/EducationRuleLoaderTest.java @@ -43,6 +43,7 @@ import org.sonar.api.utils.Version; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.sonar.api.server.rule.RulesDefinition.Context; public class EducationRuleLoaderTest { @@ -53,8 +54,6 @@ public class EducationRuleLoaderTest { @Rule public LogTester logTester = new LogTester().setLevel(Level.TRACE); - @Rule - public ExpectedException exceptionRule = ExpectedException.none(); private Context context; private NewRepository newRepository; @@ -249,9 +248,9 @@ public void education_description_content_with_invalid_generic_and_specific_how_ EducationRuleLoader educationRuleLoader = new EducationRuleLoader(RUNTIME); String testFileContent = getTestFileContent("invalid/S102.html"); - exceptionRule.expect(IllegalStateException.class); - exceptionRule.expectMessage("Invalid education rule format for 'MyRuleKey', rule description has both generic and framework-specific 'How to fix it' sections"); - educationRuleLoader.setEducationDescriptionFromHtml(newRule, testFileContent); + assertThatThrownBy(() -> educationRuleLoader.setEducationDescriptionFromHtml(newRule, testFileContent)) + .isInstanceOf(IllegalStateException.class) + .hasMessage("Invalid education rule format for 'MyRuleKey', rule description has both generic and framework-specific 'How to fix it' sections"); } @Test