From 9f99e7b514d0f2d85d26a2fb9c5a46e6690c2eee Mon Sep 17 00:00:00 2001 From: Mostafa Mohammed Date: Mon, 20 Jul 2026 13:55:23 +0200 Subject: [PATCH] Extract inline Mockito mock creations Extract mocks passed directly to thenReturn into named local variables across the affected tests. This satisfies S9016 and preserves the existing stubbing behavior while allowing Mockito to validate unfinished stubbing correctly. These five findings were the only open issues causing the SonarQube Next quality gate to fail. --- .../org/sonar/java/filters/PostAnalysisIssueFilterTest.java | 3 ++- .../src/test/java/org/sonar/java/SonarComponentsTest.java | 3 ++- .../src/test/java/org/sonar/java/model/JParserTest.java | 3 ++- .../test/java/org/sonar/plugins/java/JavaSensorTest.java | 6 ++++-- 4 files changed, 10 insertions(+), 5 deletions(-) diff --git a/java-checks/src/test/java/org/sonar/java/filters/PostAnalysisIssueFilterTest.java b/java-checks/src/test/java/org/sonar/java/filters/PostAnalysisIssueFilterTest.java index 8ae526ee6f5..acd55c82f38 100644 --- a/java-checks/src/test/java/org/sonar/java/filters/PostAnalysisIssueFilterTest.java +++ b/java-checks/src/test/java/org/sonar/java/filters/PostAnalysisIssueFilterTest.java @@ -50,7 +50,8 @@ void setUp() { context = mock(JavaFileScannerContext.class); when(context.getInputFile()).thenReturn(INPUT_FILE); - when(context.getSemanticModel()).thenReturn(mock(Sema.class)); + Sema sema = mock(Sema.class); + when(context.getSemanticModel()).thenReturn(sema); fakeIssue = mock(FilterableIssue.class); when(fakeIssue.componentKey()).thenReturn("component"); diff --git a/java-frontend/src/test/java/org/sonar/java/SonarComponentsTest.java b/java-frontend/src/test/java/org/sonar/java/SonarComponentsTest.java index cfdc8120ba5..c5f90eb66d4 100644 --- a/java-frontend/src/test/java/org/sonar/java/SonarComponentsTest.java +++ b/java-frontend/src/test/java/org/sonar/java/SonarComponentsTest.java @@ -547,7 +547,8 @@ void add_issue_or_parse_error() { InputFile inputFile = inputFileBuilder.build(); fileSystem.add(inputFile); - when(this.checks.ruleKey(any(JavaCheck.class))).thenReturn(mock(RuleKey.class)); + RuleKey ruleKey = mock(RuleKey.class); + when(this.checks.ruleKey(any(JavaCheck.class))).thenReturn(ruleKey); SonarComponents sonarComponents = new SonarComponents(fileLinesContextFactory, fileSystem, null, null, checkFactory, specificContext.activeRules(), new CheckRegistrar[]{expectedRegistrar}); diff --git a/java-frontend/src/test/java/org/sonar/java/model/JParserTest.java b/java-frontend/src/test/java/org/sonar/java/model/JParserTest.java index 1ea02bab66b..57d8dfeb19b 100644 --- a/java-frontend/src/test/java/org/sonar/java/model/JParserTest.java +++ b/java-frontend/src/test/java/org/sonar/java/model/JParserTest.java @@ -703,7 +703,8 @@ void successful_batch_mode_with_missing_analyzed_files_should_continue_file_by_f JParserConfig config = spy(JParserConfig.Mode.BATCH .create(MAXIMUM_SUPPORTED_JAVA_VERSION, List.of(), false)); // Return a lazy ASTParser that do nothing to ensure that we have not analyzed files - when(config.astParser()).thenReturn(mock(ASTParser.class)); + ASTParser astParser = mock(ASTParser.class); + when(config.astParser()).thenReturn(astParser); config.parse(inputFiles, () -> false, new AnalysisProgress(inputFiles.size()), doNothingAction); diff --git a/sonar-java-plugin/src/test/java/org/sonar/plugins/java/JavaSensorTest.java b/sonar-java-plugin/src/test/java/org/sonar/plugins/java/JavaSensorTest.java index 100c198526f..8113d9481b5 100644 --- a/sonar-java-plugin/src/test/java/org/sonar/plugins/java/JavaSensorTest.java +++ b/sonar-java-plugin/src/test/java/org/sonar/plugins/java/JavaSensorTest.java @@ -479,7 +479,8 @@ void custom_file_scanner_is_not_filtered_in_autoscan() throws IOException { .setType(InputFile.Type.MAIN).initMetadata(Files.readString(mainFile.toPath())).setCharset(UTF_8).build()); FileLinesContextFactory fileLinesContextFactory = mock(FileLinesContextFactory.class); - when(fileLinesContextFactory.createFor(any(InputFile.class))).thenReturn(mock(FileLinesContext.class)); + FileLinesContext fileLinesContext = mock(FileLinesContext.class); + when(fileLinesContextFactory.createFor(any(InputFile.class))).thenReturn(fileLinesContext); ClasspathForTest javaTestClasspath = new ClasspathForTest(context.config(), fs); ClasspathForMain javaClasspath = new ClasspathForMain(context.config(), fs); DefaultJavaResourceLocator resourceLocator = createDefaultJavaResourceLocator(context.config(), fs); @@ -538,7 +539,8 @@ private SensorContextTester analyzeTwoFilesWithIssues(MapSettings settings) thro .setType(InputFile.Type.TEST).initMetadata(Files.readString(testFile.toPath())).setCharset(UTF_8).build()); FileLinesContextFactory fileLinesContextFactory = mock(FileLinesContextFactory.class); - when(fileLinesContextFactory.createFor(any(InputFile.class))).thenReturn(mock(FileLinesContext.class)); + FileLinesContext fileLinesContext = mock(FileLinesContext.class); + when(fileLinesContextFactory.createFor(any(InputFile.class))).thenReturn(fileLinesContext); ClasspathForTest javaTestClasspath = new ClasspathForTest(context.config(), fs); ClasspathForMain javaClasspath = new ClasspathForMain(context.config(), fs); DefaultJavaResourceLocator resourceLocator = createDefaultJavaResourceLocator(context.config(), fs);