mirror of
https://github.com/jlengrand/detekt.git
synced 2026-03-10 00:01:19 +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 {
|
||||
api(libs.kotlin.compilerEmbeddable)
|
||||
implementation(projects.detektPsiUtils)
|
||||
implementation(libs.contester.breakpoint)
|
||||
testImplementation(libs.contester.driver)
|
||||
testImplementation(projects.detektTestUtils)
|
||||
testImplementation(libs.assertj)
|
||||
}
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
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.Extensions.getRootArea
|
||||
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
|
||||
synchronized(extensionArea) {
|
||||
if (!extensionArea.hasExtensionPoint(extension)) {
|
||||
ConTesterBreakpoint.defineBreakpoint("DetektPomModel.registerExtensionPoint") {
|
||||
extensionArea == getRootArea()
|
||||
}
|
||||
extensionArea.registerExtensionPoint(
|
||||
extension,
|
||||
extensionClass,
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
package io.github.detekt.parser
|
||||
|
||||
import io.github.davidburstrom.contester.ConTesterDriver
|
||||
import io.github.detekt.psi.BASE_PATH
|
||||
import io.github.detekt.psi.LINE_SEPARATOR
|
||||
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.jetbrains.kotlin.com.intellij.psi.PsiErrorElement
|
||||
import org.jetbrains.kotlin.psi.KtTreeVisitorVoid
|
||||
import org.junit.jupiter.api.AfterEach
|
||||
import org.junit.jupiter.api.Nested
|
||||
import org.junit.jupiter.api.Test
|
||||
|
||||
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
|
||||
inner class `Kotlin Compiler` {
|
||||
|
||||
@@ -4,6 +4,7 @@ jacoco = "0.8.8"
|
||||
kotlin = "1.6.21"
|
||||
ktlint = "0.45.2"
|
||||
junit = "5.8.2"
|
||||
contester = "0.2.0"
|
||||
|
||||
[libraries]
|
||||
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"
|
||||
snakeyaml = "org.yaml:snakeyaml:1.30"
|
||||
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]
|
||||
binaryCompatibilityValidator = { id = "org.jetbrains.kotlinx.binary-compatibility-validator", version = "0.10.0" }
|
||||
|
||||
Reference in New Issue
Block a user