mirror of
https://github.com/jlengrand/detekt.git
synced 2026-03-10 08:11:23 +00:00
Use ConTester to prove that the synchronized block is required (#4672)
Relates to PR https://github.com/detekt/detekt/pull/4631
This commit is contained in:
@@ -7,6 +7,8 @@ plugins {
|
|||||||
dependencies {
|
dependencies {
|
||||||
api(libs.kotlin.compilerEmbeddable)
|
api(libs.kotlin.compilerEmbeddable)
|
||||||
implementation(projects.detektPsiUtils)
|
implementation(projects.detektPsiUtils)
|
||||||
|
implementation(libs.contester.breakpoint)
|
||||||
|
testImplementation(libs.contester.driver)
|
||||||
testImplementation(projects.detektTestUtils)
|
testImplementation(projects.detektTestUtils)
|
||||||
testImplementation(libs.assertj)
|
testImplementation(libs.assertj)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package io.github.detekt.parser
|
package io.github.detekt.parser
|
||||||
|
|
||||||
|
import io.github.davidburstrom.contester.ConTesterBreakpoint
|
||||||
import org.jetbrains.kotlin.com.intellij.openapi.extensions.ExtensionPoint
|
import org.jetbrains.kotlin.com.intellij.openapi.extensions.ExtensionPoint
|
||||||
import org.jetbrains.kotlin.com.intellij.openapi.extensions.Extensions.getRootArea
|
import org.jetbrains.kotlin.com.intellij.openapi.extensions.Extensions.getRootArea
|
||||||
import org.jetbrains.kotlin.com.intellij.openapi.project.Project
|
import org.jetbrains.kotlin.com.intellij.openapi.project.Project
|
||||||
@@ -26,6 +27,9 @@ class DetektPomModel(project: Project) : UserDataHolderBase(), PomModel {
|
|||||||
// Addresses https://github.com/detekt/detekt/issues/4609
|
// Addresses https://github.com/detekt/detekt/issues/4609
|
||||||
synchronized(extensionArea) {
|
synchronized(extensionArea) {
|
||||||
if (!extensionArea.hasExtensionPoint(extension)) {
|
if (!extensionArea.hasExtensionPoint(extension)) {
|
||||||
|
ConTesterBreakpoint.defineBreakpoint("DetektPomModel.registerExtensionPoint") {
|
||||||
|
extensionArea == getRootArea()
|
||||||
|
}
|
||||||
extensionArea.registerExtensionPoint(
|
extensionArea.registerExtensionPoint(
|
||||||
extension,
|
extension,
|
||||||
extensionClass,
|
extensionClass,
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package io.github.detekt.parser
|
package io.github.detekt.parser
|
||||||
|
|
||||||
|
import io.github.davidburstrom.contester.ConTesterDriver
|
||||||
import io.github.detekt.psi.BASE_PATH
|
import io.github.detekt.psi.BASE_PATH
|
||||||
import io.github.detekt.psi.LINE_SEPARATOR
|
import io.github.detekt.psi.LINE_SEPARATOR
|
||||||
import io.github.detekt.psi.RELATIVE_PATH
|
import io.github.detekt.psi.RELATIVE_PATH
|
||||||
@@ -8,10 +9,24 @@ import org.assertj.core.api.Assertions.assertThat
|
|||||||
import org.assertj.core.api.Assertions.assertThatIllegalArgumentException
|
import org.assertj.core.api.Assertions.assertThatIllegalArgumentException
|
||||||
import org.jetbrains.kotlin.com.intellij.psi.PsiErrorElement
|
import org.jetbrains.kotlin.com.intellij.psi.PsiErrorElement
|
||||||
import org.jetbrains.kotlin.psi.KtTreeVisitorVoid
|
import org.jetbrains.kotlin.psi.KtTreeVisitorVoid
|
||||||
|
import org.junit.jupiter.api.AfterEach
|
||||||
import org.junit.jupiter.api.Nested
|
import org.junit.jupiter.api.Nested
|
||||||
import org.junit.jupiter.api.Test
|
import org.junit.jupiter.api.Test
|
||||||
|
|
||||||
class KtCompilerSpec {
|
class KtCompilerSpec {
|
||||||
|
@AfterEach
|
||||||
|
internal fun tearDown() {
|
||||||
|
ConTesterDriver.cleanUp()
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun `parallel construction of KtCompilers should be thread safe`() {
|
||||||
|
val thread1 = ConTesterDriver.thread { KtCompiler() }
|
||||||
|
val thread2 = ConTesterDriver.thread { KtCompiler() }
|
||||||
|
ConTesterDriver.runToBreakpoint(thread1, "DetektPomModel.registerExtensionPoint")
|
||||||
|
ConTesterDriver.runUntilBlockedOrTerminated(thread2)
|
||||||
|
ConTesterDriver.join(thread1)
|
||||||
|
}
|
||||||
|
|
||||||
@Nested
|
@Nested
|
||||||
inner class `Kotlin Compiler` {
|
inner class `Kotlin Compiler` {
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ jacoco = "0.8.8"
|
|||||||
kotlin = "1.6.21"
|
kotlin = "1.6.21"
|
||||||
ktlint = "0.45.2"
|
ktlint = "0.45.2"
|
||||||
junit = "5.8.2"
|
junit = "5.8.2"
|
||||||
|
contester = "0.2.0"
|
||||||
|
|
||||||
[libraries]
|
[libraries]
|
||||||
githubRelease-gradle = "com.github.breadmoirai:github-release:2.3.7"
|
githubRelease-gradle = "com.github.breadmoirai:github-release:2.3.7"
|
||||||
@@ -37,6 +38,8 @@ reflections = "org.reflections:reflections:0.10.2"
|
|||||||
mockk = "io.mockk:mockk:1.12.4"
|
mockk = "io.mockk:mockk:1.12.4"
|
||||||
snakeyaml = "org.yaml:snakeyaml:1.30"
|
snakeyaml = "org.yaml:snakeyaml:1.30"
|
||||||
jcommander = "com.beust:jcommander:1.82"
|
jcommander = "com.beust:jcommander:1.82"
|
||||||
|
contester-breakpoint = { module = "io.github.davidburstrom.contester:contester-breakpoint", version.ref = "contester" }
|
||||||
|
contester-driver = { module = "io.github.davidburstrom.contester:contester-driver", version.ref = "contester" }
|
||||||
|
|
||||||
[plugins]
|
[plugins]
|
||||||
binaryCompatibilityValidator = { id = "org.jetbrains.kotlinx.binary-compatibility-validator", version = "0.10.0" }
|
binaryCompatibilityValidator = { id = "org.jetbrains.kotlinx.binary-compatibility-validator", version = "0.10.0" }
|
||||||
|
|||||||
Reference in New Issue
Block a user