From 3413467e0427083e4cdba3acbfa02a8b50d9c8cd Mon Sep 17 00:00:00 2001 From: "Mathi Sree.R" Date: Sat, 26 Sep 2026 12:55:54 +0530 Subject: [PATCH 1/6] Add technology detection tests --- .../seleniumboot/migrator/AnalyzerTest.java | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) diff --git a/src/test/java/com/seleniumboot/migrator/AnalyzerTest.java b/src/test/java/com/seleniumboot/migrator/AnalyzerTest.java index bcb546d..02d2429 100644 --- a/src/test/java/com/seleniumboot/migrator/AnalyzerTest.java +++ b/src/test/java/com/seleniumboot/migrator/AnalyzerTest.java @@ -88,6 +88,7 @@ void unparsableSourceIsReportedNotThrown() { } @Test +<<<<<<< HEAD void detectsGroovyGradleBuildAndDependencies() throws Exception { String output = new Analyzer().analyze(fixture("gradle-groovy")).render(); assertTrue(output.contains("Detected technologies")); @@ -138,4 +139,53 @@ void ignoresBuildFilesInGeneratedAndVendorDirectories(@TempDir Path root) throws assertFalse(output.contains("Dependency: org.example:sample:1.0")); assertTrue(output.contains("No supported build descriptor found")); } + + @Test + void detectsMavenAndTechnologies() throws Exception { + Path temp = Files.createTempDirectory("selenium-test"); + + Files.writeString(temp.resolve("pom.xml"), """ + + + + org.seleniumhq.selenium + selenium-java + 4.20.0 + + + org.testng + testng + 7.10.0 + + + org.junit.jupiter + junit-jupiter + 5.10.2 + + + io.github.bonigarcia + webdrivermanager + 5.8.0 + + + + """); + + var report = new Analyzer().analyze(temp); + + assertTrue(report.render().contains("Maven")); + assertTrue(report.render().contains("Selenium 4.20.0")); + assertTrue(report.render().contains("TestNG")); + assertTrue(report.render().contains("JUnit 5")); + assertTrue(report.render().contains("WebDriverManager")); + } + + @Test + void missingPomIsNotDetected() throws Exception { + Path temp = Files.createTempDirectory("selenium-test"); + + var report = new Analyzer().analyze(temp); + + assertTrue(report.render().contains("No supported build descriptor found")); + } } From ceec39ff69e985bed98b1ce87942c03ee0fb7426 Mon Sep 17 00:00:00 2001 From: "Mathi Sree.R" Date: Sat, 26 Sep 2026 13:09:40 +0530 Subject: [PATCH 2/6] Add technology detection --- .../com/seleniumboot/migrator/Analyzer.java | 45 +++++++++++++------ 1 file changed, 32 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/seleniumboot/migrator/Analyzer.java b/src/main/java/com/seleniumboot/migrator/Analyzer.java index 26906d2..a5455ed 100644 --- a/src/main/java/com/seleniumboot/migrator/Analyzer.java +++ b/src/main/java/com/seleniumboot/migrator/Analyzer.java @@ -32,30 +32,36 @@ public Report analyze(Path root) throws IOException { try (Stream s = Files.walk(root)) { files = s.filter(p -> p.toString().endsWith(".java")).sorted().toList(); } + List findings = new ArrayList<>(); int parsed = 0; List unparsable = new ArrayList<>(); + for (Path f : files) { var result = parser.parse(f); + if (result.getResult().isEmpty() || !result.isSuccessful()) { unparsable.add(root.relativize(f).toString()); continue; } + parsed++; scan(result.getResult().get(), root.relativize(f).toString(), findings); } return new Report(files.size(), parsed, unparsable, findings, BuildFileAnalyzer.detect(root)); } - /** Analyze a single pasted source string. */ public Report analyzeSource(String source) { var result = parser.parse(source); List findings = new ArrayList<>(); + if (result.getResult().isEmpty() || !result.isSuccessful()) { - return new Report(1, 0, List.of(""), findings); + return new Report(1, 0, List.of(""), findings, "not detected"); } + scan(result.getResult().get(), "", findings); - return new Report(1, 1, List.of(), findings); + + return new Report(1, 1, List.of(), findings, "not detected"); } private void scan(CompilationUnit cu, String file, List out) { @@ -82,57 +88,70 @@ private void scan(CompilationUnit cu, String file, List out) { // MIG-001: ThreadLocal driver factory cu.findAll(FieldDeclaration.class).forEach(fd -> { String type = fd.getElementType().toString(); + if (type.startsWith("ThreadLocal<") && type.contains("WebDriver")) { out.add(new Finding("MIG-001", AUTO, file, line(fd), "ThreadLocal", "Delete the driver factory; extend BaseTest (per-thread isolation is built in).")); } }); - // MIG-002: WebDriverManager.*.setup() + cu.findAll(NameExpr.class).stream() .filter(n -> n.getNameAsString().equals("WebDriverManager")) .forEach(n -> out.add(new Finding("MIG-002", AUTO, file, line(n), "WebDriverManager", "Delete; Selenium Manager fetches drivers automatically."))); - // MIG-003: WebDriverWait / ExpectedConditions + cu.findAll(ObjectCreationExpr.class).stream() .filter(o -> o.getType().getNameAsString().equals("WebDriverWait")) .forEach(o -> out.add(new Finding("MIG-003", MANUAL, file, line(o), "new WebDriverWait(...)", "Use $(locator) auto-wait or getWait(); review the condition by hand."))); + cu.findAll(NameExpr.class).stream() .filter(n -> n.getNameAsString().equals("ExpectedConditions")) .forEach(n -> out.add(new Finding("MIG-003", MANUAL, file, line(n), "ExpectedConditions", "Map to $(locator) auto-wait or a WaitEngine call."))); - // MIG-004: retry analyzer / annotation transformer + cu.findAll(ClassOrInterfaceDeclaration.class).forEach(c -> { + boolean retry = c.getImplementedTypes().stream() .anyMatch(t -> t.getNameAsString().equals("IRetryAnalyzer") || t.getNameAsString().equals("IAnnotationTransformer")); + if (retry) { out.add(new Finding("MIG-004", AUTO, file, line(c), c.getNameAsString(), "Delete; set retry.enabled in selenium-boot.yml or use @Retryable.")); } - // MIG-005: screenshot-on-failure listener - boolean listener = c.getImplementedTypes().stream().anyMatch(t -> t.getNameAsString().equals("ITestListener")); - boolean shots = c.findAll(NameExpr.class).stream().anyMatch(n -> n.getNameAsString().equals("TakesScreenshot")) + + boolean listener = c.getImplementedTypes().stream() + .anyMatch(t -> t.getNameAsString().equals("ITestListener")); + + boolean shots = c.findAll(NameExpr.class).stream() + .anyMatch(n -> n.getNameAsString().equals("TakesScreenshot")) || c.toString().contains("TakesScreenshot"); + if (listener && shots) { out.add(new Finding("MIG-005", AUTO, file, line(c), c.getNameAsString(), "Delete; failure screenshots are captured automatically.")); } }); - // MIG-014: hard-coded sleeps, MIG-016: implicit waits (flag only) + cu.findAll(MethodCallExpr.class).forEach(m -> { - if (m.getNameAsString().equals("sleep") && m.getScope().map(s -> s.toString().equals("Thread")).orElse(false)) { + + if (m.getNameAsString().equals("sleep") + && m.getScope().map(s -> s.toString().equals("Thread")).orElse(false)) { + out.add(new Finding("MIG-014", MANUAL, file, line(m), "Thread.sleep(...)", "Replace with an auto-waiting locator or getWait().")); } + if (m.getNameAsString().equals("implicitlyWait")) { out.add(new Finding("MIG-016", MANUAL, file, line(m), "implicitlyWait(...)", "Remove; mixing implicit and explicit waits causes flakiness.")); } }); - // MIG-015: custom DriverManager (flag only) + cu.findAll(ClassOrInterfaceDeclaration.class).stream() - .filter(c -> c.getNameAsString().endsWith("DriverManager") || c.getNameAsString().endsWith("DriverFactory")) + .filter(c -> c.getNameAsString().endsWith("DriverManager") + || c.getNameAsString().endsWith("DriverFactory")) .forEach(c -> out.add(new Finding("MIG-015", MANUAL, file, line(c), c.getNameAsString(), "Custom driver lifecycle: review, then replace with BaseTest."))); } From 7357538fe927e0aefd5bfeb25dc166ea3cb2cdf2 Mon Sep 17 00:00:00 2001 From: "Mathi Sree.R" Date: Sat, 26 Sep 2026 13:12:43 +0530 Subject: [PATCH 3/6] Add detected technologies to report --- .../java/com/seleniumboot/migrator/Report.java | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/seleniumboot/migrator/Report.java b/src/main/java/com/seleniumboot/migrator/Report.java index 7f9ea3c..7f3064f 100644 --- a/src/main/java/com/seleniumboot/migrator/Report.java +++ b/src/main/java/com/seleniumboot/migrator/Report.java @@ -5,10 +5,15 @@ import java.util.TreeMap; public record Report(int filesFound, int filesParsed, List unparsable, List findings, - List detectedTechnologies) { + List detectedTechnologies, List recognizedTechnologies) { public Report(int filesFound, int filesParsed, List unparsable, List findings) { - this(filesFound, filesParsed, unparsable, findings, List.of()); + this(filesFound, filesParsed, unparsable, findings, List.of(), List.of()); + } + + public Report(int filesFound, int filesParsed, List unparsable, List findings, + List detectedTechnologies) { + this(filesFound, filesParsed, unparsable, findings, detectedTechnologies, List.of()); } public long count(Finding.Status s) { @@ -33,6 +38,12 @@ public String render() { } else { detectedTechnologies.forEach(technology -> sb.append(" ").append(technology).append('\n')); } + sb.append("\nRecognized technologies\n"); + if (recognizedTechnologies.isEmpty()) { + sb.append(" No supported test technologies detected\n"); + } else { + sb.append(" ").append(String.join(", ", recognizedTechnologies)).append('\n'); + } Map byRule = new TreeMap<>(); findings.forEach(f -> byRule.merge(f.ruleId(), 1L, Long::sum)); byRule.forEach((r, n) -> sb.append(String.format("%-40s %d%n", ruleLabel(r) + ":", n))); From ad6bb44eb59c66337015671e6f68679ea1e6fd27 Mon Sep 17 00:00:00 2001 From: Pushpak-Jaiswal Date: Sun, 27 Sep 2026 20:12:57 +0530 Subject: [PATCH 4/6] Requested Updates --- .../com/seleniumboot/migrator/Analyzer.java | 98 +++++++++++------ .../seleniumboot/migrator/AnalyzerTest.java | 102 +++++++++++++++++- .../.gradle/9.2.0/checksums/checksums.lock | Bin 0 -> 17 bytes .../.gradle/9.2.0/fileChanges/last-build.bin | Bin 0 -> 1 bytes .../.gradle/9.2.0/fileHashes/fileHashes.bin | Bin 0 -> 18547 bytes .../.gradle/9.2.0/fileHashes/fileHashes.lock | Bin 0 -> 17 bytes .../gradle-groovy/.gradle/9.2.0/gc.properties | 0 .../buildOutputCleanup.lock | Bin 0 -> 17 bytes .../buildOutputCleanup/cache.properties | 2 + .../gradle-groovy/.gradle/vcs-1/gc.properties | 0 .../.gradle/9.2.0/checksums/checksums.lock | Bin 0 -> 17 bytes .../.gradle/9.2.0/fileChanges/last-build.bin | Bin 0 -> 1 bytes .../.gradle/9.2.0/fileHashes/fileHashes.bin | Bin 0 -> 18547 bytes .../.gradle/9.2.0/fileHashes/fileHashes.lock | Bin 0 -> 17 bytes .../gradle-kotlin/.gradle/9.2.0/gc.properties | 0 .../buildOutputCleanup.lock | Bin 0 -> 17 bytes .../buildOutputCleanup/cache.properties | 2 + .../gradle-kotlin/.gradle/vcs-1/gc.properties | 0 18 files changed, 170 insertions(+), 34 deletions(-) create mode 100644 src/test/resources/gradle-groovy/.gradle/9.2.0/checksums/checksums.lock create mode 100644 src/test/resources/gradle-groovy/.gradle/9.2.0/fileChanges/last-build.bin create mode 100644 src/test/resources/gradle-groovy/.gradle/9.2.0/fileHashes/fileHashes.bin create mode 100644 src/test/resources/gradle-groovy/.gradle/9.2.0/fileHashes/fileHashes.lock create mode 100644 src/test/resources/gradle-groovy/.gradle/9.2.0/gc.properties create mode 100644 src/test/resources/gradle-groovy/.gradle/buildOutputCleanup/buildOutputCleanup.lock create mode 100644 src/test/resources/gradle-groovy/.gradle/buildOutputCleanup/cache.properties create mode 100644 src/test/resources/gradle-groovy/.gradle/vcs-1/gc.properties create mode 100644 src/test/resources/gradle-kotlin/.gradle/9.2.0/checksums/checksums.lock create mode 100644 src/test/resources/gradle-kotlin/.gradle/9.2.0/fileChanges/last-build.bin create mode 100644 src/test/resources/gradle-kotlin/.gradle/9.2.0/fileHashes/fileHashes.bin create mode 100644 src/test/resources/gradle-kotlin/.gradle/9.2.0/fileHashes/fileHashes.lock create mode 100644 src/test/resources/gradle-kotlin/.gradle/9.2.0/gc.properties create mode 100644 src/test/resources/gradle-kotlin/.gradle/buildOutputCleanup/buildOutputCleanup.lock create mode 100644 src/test/resources/gradle-kotlin/.gradle/buildOutputCleanup/cache.properties create mode 100644 src/test/resources/gradle-kotlin/.gradle/vcs-1/gc.properties diff --git a/src/main/java/com/seleniumboot/migrator/Analyzer.java b/src/main/java/com/seleniumboot/migrator/Analyzer.java index a5455ed..56cf7a6 100644 --- a/src/main/java/com/seleniumboot/migrator/Analyzer.java +++ b/src/main/java/com/seleniumboot/migrator/Analyzer.java @@ -32,36 +32,32 @@ public Report analyze(Path root) throws IOException { try (Stream s = Files.walk(root)) { files = s.filter(p -> p.toString().endsWith(".java")).sorted().toList(); } - List findings = new ArrayList<>(); int parsed = 0; List unparsable = new ArrayList<>(); - for (Path f : files) { var result = parser.parse(f); - if (result.getResult().isEmpty() || !result.isSuccessful()) { unparsable.add(root.relativize(f).toString()); continue; } - parsed++; scan(result.getResult().get(), root.relativize(f).toString(), findings); } - return new Report(files.size(), parsed, unparsable, findings, BuildFileAnalyzer.detect(root)); + List detectedTechnologies = BuildFileAnalyzer.detect(root); + return new Report(files.size(), parsed, unparsable, findings, detectedTechnologies, + recognizedTechnologies(detectedTechnologies)); } + /** Analyze a single pasted source string. */ public Report analyzeSource(String source) { var result = parser.parse(source); List findings = new ArrayList<>(); - if (result.getResult().isEmpty() || !result.isSuccessful()) { - return new Report(1, 0, List.of(""), findings, "not detected"); + return new Report(1, 0, List.of(""), findings); } - scan(result.getResult().get(), "", findings); - - return new Report(1, 1, List.of(), findings, "not detected"); + return new Report(1, 1, List.of(), findings); } private void scan(CompilationUnit cu, String file, List out) { @@ -88,70 +84,57 @@ private void scan(CompilationUnit cu, String file, List out) { // MIG-001: ThreadLocal driver factory cu.findAll(FieldDeclaration.class).forEach(fd -> { String type = fd.getElementType().toString(); - if (type.startsWith("ThreadLocal<") && type.contains("WebDriver")) { out.add(new Finding("MIG-001", AUTO, file, line(fd), "ThreadLocal", "Delete the driver factory; extend BaseTest (per-thread isolation is built in).")); } }); - + // MIG-002: WebDriverManager.*.setup() cu.findAll(NameExpr.class).stream() .filter(n -> n.getNameAsString().equals("WebDriverManager")) .forEach(n -> out.add(new Finding("MIG-002", AUTO, file, line(n), "WebDriverManager", "Delete; Selenium Manager fetches drivers automatically."))); - + // MIG-003: WebDriverWait / ExpectedConditions cu.findAll(ObjectCreationExpr.class).stream() .filter(o -> o.getType().getNameAsString().equals("WebDriverWait")) .forEach(o -> out.add(new Finding("MIG-003", MANUAL, file, line(o), "new WebDriverWait(...)", "Use $(locator) auto-wait or getWait(); review the condition by hand."))); - cu.findAll(NameExpr.class).stream() .filter(n -> n.getNameAsString().equals("ExpectedConditions")) .forEach(n -> out.add(new Finding("MIG-003", MANUAL, file, line(n), "ExpectedConditions", "Map to $(locator) auto-wait or a WaitEngine call."))); - + // MIG-004: retry analyzer / annotation transformer cu.findAll(ClassOrInterfaceDeclaration.class).forEach(c -> { - boolean retry = c.getImplementedTypes().stream() .anyMatch(t -> t.getNameAsString().equals("IRetryAnalyzer") || t.getNameAsString().equals("IAnnotationTransformer")); - if (retry) { out.add(new Finding("MIG-004", AUTO, file, line(c), c.getNameAsString(), "Delete; set retry.enabled in selenium-boot.yml or use @Retryable.")); } - - boolean listener = c.getImplementedTypes().stream() - .anyMatch(t -> t.getNameAsString().equals("ITestListener")); - - boolean shots = c.findAll(NameExpr.class).stream() - .anyMatch(n -> n.getNameAsString().equals("TakesScreenshot")) + // MIG-005: screenshot-on-failure listener + boolean listener = c.getImplementedTypes().stream().anyMatch(t -> t.getNameAsString().equals("ITestListener")); + boolean shots = c.findAll(NameExpr.class).stream().anyMatch(n -> n.getNameAsString().equals("TakesScreenshot")) || c.toString().contains("TakesScreenshot"); - if (listener && shots) { out.add(new Finding("MIG-005", AUTO, file, line(c), c.getNameAsString(), "Delete; failure screenshots are captured automatically.")); } }); - + // MIG-014: hard-coded sleeps, MIG-016: implicit waits (flag only) cu.findAll(MethodCallExpr.class).forEach(m -> { - - if (m.getNameAsString().equals("sleep") - && m.getScope().map(s -> s.toString().equals("Thread")).orElse(false)) { - + if (m.getNameAsString().equals("sleep") && m.getScope().map(s -> s.toString().equals("Thread")).orElse(false)) { out.add(new Finding("MIG-014", MANUAL, file, line(m), "Thread.sleep(...)", "Replace with an auto-waiting locator or getWait().")); } - if (m.getNameAsString().equals("implicitlyWait")) { out.add(new Finding("MIG-016", MANUAL, file, line(m), "implicitlyWait(...)", "Remove; mixing implicit and explicit waits causes flakiness.")); } }); - + // MIG-015: custom DriverManager (flag only) cu.findAll(ClassOrInterfaceDeclaration.class).stream() - .filter(c -> c.getNameAsString().endsWith("DriverManager") - || c.getNameAsString().endsWith("DriverFactory")) + .filter(c -> c.getNameAsString().endsWith("DriverManager") || c.getNameAsString().endsWith("DriverFactory")) .forEach(c -> out.add(new Finding("MIG-015", MANUAL, file, line(c), c.getNameAsString(), "Custom driver lifecycle: review, then replace with BaseTest."))); } @@ -172,4 +155,53 @@ private static boolean isWebDriverType(String type) { private static boolean isAnnotation(String name, String simpleName) { return name.equals(simpleName) || name.endsWith("." + simpleName); } + + private static List recognizedTechnologies(List detectedTechnologies) { + boolean testNg = false; + boolean junit4 = false; + boolean junit5 = false; + boolean webDriverManager = false; + boolean extentReports = false; + boolean allure = false; + String seleniumVersion = null; + + for (String detected : detectedTechnologies) { + if (!detected.startsWith("Dependency: ")) continue; + + String[] coordinates = detected.substring("Dependency: ".length()).split(":", -1); + if (coordinates.length < 2) continue; + + String groupId = coordinates[0]; + String artifactId = coordinates[1]; + String version = coordinates.length > 2 ? coordinates[2] : ""; + + if (groupId.equals("org.seleniumhq.selenium") && artifactId.equals("selenium-java")) { + seleniumVersion = version; + } else if (groupId.equals("org.testng") && artifactId.equals("testng")) { + testNg = true; + } else if (groupId.equals("junit") && artifactId.equals("junit")) { + junit4 = true; + } else if (groupId.equals("org.junit.jupiter")) { + junit5 = true; + } else if (groupId.equals("io.github.bonigarcia") && artifactId.equals("webdrivermanager")) { + webDriverManager = true; + } else if (groupId.equals("com.aventstack") && artifactId.equals("extentreports")) { + extentReports = true; + } else if (groupId.equals("io.qameta.allure")) { + allure = true; + } + } + + List recognized = new ArrayList<>(); + if (seleniumVersion != null) { + recognized.add(seleniumVersion.isBlank() ? "Selenium" : "Selenium " + seleniumVersion); + } + if (testNg) recognized.add("TestNG"); + if (junit4) recognized.add("JUnit 4"); + if (junit5) recognized.add("JUnit 5"); + if (webDriverManager) recognized.add("WebDriverManager"); + if (extentReports) recognized.add("ExtentReports"); + if (allure) recognized.add("Allure"); + return List.copyOf(recognized); + } } diff --git a/src/test/java/com/seleniumboot/migrator/AnalyzerTest.java b/src/test/java/com/seleniumboot/migrator/AnalyzerTest.java index 02d2429..9d3fa58 100644 --- a/src/test/java/com/seleniumboot/migrator/AnalyzerTest.java +++ b/src/test/java/com/seleniumboot/migrator/AnalyzerTest.java @@ -88,7 +88,6 @@ void unparsableSourceIsReportedNotThrown() { } @Test -<<<<<<< HEAD void detectsGroovyGradleBuildAndDependencies() throws Exception { String output = new Analyzer().analyze(fixture("gradle-groovy")).render(); assertTrue(output.contains("Detected technologies")); @@ -162,11 +161,26 @@ void detectsMavenAndTechnologies() throws Exception { junit-jupiter 5.10.2 + + junit + junit + 4.13.2 + io.github.bonigarcia webdrivermanager 5.8.0 + + com.aventstack + extentreports + 5.1.1 + + + io.qameta.allure + allure-testng + 2.27.0 + """); @@ -178,6 +192,92 @@ void detectsMavenAndTechnologies() throws Exception { assertTrue(report.render().contains("TestNG")); assertTrue(report.render().contains("JUnit 5")); assertTrue(report.render().contains("WebDriverManager")); + assertEquals(List.of("Selenium 4.20.0", "TestNG", "JUnit 4", "JUnit 5", + "WebDriverManager", "ExtentReports", "Allure"), report.recognizedTechnologies()); + } + + @Test + void recognizesOnlyDirectDependenciesAndDeduplicatesModules(@TempDir Path root) throws Exception { + Files.writeString(root.resolve("pom.xml"), """ + + + + + org.junit.jupiter + junit-jupiter + 5.10.2 + + + + + + org.testng + testng + 7.10.0 + + + + + + + + com.aventstack + extentreports + 5.1.1 + + + + + + + """); + + Path module = Files.createDirectories(root.resolve("module")); + Files.writeString(module.resolve("pom.xml"), """ + + + + org.testng + testng + 7.10.0 + + + org.seleniumhq.selenium + selenium-java + 4.20.0 + + + + """); + + var report = new Analyzer().analyze(root); + + assertEquals(List.of("Selenium 4.20.0", "TestNG"), report.recognizedTechnologies()); + assertEquals(1, report.detectedTechnologies().stream() + .filter(dependency -> dependency.equals("Dependency: org.testng:testng:7.10.0")) + .count()); + } + + @Test + void rejectsDoctypeInMavenBuildFile(@TempDir Path root) throws Exception { + Path secret = Files.writeString(root.resolve("external.txt"), "must-not-be-read"); + Files.writeString(root.resolve("pom.xml"), """ + ]> + + + + org.testng + testng + &xxe; + + + + """.formatted(secret.toUri())); + + String output = new Analyzer().analyze(root).render(); + + assertTrue(output.contains("Build system: Maven (could not parse pom.xml)")); + assertFalse(output.contains("must-not-be-read")); } @Test diff --git a/src/test/resources/gradle-groovy/.gradle/9.2.0/checksums/checksums.lock b/src/test/resources/gradle-groovy/.gradle/9.2.0/checksums/checksums.lock new file mode 100644 index 0000000000000000000000000000000000000000..8b494bb212dc257d3bb2e389f4886171473ab5db GIT binary patch literal 17 TcmZS1)SDu?>xgd>0~7!NDtiNU literal 0 HcmV?d00001 diff --git a/src/test/resources/gradle-groovy/.gradle/9.2.0/fileChanges/last-build.bin b/src/test/resources/gradle-groovy/.gradle/9.2.0/fileChanges/last-build.bin new file mode 100644 index 0000000000000000000000000000000000000000..f76dd238ade08917e6712764a16a22005a50573d GIT binary patch literal 1 IcmZPo000310RR91 literal 0 HcmV?d00001 diff --git a/src/test/resources/gradle-groovy/.gradle/9.2.0/fileHashes/fileHashes.bin b/src/test/resources/gradle-groovy/.gradle/9.2.0/fileHashes/fileHashes.bin new file mode 100644 index 0000000000000000000000000000000000000000..6084f6ce9c36ad808f62e7944843d5b6ccb85aaa GIT binary patch literal 18547 zcmeI(u?oRK7y$5Nl%k}pMv;`6Qk0F9XEAsHnXE>eiCuXDlLwI5;0+Aizdv~e>G##$ zecgA%-EY0Seh8J~^Bv(Eq@K!5-N0t5&UAV7cs0RjXF5FkK+009C7{zYIK50Xm{ zQ)y(Aq%aGim5)j0xR@N)x6(N+4||{cgU=Y}YiUhSfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5*BfpxMn}oQ<_n9+D`Wrw literal 0 HcmV?d00001 diff --git a/src/test/resources/gradle-groovy/.gradle/9.2.0/fileHashes/fileHashes.lock b/src/test/resources/gradle-groovy/.gradle/9.2.0/fileHashes/fileHashes.lock new file mode 100644 index 0000000000000000000000000000000000000000..4e2f0c0cf84a546c8536cc74e4fe78ada6f930d4 GIT binary patch literal 17 TcmZRMN@bB|`9H0K0Ror-BBBEJ literal 0 HcmV?d00001 diff --git a/src/test/resources/gradle-groovy/.gradle/9.2.0/gc.properties b/src/test/resources/gradle-groovy/.gradle/9.2.0/gc.properties new file mode 100644 index 0000000..e69de29 diff --git a/src/test/resources/gradle-groovy/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/src/test/resources/gradle-groovy/.gradle/buildOutputCleanup/buildOutputCleanup.lock new file mode 100644 index 0000000000000000000000000000000000000000..7c0e4d34302ea170acddf13efa8796b9734e22bb GIT binary patch literal 17 UcmZP$crsHyeiCuXDlLwI5;0+Aizdv~e>G##$ zecgA%-EY0Seh8J~^Bv(Eq@K!5-N0t5&UAV7cs0RjXF5FkK+009C7{zYIK50Xm{ zQ)y(Aq%aGim5)j0xR@N)x6(N+4||{cgU=Y}YiUhSfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5*BfpxMn}oQ<_n9+D`Wrw literal 0 HcmV?d00001 diff --git a/src/test/resources/gradle-kotlin/.gradle/9.2.0/fileHashes/fileHashes.lock b/src/test/resources/gradle-kotlin/.gradle/9.2.0/fileHashes/fileHashes.lock new file mode 100644 index 0000000000000000000000000000000000000000..57f3da496c6990a2f2e080ad45f7068fcf275e38 GIT binary patch literal 17 TcmZRM(sR~J_gW&)00GPZ9vT94 literal 0 HcmV?d00001 diff --git a/src/test/resources/gradle-kotlin/.gradle/9.2.0/gc.properties b/src/test/resources/gradle-kotlin/.gradle/9.2.0/gc.properties new file mode 100644 index 0000000..e69de29 diff --git a/src/test/resources/gradle-kotlin/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/src/test/resources/gradle-kotlin/.gradle/buildOutputCleanup/buildOutputCleanup.lock new file mode 100644 index 0000000000000000000000000000000000000000..1951073fdcde677f713905c29638c495abc20a41 GIT binary patch literal 17 UcmZSXx6SCk^v`!80|YPv05>QEh5!Hn literal 0 HcmV?d00001 diff --git a/src/test/resources/gradle-kotlin/.gradle/buildOutputCleanup/cache.properties b/src/test/resources/gradle-kotlin/.gradle/buildOutputCleanup/cache.properties new file mode 100644 index 0000000..45167b0 --- /dev/null +++ b/src/test/resources/gradle-kotlin/.gradle/buildOutputCleanup/cache.properties @@ -0,0 +1,2 @@ +#Sun Sep 27 19:58:23 IST 2026 +gradle.version=9.2.0 diff --git a/src/test/resources/gradle-kotlin/.gradle/vcs-1/gc.properties b/src/test/resources/gradle-kotlin/.gradle/vcs-1/gc.properties new file mode 100644 index 0000000..e69de29 From 2c1b41c9d7952e2979527daa3dc989c01f95f93e Mon Sep 17 00:00:00 2001 From: Pushpak-Jaiswal Date: Sun, 27 Sep 2026 20:23:46 +0530 Subject: [PATCH 5/6] fixed GitIgnore for Gradle/ --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index ec10551..c3cddb8 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ target/ +.gradle/ .idea/ *.iml From e86d0f12d10e57273e5ea973646a96a012fe8b61 Mon Sep 17 00:00:00 2001 From: Pushpak-Jaiswal Date: Sun, 27 Sep 2026 20:26:34 +0530 Subject: [PATCH 6/6] Remove generated Gradle caches --- .../.gradle/9.2.0/checksums/checksums.lock | Bin 17 -> 0 bytes .../.gradle/9.2.0/fileChanges/last-build.bin | Bin 1 -> 0 bytes .../.gradle/9.2.0/fileHashes/fileHashes.bin | Bin 18547 -> 0 bytes .../.gradle/9.2.0/fileHashes/fileHashes.lock | Bin 17 -> 0 bytes .../gradle-groovy/.gradle/9.2.0/gc.properties | 0 .../buildOutputCleanup/buildOutputCleanup.lock | Bin 17 -> 0 bytes .../.gradle/buildOutputCleanup/cache.properties | 2 -- .../gradle-groovy/.gradle/vcs-1/gc.properties | 0 .../.gradle/9.2.0/checksums/checksums.lock | Bin 17 -> 0 bytes .../.gradle/9.2.0/fileChanges/last-build.bin | Bin 1 -> 0 bytes .../.gradle/9.2.0/fileHashes/fileHashes.bin | Bin 18547 -> 0 bytes .../.gradle/9.2.0/fileHashes/fileHashes.lock | Bin 17 -> 0 bytes .../gradle-kotlin/.gradle/9.2.0/gc.properties | 0 .../buildOutputCleanup/buildOutputCleanup.lock | Bin 17 -> 0 bytes .../.gradle/buildOutputCleanup/cache.properties | 2 -- .../gradle-kotlin/.gradle/vcs-1/gc.properties | 0 16 files changed, 4 deletions(-) delete mode 100644 src/test/resources/gradle-groovy/.gradle/9.2.0/checksums/checksums.lock delete mode 100644 src/test/resources/gradle-groovy/.gradle/9.2.0/fileChanges/last-build.bin delete mode 100644 src/test/resources/gradle-groovy/.gradle/9.2.0/fileHashes/fileHashes.bin delete mode 100644 src/test/resources/gradle-groovy/.gradle/9.2.0/fileHashes/fileHashes.lock delete mode 100644 src/test/resources/gradle-groovy/.gradle/9.2.0/gc.properties delete mode 100644 src/test/resources/gradle-groovy/.gradle/buildOutputCleanup/buildOutputCleanup.lock delete mode 100644 src/test/resources/gradle-groovy/.gradle/buildOutputCleanup/cache.properties delete mode 100644 src/test/resources/gradle-groovy/.gradle/vcs-1/gc.properties delete mode 100644 src/test/resources/gradle-kotlin/.gradle/9.2.0/checksums/checksums.lock delete mode 100644 src/test/resources/gradle-kotlin/.gradle/9.2.0/fileChanges/last-build.bin delete mode 100644 src/test/resources/gradle-kotlin/.gradle/9.2.0/fileHashes/fileHashes.bin delete mode 100644 src/test/resources/gradle-kotlin/.gradle/9.2.0/fileHashes/fileHashes.lock delete mode 100644 src/test/resources/gradle-kotlin/.gradle/9.2.0/gc.properties delete mode 100644 src/test/resources/gradle-kotlin/.gradle/buildOutputCleanup/buildOutputCleanup.lock delete mode 100644 src/test/resources/gradle-kotlin/.gradle/buildOutputCleanup/cache.properties delete mode 100644 src/test/resources/gradle-kotlin/.gradle/vcs-1/gc.properties diff --git a/src/test/resources/gradle-groovy/.gradle/9.2.0/checksums/checksums.lock b/src/test/resources/gradle-groovy/.gradle/9.2.0/checksums/checksums.lock deleted file mode 100644 index 8b494bb212dc257d3bb2e389f4886171473ab5db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17 TcmZS1)SDu?>xgd>0~7!NDtiNU diff --git a/src/test/resources/gradle-groovy/.gradle/9.2.0/fileChanges/last-build.bin b/src/test/resources/gradle-groovy/.gradle/9.2.0/fileChanges/last-build.bin deleted file mode 100644 index f76dd238ade08917e6712764a16a22005a50573d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1 IcmZPo000310RR91 diff --git a/src/test/resources/gradle-groovy/.gradle/9.2.0/fileHashes/fileHashes.bin b/src/test/resources/gradle-groovy/.gradle/9.2.0/fileHashes/fileHashes.bin deleted file mode 100644 index 6084f6ce9c36ad808f62e7944843d5b6ccb85aaa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18547 zcmeI(u?oRK7y$5Nl%k}pMv;`6Qk0F9XEAsHnXE>eiCuXDlLwI5;0+Aizdv~e>G##$ zecgA%-EY0Seh8J~^Bv(Eq@K!5-N0t5&UAV7cs0RjXF5FkK+009C7{zYIK50Xm{ zQ)y(Aq%aGim5)j0xR@N)x6(N+4||{cgU=Y}YiUhSfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5*BfpxMn}oQ<_n9+D`Wrw diff --git a/src/test/resources/gradle-groovy/.gradle/9.2.0/fileHashes/fileHashes.lock b/src/test/resources/gradle-groovy/.gradle/9.2.0/fileHashes/fileHashes.lock deleted file mode 100644 index 4e2f0c0cf84a546c8536cc74e4fe78ada6f930d4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17 TcmZRMN@bB|`9H0K0Ror-BBBEJ diff --git a/src/test/resources/gradle-groovy/.gradle/9.2.0/gc.properties b/src/test/resources/gradle-groovy/.gradle/9.2.0/gc.properties deleted file mode 100644 index e69de29..0000000 diff --git a/src/test/resources/gradle-groovy/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/src/test/resources/gradle-groovy/.gradle/buildOutputCleanup/buildOutputCleanup.lock deleted file mode 100644 index 7c0e4d34302ea170acddf13efa8796b9734e22bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17 UcmZP$crsHyeiCuXDlLwI5;0+Aizdv~e>G##$ zecgA%-EY0Seh8J~^Bv(Eq@K!5-N0t5&UAV7cs0RjXF5FkK+009C7{zYIK50Xm{ zQ)y(Aq%aGim5)j0xR@N)x6(N+4||{cgU=Y}YiUhSfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5*BfpxMn}oQ<_n9+D`Wrw diff --git a/src/test/resources/gradle-kotlin/.gradle/9.2.0/fileHashes/fileHashes.lock b/src/test/resources/gradle-kotlin/.gradle/9.2.0/fileHashes/fileHashes.lock deleted file mode 100644 index 57f3da496c6990a2f2e080ad45f7068fcf275e38..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17 TcmZRM(sR~J_gW&)00GPZ9vT94 diff --git a/src/test/resources/gradle-kotlin/.gradle/9.2.0/gc.properties b/src/test/resources/gradle-kotlin/.gradle/9.2.0/gc.properties deleted file mode 100644 index e69de29..0000000 diff --git a/src/test/resources/gradle-kotlin/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/src/test/resources/gradle-kotlin/.gradle/buildOutputCleanup/buildOutputCleanup.lock deleted file mode 100644 index 1951073fdcde677f713905c29638c495abc20a41..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17 UcmZSXx6SCk^v`!80|YPv05>QEh5!Hn diff --git a/src/test/resources/gradle-kotlin/.gradle/buildOutputCleanup/cache.properties b/src/test/resources/gradle-kotlin/.gradle/buildOutputCleanup/cache.properties deleted file mode 100644 index 45167b0..0000000 --- a/src/test/resources/gradle-kotlin/.gradle/buildOutputCleanup/cache.properties +++ /dev/null @@ -1,2 +0,0 @@ -#Sun Sep 27 19:58:23 IST 2026 -gradle.version=9.2.0 diff --git a/src/test/resources/gradle-kotlin/.gradle/vcs-1/gc.properties b/src/test/resources/gradle-kotlin/.gradle/vcs-1/gc.properties deleted file mode 100644 index e69de29..0000000