Skip to content

Commit 07a884b

Browse files
refs #256: Add Ktlint and Detekt for Kotlin code (#267)
1 parent 481ee51 commit 07a884b

File tree

38 files changed

+586
-507
lines changed

38 files changed

+586
-507
lines changed

build.gradle.kts

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,18 @@
11
import com.jashmore.gradle.JacocoCoverallsPlugin
22
import com.jashmore.gradle.ReleasePlugin
33
import com.jashmore.gradle.release
4+
import io.gitlab.arturbosch.detekt.detekt
5+
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
46

57
plugins {
68
java
79
`java-library`
810
id("com.github.spotbugs") version "4.4.5"
911
checkstyle
1012
jacoco
13+
kotlin("jvm") version "1.3.72" apply false
14+
id("org.jlleitschuh.gradle.ktlint") apply false
15+
id("io.gitlab.arturbosch.detekt") version "1.10.0" apply false
1116
}
1217

1318
allprojects {
@@ -16,6 +21,7 @@ allprojects {
1621

1722
repositories {
1823
mavenCentral()
24+
jcenter()
1925
}
2026
}
2127

@@ -26,6 +32,14 @@ subprojects {
2632
if (!isKotlinProject) {
2733
apply(plugin = "com.github.spotbugs")
2834
apply(plugin = "checkstyle")
35+
} else {
36+
apply(plugin = "kotlin")
37+
apply(plugin = "org.jlleitschuh.gradle.ktlint")
38+
apply(plugin = "io.gitlab.arturbosch.detekt")
39+
40+
tasks.withType<KotlinCompile>().configureEach {
41+
kotlinOptions.jvmTarget = "1.8"
42+
}
2943
}
3044

3145
dependencies {
@@ -115,6 +129,12 @@ subprojects {
115129
spotbugs {
116130
excludeFilter.set(file("${project.rootDir}/configuration/spotbugs/bugsExcludeFilter.xml"))
117131
}
132+
} else {
133+
detekt {
134+
failFast = true
135+
buildUponDefaultConfig = true
136+
config = files("${project.rootDir}/configuration/detekt/detekt-configuration.yml")
137+
}
118138
}
119139

120140
tasks.withType<Test> {
@@ -150,7 +170,7 @@ subprojects {
150170
violationRules {
151171
rule {
152172
excludes = listOf(
153-
"com.jashmore.sqs.examples*"
173+
"com.jashmore.sqs.examples*"
154174
)
155175
element = "PACKAGE"
156176
limit {
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
formatting:
2+
MaximumLineLength:
3+
maxLineLength: 160
4+
5+
style:
6+
MaxLineLength:
7+
maxLineLength: 160

examples/core-kotlin-example/build.gradle.kts

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,6 @@
1-
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
21

32
description = "Example of using the Core library with the Kotlin DSL, this should be equivalent to the core-examples."
43

5-
plugins {
6-
kotlin("jvm") version "1.3.72"
7-
}
8-
9-
apply(plugin = "kotlin")
10-
114
dependencies {
125
implementation(kotlin("stdlib-jdk8"))
136
implementation(project(":java-dynamic-sqs-listener-core"))
@@ -21,10 +14,6 @@ dependencies {
2114
implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
2215
}
2316

24-
tasks.withType<KotlinCompile>().configureEach {
25-
kotlinOptions.jvmTarget = "1.8"
26-
}
27-
2817
tasks.create<JavaExec>("runApp") {
2918
classpath = sourceSets.main.get().runtimeClasspath
3019

examples/core-kotlin-example/src/main/kotlin/com/jashmore/sqs/examples/KotlinConcurrentBrokerExample.kt

Lines changed: 29 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
@file:JvmName("KotlinConcurrentBrokerExample")
2+
@file:Suppress("MatchingDeclarationName", "MagicNumber")
23
package com.jashmore.sqs.examples
34

45
import brave.Tracing
@@ -25,8 +26,8 @@ import java.util.concurrent.atomic.AtomicInteger
2526
import kotlin.random.Random
2627

2728
private val log: Logger = LoggerFactory.getLogger("example")
28-
private val concurrencyLevelPeriod = Duration.ofSeconds(5)
29-
private const val concurrencyLimit = 10
29+
private val CONCURRENCY_LEVEL_PERIOD = Duration.ofSeconds(5)
30+
private const val CONCURRENCY_LIMIT = 10
3031

3132
private val objectMapper = ObjectMapper().registerModule(KotlinModule())
3233

@@ -40,26 +41,28 @@ private val objectMapper = ObjectMapper().registerModule(KotlinModule())
4041
* <p>While this is running you should see the messages being processed and the number of messages that are concurrently being processed. This will highlight
4142
* how the concurrency can change during the running of the application.
4243
*/
44+
@Suppress("LongMethod")
4345
fun main() {
4446
val sqsAsyncClient = ElasticMqSqsAsyncClient()
4547
val queueUrl = sqsAsyncClient.createRandomQueue()
46-
.get()
47-
.queueUrl()
48+
.get()
49+
.queueUrl()
4850

4951
val tracing = Tracing.newBuilder()
50-
.currentTraceContext(ThreadLocalCurrentTraceContext.newBuilder()
51-
.addScopeDecorator(MDCScopeDecorator.get())
52-
.build()
53-
)
54-
.build()
52+
.currentTraceContext(
53+
ThreadLocalCurrentTraceContext.newBuilder()
54+
.addScopeDecorator(MDCScopeDecorator.get())
55+
.build()
56+
)
57+
.build()
5558
tracing.isNoop = true
5659

5760
val container = coreMessageListener("core-example-container", sqsAsyncClient, queueUrl) {
5861
broker = concurrentBroker {
5962
concurrencyLevel = cached(Duration.ofSeconds(10)) {
60-
Random.nextInt(concurrencyLimit)
63+
Random.nextInt(CONCURRENCY_LIMIT)
6164
}
62-
concurrencyPollingRate = { concurrencyLevelPeriod }
65+
concurrencyPollingRate = { CONCURRENCY_LEVEL_PERIOD }
6366
errorBackoffTime = { Duration.ofMillis(500) }
6467
}
6568
retriever = prefetchingMessageRetriever {
@@ -84,19 +87,24 @@ fun main() {
8487

8588
val count = AtomicInteger(0)
8689
val scheduledExecutorService = Executors.newScheduledThreadPool(1)
87-
scheduledExecutorService.scheduleAtFixedRate({
88-
sqsAsyncClient.sendMessageBatch { batchBuilder ->
89-
batchBuilder.queueUrl(queueUrl)
90-
.entries((0..9).map { index ->
91-
val request = Request("key_${count.getAndIncrement()}")
92-
SendMessageBatchRequestEntry.builder()
90+
scheduledExecutorService.scheduleAtFixedRate(
91+
{
92+
sqsAsyncClient.sendMessageBatch { batchBuilder ->
93+
batchBuilder.queueUrl(queueUrl)
94+
.entries(
95+
(0..9).map { index ->
96+
val request = Request("key_${count.getAndIncrement()}")
97+
SendMessageBatchRequestEntry.builder()
9398
.id("$index")
9499
.messageBody(objectMapper.writeValueAsString(request))
95100
.build()
96-
})
97-
}
98-
log.info("Put 10 messages onto queue")
99-
}, 0, 2, TimeUnit.SECONDS)
101+
}
102+
)
103+
}
104+
log.info("Put 10 messages onto queue")
105+
},
106+
0, 2, TimeUnit.SECONDS
107+
)
100108

101109
log.info("Running application for 3 minutes. Ctrl + C to exit...")
102110
Thread.sleep(3 * 60 * 1000.toLong())

examples/ktor-example/build.gradle.kts

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,6 @@
1-
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
21

32
description = "Contains examples for connection to SQS in an Ktor Application"
43

5-
plugins {
6-
kotlin("jvm") version "1.3.72"
7-
}
8-
9-
repositories {
10-
jcenter()
11-
}
12-
13-
apply(plugin = "kotlin")
14-
154
dependencies {
165
implementation(project(":java-dynamic-sqs-listener-core"))
176
implementation(project(":core-kotlin-dsl"))
@@ -22,10 +11,6 @@ dependencies {
2211
implementation("ch.qos.logback:logback-classic")
2312
}
2413

25-
tasks.withType<KotlinCompile>().configureEach {
26-
kotlinOptions.jvmTarget = "1.8"
27-
}
28-
2914
tasks.create<JavaExec>("runApp") {
3015
classpath = sourceSets.main.get().runtimeClasspath
3116

examples/ktor-example/src/main/kotlin/com/jashmore/sqs/examples/KtorApplicationExample.kt

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
@file:JvmName("KtorApplicationExample")
2+
@file:Suppress("MagicNumber")
23
package com.jashmore.sqs.examples
34

45
import com.jashmore.sqs.container.MessageListenerContainer
@@ -24,6 +25,7 @@ import kotlinx.coroutines.launch
2425
import software.amazon.awssdk.services.sqs.model.Message
2526
import java.time.Duration
2627

28+
@Suppress("LongMethod", "ComplexMethod")
2729
fun main() {
2830
val sqsAsyncClient = ElasticMqSqsAsyncClient()
2931

@@ -66,7 +68,7 @@ fun main() {
6668
val thirdContainer = batchingMessageListener("batching-listener", sqsAsyncClient, thirdQueueUrl) {
6769
concurrencyLevel = { 2 }
6870
batchSize = { 5 }
69-
batchingPeriod = { Duration.ofSeconds(5) }
71+
batchingPeriod = { Duration.ofSeconds(5) }
7072

7173
processor = asyncLambdaProcessor {
7274
method { message ->
@@ -116,10 +118,9 @@ fun main() {
116118

117119
container.start()
118120

119-
call.respondText("Container ${queueIdentifier} started", ContentType.Text.Html)
121+
call.respondText("Container $queueIdentifier started", ContentType.Text.Html)
120122
}
121123

122-
123124
get("/stop/{queue}") {
124125
val queueIdentifier = call.parameters["queue"]
125126
val container: MessageListenerContainer? = when (queueIdentifier) {
@@ -136,14 +137,16 @@ fun main() {
136137

137138
container.stop()
138139

139-
call.respondText("Container ${queueIdentifier} stopped", ContentType.Text.Html)
140+
call.respondText("Container $queueIdentifier stopped", ContentType.Text.Html)
140141
}
141142
}
142143
}
143144
server.start()
144-
Runtime.getRuntime().addShutdownHook(Thread {
145-
server.stop(1, 30_000)
146-
})
145+
Runtime.getRuntime().addShutdownHook(
146+
Thread {
147+
server.stop(1, 30_000)
148+
}
149+
)
147150
Thread.currentThread().join()
148151
}
149152

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,5 @@
1-
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
2-
31
description = "Kotlin DSL for building the Core message listeners"
42

5-
plugins {
6-
kotlin("jvm") version "1.3.72"
7-
}
8-
9-
apply(plugin = "kotlin")
10-
113
dependencies {
124
implementation(kotlin("stdlib-jdk8"))
135
api(project(":java-dynamic-sqs-listener-core"))
@@ -17,7 +9,3 @@ dependencies {
179
testImplementation("com.nhaarman.mockitokotlin2:mockito-kotlin:2.2.0")
1810
testImplementation("com.fasterxml.jackson.module:jackson-module-kotlin")
1911
}
20-
21-
tasks.withType<KotlinCompile>().configureEach {
22-
kotlinOptions.jvmTarget = "1.8"
23-
}

extensions/core-kotlin-dsl/src/main/kotlin/com/jashmore/sqs/core/kotlin/dsl/MessageListenerDsl.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
@file:Suppress("MatchingDeclarationName")
12
package com.jashmore.sqs.core.kotlin.dsl
23

34
import com.jashmore.sqs.argument.ArgumentResolverService

extensions/core-kotlin-dsl/src/main/kotlin/com/jashmore/sqs/core/kotlin/dsl/argument/CoreArgumentResolverServiceDslBuilder.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ class CoreArgumentResolverServiceDslBuilder(private val objectMapper: ObjectMapp
1717

1818
override fun invoke(): ArgumentResolverService {
1919
return CoreArgumentResolverService(
20-
JacksonPayloadMapper(objectMapper),
21-
objectMapper
20+
JacksonPayloadMapper(objectMapper),
21+
objectMapper
2222
)
2323
}
2424
}
@@ -33,5 +33,5 @@ class CoreArgumentResolverServiceDslBuilder(private val objectMapper: ObjectMapp
3333
*
3434
* @param init the DSL function for configuring this processor
3535
*/
36-
fun coreArgumentResolverService(objectMapper: ObjectMapper = ObjectMapper(), init: CoreArgumentResolverServiceDslBuilder.() -> Unit = { })
37-
= initComponent(CoreArgumentResolverServiceDslBuilder(objectMapper), init)
36+
fun coreArgumentResolverService(objectMapper: ObjectMapper = ObjectMapper(), init: CoreArgumentResolverServiceDslBuilder.() -> Unit = { }) =
37+
initComponent(CoreArgumentResolverServiceDslBuilder(objectMapper), init)

extensions/core-kotlin-dsl/src/main/kotlin/com/jashmore/sqs/core/kotlin/dsl/argument/DelegatingArgumentResolverServiceDslBuilder.kt

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
package com.jashmore.sqs.core.kotlin.dsl.argument
22

33
import com.fasterxml.jackson.databind.ObjectMapper
4-
import com.jashmore.sqs.core.kotlin.dsl.ArgumentResolverServiceDslBuilder
5-
import com.jashmore.sqs.core.kotlin.dsl.MessageListenerComponentDslMarker
6-
import com.jashmore.sqs.core.kotlin.dsl.initComponent
74
import com.jashmore.sqs.argument.ArgumentResolver
85
import com.jashmore.sqs.argument.ArgumentResolverService
96
import com.jashmore.sqs.argument.DelegatingArgumentResolverService
@@ -13,6 +10,9 @@ import com.jashmore.sqs.argument.message.MessageArgumentResolver
1310
import com.jashmore.sqs.argument.messageid.MessageIdArgumentResolver
1411
import com.jashmore.sqs.argument.payload.PayloadArgumentResolver
1512
import com.jashmore.sqs.argument.payload.mapper.JacksonPayloadMapper
13+
import com.jashmore.sqs.core.kotlin.dsl.ArgumentResolverServiceDslBuilder
14+
import com.jashmore.sqs.core.kotlin.dsl.MessageListenerComponentDslMarker
15+
import com.jashmore.sqs.core.kotlin.dsl.initComponent
1616
import com.jashmore.sqs.processor.MessageProcessor
1717

1818
/**
@@ -73,7 +73,7 @@ class DelegatingArgumentResolverServiceDslBuilder : ArgumentResolverServiceDslBu
7373

7474
override fun invoke(): ArgumentResolverService {
7575
return DelegatingArgumentResolverService(
76-
argumentResolvers
76+
argumentResolvers
7777
)
7878
}
7979
}
@@ -91,5 +91,5 @@ class DelegatingArgumentResolverServiceDslBuilder : ArgumentResolverServiceDslBu
9191
*
9292
* @param init the DSL function for configuring this processor
9393
*/
94-
fun delegatingArgumentResolverService(init: DelegatingArgumentResolverServiceDslBuilder.() -> Unit)
95-
= initComponent(DelegatingArgumentResolverServiceDslBuilder(), init)
94+
fun delegatingArgumentResolverService(init: DelegatingArgumentResolverServiceDslBuilder.() -> Unit) =
95+
initComponent(DelegatingArgumentResolverServiceDslBuilder(), init)

0 commit comments

Comments
 (0)