From 8e5c63d035ef44a269b8c43430f43f5c8eebfb63 Mon Sep 17 00:00:00 2001 From: Ignat Beresnev Date: Fri, 10 Nov 2023 11:46:54 +0100 Subject: Restructure the project to utilize included builds (#3174) * Refactor and simplify artifact publishing * Update Gradle to 8.4 * Refactor and simplify convention plugins and build scripts Fixes #3132 --------- Co-authored-by: Adam <897017+aSemy@users.noreply.github.com> Co-authored-by: Oleg Yukhnevich --- integration-tests/maven/build.gradle.kts | 30 --- integration-tests/maven/projects/biojava/biojava | 1 - .../maven/projects/biojava/biojava.diff | 37 ---- .../it-maven/customResources/custom-resource.svg | 7 - .../customResources/custom-style-to-add.css | 5 - .../it-maven/customResources/logo-styles.css | 7 - integration-tests/maven/projects/it-maven/pom.xml | 192 ------------------ .../main/java/it/basic/java/SampleJavaClass.java | 22 --- .../src/main/kotlin/it/basic/PublicClass.kt | 57 ------ .../src/main/kotlin/it/internal/InternalClass.kt | 7 - .../it/overriddenVisibility/VisiblePrivateClass.kt | 12 -- .../src/main/kotlin/it/protected/ProtectedClass.kt | 10 - .../dokka/it/maven/BiojavaIntegrationTest.kt | 63 ------ .../dokka/it/maven/MavenIntegrationTest.kt | 219 --------------------- 14 files changed, 669 deletions(-) delete mode 100644 integration-tests/maven/build.gradle.kts delete mode 160000 integration-tests/maven/projects/biojava/biojava delete mode 100644 integration-tests/maven/projects/biojava/biojava.diff delete mode 100644 integration-tests/maven/projects/it-maven/customResources/custom-resource.svg delete mode 100644 integration-tests/maven/projects/it-maven/customResources/custom-style-to-add.css delete mode 100644 integration-tests/maven/projects/it-maven/customResources/logo-styles.css delete mode 100644 integration-tests/maven/projects/it-maven/pom.xml delete mode 100644 integration-tests/maven/projects/it-maven/src/main/java/it/basic/java/SampleJavaClass.java delete mode 100644 integration-tests/maven/projects/it-maven/src/main/kotlin/it/basic/PublicClass.kt delete mode 100644 integration-tests/maven/projects/it-maven/src/main/kotlin/it/internal/InternalClass.kt delete mode 100644 integration-tests/maven/projects/it-maven/src/main/kotlin/it/overriddenVisibility/VisiblePrivateClass.kt delete mode 100644 integration-tests/maven/projects/it-maven/src/main/kotlin/it/protected/ProtectedClass.kt delete mode 100644 integration-tests/maven/src/integrationTest/kotlin/org/jetbrains/dokka/it/maven/BiojavaIntegrationTest.kt delete mode 100644 integration-tests/maven/src/integrationTest/kotlin/org/jetbrains/dokka/it/maven/MavenIntegrationTest.kt (limited to 'integration-tests/maven') diff --git a/integration-tests/maven/build.gradle.kts b/integration-tests/maven/build.gradle.kts deleted file mode 100644 index 36a28f34..00000000 --- a/integration-tests/maven/build.gradle.kts +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. - */ - -import org.jetbrains.dependsOnMavenLocalPublication - -plugins { - id("org.jetbrains.conventions.dokka-integration-test") - id("org.jetbrains.conventions.maven-cli-setup") -} - -dependencies { - implementation(projects.integrationTests) - - implementation(kotlin("test-junit5")) -} - -tasks.integrationTest { - dependsOnMavenLocalPublication() - - dependsOn(tasks.installMavenBinary) - val mvn = mavenCliSetup.mvn - inputs.file(mvn) - - val dokka_version: String by project - environment("DOKKA_VERSION", dokka_version) - doFirst("workaround for https://github.com/gradle/gradle/issues/24267") { - environment("MVN_BINARY_PATH", mvn.get().asFile.invariantSeparatorsPath) - } -} diff --git a/integration-tests/maven/projects/biojava/biojava b/integration-tests/maven/projects/biojava/biojava deleted file mode 160000 index 059fbf14..00000000 --- a/integration-tests/maven/projects/biojava/biojava +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 059fbf1403d0704801df1427b0ec925102a645cd diff --git a/integration-tests/maven/projects/biojava/biojava.diff b/integration-tests/maven/projects/biojava/biojava.diff deleted file mode 100644 index 33082722..00000000 --- a/integration-tests/maven/projects/biojava/biojava.diff +++ /dev/null @@ -1,37 +0,0 @@ -diff --git a/pom.xml b/pom.xml -index 7e3e806d1..765b6dea3 100644 ---- a/pom.xml -+++ b/pom.xml -@@ -31,6 +31,12 @@ - repo - - -+ -+ -+ space -+ https://maven.pkg.jetbrains.space/public/p/kotlinx-html/maven/ -+ -+ - - - 1.8 -@@ -338,6 +356,19 @@ - - - -+ -+ org.jetbrains.dokka -+ dokka-maven-plugin -+ ${dokka_version} -+ -+ -+ pre-site -+ -+ javadoc -+ -+ -+ -+ - - - diff --git a/integration-tests/maven/projects/it-maven/customResources/custom-resource.svg b/integration-tests/maven/projects/it-maven/customResources/custom-resource.svg deleted file mode 100644 index c4b95383..00000000 --- a/integration-tests/maven/projects/it-maven/customResources/custom-resource.svg +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/integration-tests/maven/projects/it-maven/customResources/custom-style-to-add.css b/integration-tests/maven/projects/it-maven/customResources/custom-style-to-add.css deleted file mode 100644 index f949ca1c..00000000 --- a/integration-tests/maven/projects/it-maven/customResources/custom-style-to-add.css +++ /dev/null @@ -1,5 +0,0 @@ -/* - * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. - */ - -/* custom stylesheet */ diff --git a/integration-tests/maven/projects/it-maven/customResources/logo-styles.css b/integration-tests/maven/projects/it-maven/customResources/logo-styles.css deleted file mode 100644 index c7932753..00000000 --- a/integration-tests/maven/projects/it-maven/customResources/logo-styles.css +++ /dev/null @@ -1,7 +0,0 @@ -/* - * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. - */ - -:root { - --dokka-logo-image-url: url('https://upload.wikimedia.org/wikipedia/commons/9/9d/Ubuntu_logo.svg'); -} diff --git a/integration-tests/maven/projects/it-maven/pom.xml b/integration-tests/maven/projects/it-maven/pom.xml deleted file mode 100644 index 6246e27a..00000000 --- a/integration-tests/maven/projects/it-maven/pom.xml +++ /dev/null @@ -1,192 +0,0 @@ - - - - 4.0.0 - - org.jetbrains.dokka - it-maven - 1.0-SNAPSHOT - - - 1.9.20 - - - - - org.jetbrains.kotlin - kotlin-maven-plugin - ${kotlin.version} - - - compile - - compile - - - - ${project.basedir}/src/main/kotlin - ${project.basedir}/src/main/java - - - - - test-compile - - test-compile - - - - ${project.basedir}/src/test/kotlin - ${project.basedir}/src/test/java - - - - - - - org.apache.maven.plugins - maven-compiler-plugin - 3.5.1 - - - - default-compile - none - - - - default-testCompile - none - - - java-compile - compile - - compile - - - - java-test-compile - test-compile - - testCompile - - - - - - org.jetbrains.dokka - dokka-maven-plugin - $dokka_version - - - pre-site - - dokka - - - - - - - false - - - Maven Integration Test Module - - - ${project.basedir}/output - - - - default - - - - 8 - - - false - - true - - true - - - - ${project.basedir}/src/main/kotlin - ${project.basedir}/src/main/java - - - - PUBLIC - PROTECTED - - - - false - - - false - - false - - - - - - kotlin - - - false - - true - false - - - - it.overriddenVisibility.* - - PRIVATE - - - - - - - ${project.basedir}/customResources/custom-resource.svg - - - ${project.basedir}/customResources/logo-styles.css - ${project.basedir}/customResources/custom-style-to-add.css - - - - - - - ${project.basedir}/src/main/kotlin - ${project.basedir}/src/test/kotlin - - - - - Space - Space - https://maven.pkg.jetbrains.space/public/p/kotlinx-html/maven/ - - - - - - org.jetbrains.kotlin - kotlin-stdlib - ${kotlin.version} - - - - - diff --git a/integration-tests/maven/projects/it-maven/src/main/java/it/basic/java/SampleJavaClass.java b/integration-tests/maven/projects/it-maven/src/main/java/it/basic/java/SampleJavaClass.java deleted file mode 100644 index e08bb66a..00000000 --- a/integration-tests/maven/projects/it-maven/src/main/java/it/basic/java/SampleJavaClass.java +++ /dev/null @@ -1,22 +0,0 @@ -package it.basic.java; - -import it.basic.PublicClass; - -/** - * This class is, unlike {@link PublicClass}, written in Java - */ -@SuppressWarnings("unused") -public class SampleJavaClass { - - /** - * @return Empty instance of {@link PublicClass} - */ - public PublicClass publicDocumentedFunction() { - return new PublicClass(); - } - - - public PublicClass publicUndocumentedFunction() { - return new PublicClass(); - } -} diff --git a/integration-tests/maven/projects/it-maven/src/main/kotlin/it/basic/PublicClass.kt b/integration-tests/maven/projects/it-maven/src/main/kotlin/it/basic/PublicClass.kt deleted file mode 100644 index d7a72392..00000000 --- a/integration-tests/maven/projects/it-maven/src/main/kotlin/it/basic/PublicClass.kt +++ /dev/null @@ -1,57 +0,0 @@ -@file:Suppress("unused") - -package it.basic - -/** - * §PUBLIC§ (marker for asserts) - */ -class PublicClass { - /** - * This function is public and documented - */ - fun publicDocumentedFunction(): String = "" - - fun publicUndocumentedFunction(): String = "" - - /** - * This function is internal and documented - */ - internal fun internalDocumentedFunction(): String = "" - - internal fun internalUndocumentedFunction(): String = "" - - /** - * This function is private and documented - */ - private fun privateDocumentedFunction(): String = "" - - private fun privateUndocumentedFunction(): String = "" - - /** - * This function is protected and documented - */ - protected fun protectedDocumentedFunction(): String = "" - - protected fun protectedUndocumentedFunction(): String = "" - - /** - * This property is public and documented - */ - val publicDocumentedProperty: Int = 0 - - val publicUndocumentedProperty: Int = 0 - - /** - * This property internal and documented - */ - val internalDocumentedProperty: Int = 0 - - val internalUndocumentedProperty: Int = 0 - - /** - * This property private and documented - */ - private val privateDocumentedProperty: Int = 0 - - private val privateUndocumentedProperty: Int = 0 -} diff --git a/integration-tests/maven/projects/it-maven/src/main/kotlin/it/internal/InternalClass.kt b/integration-tests/maven/projects/it-maven/src/main/kotlin/it/internal/InternalClass.kt deleted file mode 100644 index 6173d239..00000000 --- a/integration-tests/maven/projects/it-maven/src/main/kotlin/it/internal/InternalClass.kt +++ /dev/null @@ -1,7 +0,0 @@ -package it.internal - -/** - * §INTERNAL§ (marker for asserts) - * This class is internal and should not be rendered - */ -internal class InternalClass diff --git a/integration-tests/maven/projects/it-maven/src/main/kotlin/it/overriddenVisibility/VisiblePrivateClass.kt b/integration-tests/maven/projects/it-maven/src/main/kotlin/it/overriddenVisibility/VisiblePrivateClass.kt deleted file mode 100644 index 230f5e0b..00000000 --- a/integration-tests/maven/projects/it-maven/src/main/kotlin/it/overriddenVisibility/VisiblePrivateClass.kt +++ /dev/null @@ -1,12 +0,0 @@ -package it.overriddenVisibility - -/** - * Private classes and methods generally should not be visible, but [documentedVisibilities] - * are overriden for this specific package to include private code - * - * §PRIVATE§ (marker for asserts) - */ -private class VisiblePrivateClass { - private val privateVal: Int = 0 - private fun privateMethod() {} -} \ No newline at end of file diff --git a/integration-tests/maven/projects/it-maven/src/main/kotlin/it/protected/ProtectedClass.kt b/integration-tests/maven/projects/it-maven/src/main/kotlin/it/protected/ProtectedClass.kt deleted file mode 100644 index ad19f1a1..00000000 --- a/integration-tests/maven/projects/it-maven/src/main/kotlin/it/protected/ProtectedClass.kt +++ /dev/null @@ -1,10 +0,0 @@ -package it.protected - -/** - * Protected class should be visible because it's included in documentedVisibilities - * - * §PROTECTED§ (marker for asserts) - */ -protected class ProtectedClass { - protected fun protectedFun(): String = "protected" -} diff --git a/integration-tests/maven/src/integrationTest/kotlin/org/jetbrains/dokka/it/maven/BiojavaIntegrationTest.kt b/integration-tests/maven/src/integrationTest/kotlin/org/jetbrains/dokka/it/maven/BiojavaIntegrationTest.kt deleted file mode 100644 index 7987d45e..00000000 --- a/integration-tests/maven/src/integrationTest/kotlin/org/jetbrains/dokka/it/maven/BiojavaIntegrationTest.kt +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. - */ - -package org.jetbrains.dokka.it.maven - -import org.jetbrains.dokka.it.* -import java.io.File -import kotlin.test.BeforeTest -import kotlin.test.Test -import kotlin.test.assertEquals -import kotlin.test.assertTrue - -class BiojavaIntegrationTest : AbstractIntegrationTest(), TestOutputCopier { - - private val currentDokkaVersion: String = checkNotNull(System.getenv("DOKKA_VERSION")) - private val mavenBinaryFile: File = File(checkNotNull(System.getenv("MVN_BINARY_PATH"))) - override val projectOutputLocation: File by lazy { File(projectDir, "biojava-core/target/dokkaJavadoc") } - - @BeforeTest - fun prepareProjectFiles() { - val templateProjectDir = File("projects", "biojava/biojava") - templateProjectDir.copyRecursively(projectDir) - val customResourcesDir = File(templateProjectDir, "custom Resources") - if (customResourcesDir.exists() && customResourcesDir.isDirectory) { - customResourcesDir.copyRecursively(File(projectDir, "customResources"), overwrite = true) - } - copyAndApplyGitDiff(File("projects", "biojava/biojava.diff")) - } - - @Test - fun `dokka javadoc`() { - val result = ProcessBuilder().directory(projectDir) - .command(mavenBinaryFile.absolutePath, "dokka:javadoc", "-pl", "biojava-core", "\"-Ddokka_version=$currentDokkaVersion\"", "-U", "-e").start().awaitProcessResult() - - diagnosticAsserts(result) - - assertTrue(projectOutputLocation.isDirectory, "Missing dokka output directory") - - val scriptsDir = File(projectOutputLocation, "jquery") - assertTrue(scriptsDir.isDirectory, "Missing jquery directory") - - val stylesDir = File(projectOutputLocation, "resources") - assertTrue(stylesDir.isDirectory, "Missing resources directory") - - projectDir.allHtmlFiles().forEach { file -> - assertContainsNoErrorClass(file) - assertNoUnresolvedLinks(file) - } - } - - private fun diagnosticAsserts(result: ProcessResult) { - assertEquals(0, result.exitCode, "Expected exitCode 0 (Success)") - - val extensionLoadedRegex = Regex("""Extension: org\.jetbrains\.dokka\.base\.DokkaBase""") - val amountOfExtensionsLoaded = extensionLoadedRegex.findAll(result.output).count() - - assertTrue( - amountOfExtensionsLoaded > 10, - "Expected more than 10 extensions being present (found $amountOfExtensionsLoaded)" - ) - } -} diff --git a/integration-tests/maven/src/integrationTest/kotlin/org/jetbrains/dokka/it/maven/MavenIntegrationTest.kt b/integration-tests/maven/src/integrationTest/kotlin/org/jetbrains/dokka/it/maven/MavenIntegrationTest.kt deleted file mode 100644 index 7606072c..00000000 --- a/integration-tests/maven/src/integrationTest/kotlin/org/jetbrains/dokka/it/maven/MavenIntegrationTest.kt +++ /dev/null @@ -1,219 +0,0 @@ -/* - * Copyright 2014-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. - */ - -package org.jetbrains.dokka.it.maven - -import org.intellij.lang.annotations.Language -import org.jetbrains.dokka.it.AbstractIntegrationTest -import org.jetbrains.dokka.it.ProcessResult -import org.jetbrains.dokka.it.awaitProcessResult -import java.io.File -import kotlin.test.* - -class MavenIntegrationTest : AbstractIntegrationTest() { - - private val currentDokkaVersion: String = checkNotNull(System.getenv("DOKKA_VERSION")) - - private val mavenBinaryFile: File = File(checkNotNull(System.getenv("MVN_BINARY_PATH"))) - - @BeforeTest - fun prepareProjectFiles() { - val templateProjectDir = File("projects", "it-maven") - templateProjectDir.copyRecursively(projectDir) - val pomXml = File(projectDir, "pom.xml") - assertTrue(pomXml.isFile) - pomXml.apply { - writeText(readText().replace("\$dokka_version", currentDokkaVersion)) - } - val customResourcesDir = File(templateProjectDir, "customResources") - if (customResourcesDir.exists() && customResourcesDir.isDirectory) { - customResourcesDir.copyRecursively(File(projectDir, "customResources"), overwrite = true) - } - } - - @Test - fun `dokka help`() { - val result = ProcessBuilder().directory(projectDir) - .command(mavenBinaryFile.absolutePath, "dokka:help", "-U", "-e") - .start() - .awaitProcessResult() - - // format the output to remove blank lines and make newlines system-independent - val output = result.output.lines().filter { it.isNotBlank() }.joinToString("\n") - - assertContains( - output, - """ - |This plugin has 4 goals: - |dokka:dokka - |dokka:help - |dokka:javadoc - |dokka:javadocJar - """.trimMargin() - ) - } - - @Test - fun `dokka dokka`() { - val result = ProcessBuilder().directory(projectDir) - .command(mavenBinaryFile.absolutePath, "dokka:dokka", "-U", "-e").start().awaitProcessResult() - - diagnosticAsserts(result) - - val dokkaOutputDir = File(projectDir, "output") - assertTrue(dokkaOutputDir.isDirectory, "Missing dokka output directory") - - val imagesDir = File(dokkaOutputDir, "images") - assertTrue(imagesDir.isDirectory, "Missing images directory") - - val scriptsDir = File(dokkaOutputDir, "scripts") - assertTrue(scriptsDir.isDirectory, "Missing scripts directory") - - val stylesDir = File(dokkaOutputDir, "styles") - assertTrue(stylesDir.isDirectory, "Missing styles directory") - - val navigationHtml = File(dokkaOutputDir, "navigation.html") - assertTrue(navigationHtml.isFile, "Missing navigation.html") - - projectDir.allHtmlFiles().forEach { file -> - assertContainsNoErrorClass(file) - assertNoUnresolvedLinks(file) - assertNoEmptyLinks(file) - assertNoEmptySpans(file) - } - - assertTrue( - stylesDir.resolve("logo-styles.css").readText().contains( - "--dokka-logo-image-url: url('https://upload.wikimedia.org/wikipedia/commons/9/9d/Ubuntu_logo.svg');", - ) - ) - assertTrue(stylesDir.resolve("custom-style-to-add.css").isFile) - projectDir.allHtmlFiles().forEach { file -> - if (file.name != "navigation.html") { - assertTrue( - "custom-style-to-add.css" in file.readText(), - "custom styles not added to html file ${file.name}" - ) - } - } - assertTrue(stylesDir.resolve("custom-style-to-add.css").readText().contains("""/* custom stylesheet */""")) - assertTrue(imagesDir.resolve("custom-resource.svg").isFile) - - assertConfiguredVisibility(projectDir) - } - - @Test - fun `dokka javadoc`() { - val result = ProcessBuilder().directory(projectDir) - .command(mavenBinaryFile.absolutePath, "dokka:javadoc", "-U", "-e").start().awaitProcessResult() - - diagnosticAsserts(result) - - val dokkaOutputDir = File(projectDir, "output") - assertTrue(dokkaOutputDir.isDirectory, "Missing dokka output directory") - - val scriptsDir = File(dokkaOutputDir, "jquery") - assertTrue(scriptsDir.isDirectory, "Missing jquery directory") - - val stylesDir = File(dokkaOutputDir, "resources") - assertTrue(stylesDir.isDirectory, "Missing resources directory") - - projectDir.allHtmlFiles().forEach { file -> - assertContainsNoErrorClass(file) - assertNoUnresolvedLinks(file) - } - } - - @Test - fun `dokka javadocJar`() { - val result = ProcessBuilder().directory(projectDir) - .command(mavenBinaryFile.absolutePath, "dokka:javadocJar", "-U", "-e").start().awaitProcessResult() - - diagnosticAsserts(result) - - val dokkaOutputDir = File(projectDir, "output") - assertTrue(dokkaOutputDir.isDirectory, "Missing dokka output directory") - - val scriptsDir = File(dokkaOutputDir, "jquery") - assertTrue(scriptsDir.isDirectory, "Missing jquery directory") - - val stylesDir = File(dokkaOutputDir, "resources") - assertTrue(stylesDir.isDirectory, "Missing resources directory") - - val dokkaTargetDir = File(projectDir, "target") - assertTrue(dokkaOutputDir.isDirectory, "Missing dokka target directory") - - val jarFile = File(dokkaTargetDir, "it-maven-1.0-SNAPSHOT-javadoc.jar") - assertTrue(jarFile.isFile, "Missing dokka jar file") - - projectDir.allHtmlFiles().forEach { file -> - assertContainsNoErrorClass(file) - assertNoUnresolvedLinks(file) - } - } - - private fun diagnosticAsserts(result: ProcessResult) { - assertEquals(0, result.exitCode, "Expected exitCode 0 (Success)") - - val extensionLoadedRegex = Regex("""Extension: org\.jetbrains\.dokka\.base\.DokkaBase""") - val amountOfExtensionsLoaded = extensionLoadedRegex.findAll(result.output).count() - - assertTrue( - amountOfExtensionsLoaded > 10, - "Expected more than 10 extensions being present (found $amountOfExtensionsLoaded)" - ) - - val undocumentedReportRegex = Regex("""Undocumented:""") - val amountOfUndocumentedReports = undocumentedReportRegex.findAll(result.output).count() - assertTrue( - amountOfUndocumentedReports > 0, - "Expected at least one report of undocumented code (found $amountOfUndocumentedReports)" - ) - - val undocumentedJavaReportRegex = Regex("""Undocumented: it\.basic\.java""") - val amountOfUndocumentedJavaReports = undocumentedJavaReportRegex.findAll(result.output).count() - assertTrue( - amountOfUndocumentedJavaReports > 0, - "Expected at least one report of undocumented java code (found $amountOfUndocumentedJavaReports)" - ) - } - - private fun assertConfiguredVisibility(projectDir: File) { - val projectHtmlFiles = projectDir.allHtmlFiles().toList() - - assertContentVisibility( - contentFiles = projectHtmlFiles, - documentPublic = true, - documentProtected = true, // sourceSet documentedVisibilities - documentInternal = false, - documentPrivate = true // for overriddenVisibility package - ) - - assertContainsFilePaths( - outputFiles = projectHtmlFiles, - expectedFilePaths = listOf( - // documentedVisibilities is overridden for package `overriddenVisibility` specifically - // to include private code, so html pages for it are expected to have been created - Regex("it\\.overriddenVisibility/-visible-private-class/private-method\\.html"), - Regex("it\\.overriddenVisibility/-visible-private-class/private-val\\.html"), - ) - ) - } - - companion object { - /* - * TODO replace with kotlin.test.assertContains after migrating to Kotlin language version 1.5+ - */ - fun assertContains( - charSequence: CharSequence, - @Language("TEXT") other: CharSequence, - ignoreCase: Boolean = false - ) { - asserter.assertTrue( - { "Expected the char sequence to contain the substring.\nCharSequence <$charSequence>, substring <$other>, ignoreCase <$ignoreCase>." }, - charSequence.contains(other, ignoreCase) - ) - } - } -} -- cgit