Skip to content

Commit f6467ca

Browse files
committed
convert ktlint invocations from reflection to new method of using multiple compileOnly targets
create common abstraction for Lint errors and reporters
1 parent 17eb806 commit f6467ca

File tree

45 files changed

+225
-304
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+225
-304
lines changed

CHANGELOG.md

+5
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/).
77

88
## [Unreleased]
99

10+
### Changed
11+
12+
- Added ktlint 0.49.1 supprort [#667](https://github.com/JLLeitschuh/ktlint-gradle/pull/667)
13+
- Refactored multi-ktlint support to use multiple source sets with different compileOnly dependencies rather than reflection. [#667](https://github.com/JLLeitschuh/ktlint-gradle/pull/667)
14+
1015
## [11.3.2] - 2023-04-25
1116

1217
### Fixed

plugin/build.gradle.kts

+20-2
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,10 @@ sourceSets {
6161
val adapter34 by creating {
6262
compileClasspath += adapter.output
6363
}
64+
val adapter34Test by creating {
65+
compileClasspath += adapter.output + adapter34.output
66+
runtimeClasspath += adapter.output + adapter34.output
67+
}
6468
val adapter41 by creating {
6569
compileClasspath += adapter.output
6670
}
@@ -107,6 +111,14 @@ tasks.named<Jar>("shadowJar") {
107111
this.from(adapterSources.map { sourceSet -> sourceSet.map { it.output.classesDirs } })
108112
}
109113

114+
val test34Task = tasks.register<Test>("test34") {
115+
classpath = sourceSets.named("adapter34Test").get().runtimeClasspath
116+
testClassesDirs = sourceSets.named("adapter34Test").get().output.classesDirs
117+
}
118+
tasks.named("test") {
119+
dependsOn(test34Task)
120+
}
121+
110122
dependencies {
111123
compileOnly(gradleApi())
112124
compileOnly(libs.ktlint.core)
@@ -119,12 +131,12 @@ dependencies {
119131
add("adapter46CompileOnly", "com.pinterest.ktlint:ktlint-core:0.46.1")
120132
add("adapter47CompileOnly", "com.pinterest.ktlint:ktlint-core:0.47.1")
121133
add("adapter48CompileOnly", "com.pinterest.ktlint:ktlint-core:0.48.2")
122-
// add("adapter49CompileOnly", "com.pinterest.ktlint:ktlint-rule-engine-core:0.49.0")
134+
// add("adapter49CompileOnly", "com.pinterest.ktlint:ktlint-rule-engine-core:0.49.0")
123135
add("adapter49CompileOnly", "com.pinterest.ktlint:ktlint-core:0.49.1")
124136
add("adapter49CompileOnly", "com.pinterest.ktlint:ktlint-cli-reporter:0.49.1")
125137
add("adapter49CompileOnly", "com.pinterest.ktlint:ktlint-rule-engine:0.49.1")
126138
add("adapter49CompileOnly", "com.pinterest.ktlint:ktlint-ruleset-standard:0.49.1")
127-
add("adapter49CompileOnly","com.pinterest.ktlint:ktlint-reporter-baseline:0.49.1")
139+
add("adapter49CompileOnly", "com.pinterest.ktlint:ktlint-reporter-baseline:0.49.1")
128140
compileOnly(libs.kotlin.gradle.plugin)
129141
compileOnly(libs.android.gradle.plugin)
130142
compileOnly(kotlin("stdlib-jdk8"))
@@ -146,6 +158,12 @@ dependencies {
146158
testImplementation(libs.kotlin.reflect)
147159
testImplementation(libs.ktlint.core)
148160
testImplementation(libs.archunit.junit5)
161+
162+
add("adapter34TestImplementation", "com.pinterest.ktlint:ktlint-core:0.34.0")
163+
add("adapter34TestImplementation", gradleTestKit())
164+
add("adapter34TestImplementation", libs.junit.jupiter)
165+
add("adapter34TestImplementation", libs.assertj.core)
166+
add("adapter34TestImplementation", libs.kotlin.reflect)
149167
}
150168

151169
// Test tasks loods plugin from local maven repository
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package org.jlleitschuh.gradle.ktlint.reporter
22

3-
import com.pinterest.ktlint.core.Reporter
43
import java.io.PrintStream
54

65
/**
@@ -10,6 +9,6 @@ interface GenericReporterProvider<T : GenericReporter<*>> {
109
val id: String
1110
fun get(
1211
out: PrintStream,
13-
opt: Map<String, String>,
12+
opt: Map<String, String>
1413
): T
1514
}

plugin/src/adapter/kotlin/org/jlleitschuh/gradle/ktlint/reporter/ReporterFactory.kt

-3
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,39 @@
11
package org.jlleitschuh.gradle.ktlint.reporter
22

3-
import com.pinterest.ktlint.core.ReporterProvider
43
import java.io.File
5-
import java.io.ObjectInputStream
64
import java.io.Serializable
75

86
/**
97
* T is a ReporterProvider / ReporterProviderV2
8+
* GR is a generic wrapper for the reporter
9+
* GRP is the generic wrapper for the provider
1010
*/
11-
interface ReportersLoaderAdapter<T : Serializable> {
12-
fun loadAllReporterProviders(): List<ReporterProviderWrapper<T>>
11+
interface ReportersLoaderAdapter<
12+
R,
13+
RP : Serializable,
14+
GR : GenericReporter<R>,
15+
GRP : GenericReporterProvider<GR>> {
16+
fun loadAllReporterProviders(): List<ReporterProviderWrapper<RP>>
1317
fun filterEnabledBuiltInProviders(
1418
enabledReporters: Set<ReporterType>,
15-
allProviders: List<ReporterProviderWrapper<T>>
16-
): List<Pair<LoadedReporter, T>>
17-
19+
allProviders: List<ReporterProviderWrapper<RP>>
20+
): List<Pair<LoadedReporter, RP>>
1821

1922
fun filterCustomProviders(
2023
customReporters: Set<CustomReporter>,
21-
allProviders: List<T>
22-
): List<Pair<LoadedReporter, T>>
24+
allProviders: List<RP>
25+
): List<Pair<LoadedReporter, RP>>
2326

2427
fun allEnabledProviders(
2528
enabledReporters: Set<ReporterType>,
2629
customReporters: Set<CustomReporter>
27-
): List<Pair<LoadedReporter, T>> {
30+
): List<Pair<LoadedReporter, RP>> {
2831
val all = loadAllReporterProviders()
2932
return filterEnabledBuiltInProviders(enabledReporters, all)
3033
.plus(filterCustomProviders(customReporters, all.map { it.reporterProvider }))
3134
}
3235

33-
fun loadReporterProviders(
34-
serializedReporterProviders: File
35-
): List<GenericReporterProvider<*>>
36+
fun loadReporterProviders(serializedReporterProviders: File): List<GRP>
37+
38+
fun loadAllGenericReporterProviders(): List<GRP>
3639
}
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package org.jlleitschuh.gradle.ktlint.worker
22

3-
import com.pinterest.ktlint.core.LintError
4-
53
interface BaselineLoader {
64
fun loadBaselineRules(path: String): Map<String, List<SerializableLintError>>
75
}

plugin/src/adapter/kotlin/org/jlleitschuh/gradle/ktlint/worker/BaselineReporterAdapter.kt

-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package org.jlleitschuh.gradle.ktlint.worker
22

3-
import com.pinterest.ktlint.core.LintError
4-
53
interface BaselineReporterAdapter {
64
fun onLintError(file: String, err: SerializableLintError, corrected: Boolean)
75
}

plugin/src/adapter/kotlin/org/jlleitschuh/gradle/ktlint/worker/InvocationResult.kt

-8
This file was deleted.

plugin/src/adapter/kotlin/org/jlleitschuh/gradle/ktlint/worker/LegacyLintErrorResult.kt

+6-3
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,11 @@ data class LegacyLintErrorResult(
2020
}
2121

2222
fun toNew(): LintErrorResult {
23-
return LintErrorResult(lintedFile, lintErrors.map {
24-
it.first.toSerializable() to it.second
25-
})
23+
return LintErrorResult(
24+
lintedFile,
25+
lintErrors.map {
26+
it.first.toSerializable() to it.second
27+
}
28+
)
2629
}
2730
}

plugin/src/adapter/kotlin/org/jlleitschuh/gradle/ktlint/worker/LintErrorExt.kt

+2-6
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,9 @@ package org.jlleitschuh.gradle.ktlint.worker
33
import com.pinterest.ktlint.core.LintError
44

55
fun LintError.toSerializable(): SerializableLintError {
6-
return SerializableLintError(
7-
line, col, ruleId, detail, canBeAutoCorrected
8-
)
6+
return SerializableLintError(line, col, ruleId, detail, canBeAutoCorrected)
97
}
108

119
fun SerializableLintError.toCore(): LintError {
12-
return LintError(
13-
line, col, ruleId, detail, canBeAutoCorrected
14-
)
10+
return LintError(line, col, ruleId, detail, canBeAutoCorrected)
1511
}

plugin/src/adapter/kotlin/org/jlleitschuh/gradle/ktlint/worker/LintErrorResult.kt

-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package org.jlleitschuh.gradle.ktlint.worker
22

3-
import com.pinterest.ktlint.core.LintError
43
import java.io.File
54
import java.io.Serializable
65

plugin/src/adapter34/kotlin/org/jlleitschuh/gradle/ktlint/reporter/Ktlint34Reporter.kt

-4
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,6 @@ import org.jlleitschuh.gradle.ktlint.worker.toCore
88
* implementation of GenericReporter for the Reporter ktlint class
99
*/
1010
class Ktlint34Reporter(val reporter: Reporter) : GenericReporter<Reporter> {
11-
companion object Factory : ReporterFactory {
12-
fun initialize(reporter: Reporter): Ktlint34Reporter = Ktlint34Reporter(reporter)
13-
}
1411
override fun beforeAll() {
1512
reporter.beforeAll()
1613
}
@@ -30,5 +27,4 @@ class Ktlint34Reporter(val reporter: Reporter) : GenericReporter<Reporter> {
3027
override fun afterAll() {
3128
reporter.afterAll()
3229
}
33-
3430
}

plugin/src/adapter34/kotlin/org/jlleitschuh/gradle/ktlint/reporter/Ktlint34ReporterProvider.kt

+1-5
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,8 @@ import com.pinterest.ktlint.core.ReporterProvider
44
import java.io.PrintStream
55

66
class Ktlint34ReporterProvider(val reporterProvider: ReporterProvider) : GenericReporterProvider<Ktlint34Reporter> {
7-
companion object Factory : ReporterProviderFactory {
8-
fun initialize(reporterProvider: ReporterProvider): Ktlint34ReporterProvider =
9-
Ktlint34ReporterProvider(reporterProvider)
10-
}
117
override fun get(out: PrintStream, opt: Map<String, String>): Ktlint34Reporter {
12-
return Ktlint34Reporter(reporterProvider.get(out, opt))
8+
return Ktlint34Reporter(reporterProvider.get(out, opt))
139
}
1410

1511
override val id: String

plugin/src/adapter34/kotlin/org/jlleitschuh/gradle/ktlint/reporter/SerializableReportersProviderLoader.kt

+12-6
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,34 @@
11
package org.jlleitschuh.gradle.ktlint.reporter
22

3+
import com.pinterest.ktlint.core.Reporter
34
import com.pinterest.ktlint.core.ReporterProvider
4-
import org.jlleitschuh.gradle.ktlint.reporter.CustomReporter
5-
import org.jlleitschuh.gradle.ktlint.reporter.ReporterType
65
import java.io.File
76
import java.io.ObjectInputStream
8-
import java.io.Serializable
9-
import java.lang.RuntimeException
107
import java.util.ServiceLoader
118

12-
class SerializableReportersProviderLoader : ReportersLoaderAdapter<SerializableReporterProvider> {
9+
class SerializableReportersProviderLoader :
10+
ReportersLoaderAdapter<Reporter, SerializableReporterProvider, Ktlint34Reporter, Ktlint34ReporterProvider> {
1311
override fun loadAllReporterProviders(): List<ReporterProviderWrapper<SerializableReporterProvider>> = ServiceLoader
1412
.load(ReporterProvider::class.java)
1513
.toList().map {
1614
ReporterProviderWrapper(it.id, SerializableReporterProvider(it))
1715
}
18-
override fun loadReporterProviders(serializedReporterProviders: File): List<GenericReporterProvider<*>> {
16+
17+
override fun loadReporterProviders(serializedReporterProviders: File): List<Ktlint34ReporterProvider> {
1918
return ObjectInputStream(
2019
serializedReporterProviders.inputStream().buffered()
2120
).use {
2221
@Suppress("UNCHECKED_CAST")
2322
it.readObject() as List<SerializableReporterProvider>
2423
}.map { Ktlint34ReporterProvider(it.reporterProvider) }
2524
}
25+
26+
override fun loadAllGenericReporterProviders(): List<Ktlint34ReporterProvider> = ServiceLoader
27+
.load(ReporterProvider::class.java)
28+
.toList().map {
29+
Ktlint34ReporterProvider(it)
30+
}
31+
2632
override fun filterEnabledBuiltInProviders(
2733
enabledReporters: Set<ReporterType>,
2834
allProviders: List<ReporterProviderWrapper<SerializableReporterProvider>>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package org.jlleitschuh.gradle.ktlint.reporter
2+
3+
import com.pinterest.ktlint.core.Reporter
4+
import com.pinterest.ktlint.core.ReporterProvider
5+
import org.assertj.core.api.Assertions.assertThat
6+
import org.junit.jupiter.api.Test
7+
import org.junit.jupiter.api.io.TempDir
8+
import java.io.File
9+
import java.io.ObjectInputStream
10+
import java.io.ObjectOutputStream
11+
import java.io.PrintStream
12+
13+
internal class SerializableReporterProviderTest {
14+
@TempDir
15+
lateinit var temporaryFolder: File
16+
17+
@Test
18+
internal fun `Should correctly serialize and deserialize ReporterProvider`() {
19+
val reporterProvider: ReporterProvider = TestReporterProvider()
20+
val wrappedReporterProvider = SerializableReporterProvider(reporterProvider)
21+
val serializeIntoFile = temporaryFolder.resolve("reporters.test")
22+
23+
ObjectOutputStream(serializeIntoFile.outputStream()).use {
24+
it.writeObject(wrappedReporterProvider)
25+
}
26+
27+
ObjectInputStream(serializeIntoFile.inputStream()).use {
28+
val restoredWrappedReporterProvider = it.readObject() as SerializableReporterProvider
29+
assertThat(restoredWrappedReporterProvider.reporterProvider).isInstanceOf(TestReporterProvider::class.java)
30+
assertThat(restoredWrappedReporterProvider.reporterProvider.id)
31+
.isEqualTo(reporterProvider.id)
32+
}
33+
}
34+
35+
private class TestReporterProvider : ReporterProvider {
36+
override val id: String = "test-reporter-provider"
37+
38+
override fun get(
39+
out: PrintStream,
40+
opt: Map<String, String>
41+
): Reporter {
42+
TODO("Not yet implemented")
43+
}
44+
}
45+
}

plugin/src/adapter41/kotlin/org/jlleitschuh/gradle/ktlint/reporter/Ktlint41Reporter.kt

-5
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package org.jlleitschuh.gradle.ktlint.reporter
22

3-
import com.pinterest.ktlint.core.LintError
43
import com.pinterest.ktlint.core.Reporter
54
import org.jlleitschuh.gradle.ktlint.worker.SerializableLintError
65
import org.jlleitschuh.gradle.ktlint.worker.toCore
@@ -9,9 +8,6 @@ import org.jlleitschuh.gradle.ktlint.worker.toCore
98
* implementation of GenericReporter for the Reporter ktlint class
109
*/
1110
class Ktlint41Reporter(val reporter: Reporter) : GenericReporter<Reporter> {
12-
companion object Factory : ReporterFactory {
13-
fun initialize(reporter: Reporter): Ktlint41Reporter = Ktlint41Reporter(reporter)
14-
}
1511
override fun beforeAll() {
1612
reporter.beforeAll()
1713
}
@@ -31,5 +27,4 @@ class Ktlint41Reporter(val reporter: Reporter) : GenericReporter<Reporter> {
3127
override fun afterAll() {
3228
reporter.afterAll()
3329
}
34-
3530
}

plugin/src/adapter41/kotlin/org/jlleitschuh/gradle/ktlint/reporter/Ktlint41ReporterProvider.kt

+1-5
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,8 @@ import com.pinterest.ktlint.core.ReporterProvider
44
import java.io.PrintStream
55

66
class Ktlint41ReporterProvider(val reporterProvider: ReporterProvider) : GenericReporterProvider<Ktlint41Reporter> {
7-
companion object Factory : ReporterProviderFactory {
8-
fun initialize(reporterProvider: ReporterProvider): Ktlint41ReporterProvider =
9-
Ktlint41ReporterProvider(reporterProvider)
10-
}
117
override fun get(out: PrintStream, opt: Map<String, String>): Ktlint41Reporter {
12-
return Ktlint41Reporter(reporterProvider.get(out, opt))
8+
return Ktlint41Reporter(reporterProvider.get(out, opt))
139
}
1410

1511
override val id: String

plugin/src/adapter41/kotlin/org/jlleitschuh/gradle/ktlint/reporter/ReportersProviderLoader.kt

+11-6
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,27 @@
11
package org.jlleitschuh.gradle.ktlint.reporter
22

3+
import com.pinterest.ktlint.core.Reporter
34
import com.pinterest.ktlint.core.ReporterProvider
4-
import org.jlleitschuh.gradle.ktlint.reporter.CustomReporter
5-
import org.jlleitschuh.gradle.ktlint.reporter.ReporterType
65
import java.io.File
76
import java.io.ObjectInputStream
8-
import java.lang.RuntimeException
97
import java.util.ServiceLoader
108

11-
class ReportersProviderLoader : ReportersLoaderAdapter<ReporterProvider> {
9+
class ReportersProviderLoader :
10+
ReportersLoaderAdapter<Reporter, ReporterProvider, Ktlint41Reporter, Ktlint41ReporterProvider> {
1211
override fun loadAllReporterProviders(): List<ReporterProviderWrapper<ReporterProvider>> = ServiceLoader
1312
.load(ReporterProvider::class.java)
1413
.toList().map {
1514
ReporterProviderWrapper(it.id, it)
1615
}
1716

18-
override fun loadReporterProviders(serializedReporterProviders: File): List<GenericReporterProvider<*>> {
19-
return ObjectInputStream(
17+
override fun loadAllGenericReporterProviders(): List<Ktlint41ReporterProvider> = ServiceLoader
18+
.load(ReporterProvider::class.java)
19+
.toList().map {
20+
Ktlint41ReporterProvider(it)
21+
}
22+
23+
override fun loadReporterProviders(serializedReporterProviders: File): List<Ktlint41ReporterProvider> {
24+
return ObjectInputStream(
2025
serializedReporterProviders.inputStream().buffered()
2126
).use {
2227
@Suppress("UNCHECKED_CAST")

0 commit comments

Comments
 (0)