diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/inspections/IntentionBasedInspection.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/inspections/IntentionBasedInspection.kt index 4dc2726a28c..3154cb0ede5 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/inspections/IntentionBasedInspection.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/inspections/IntentionBasedInspection.kt @@ -39,7 +39,7 @@ public abstract class IntentionBasedInspection( ) : AbstractKotlinInspection() { constructor(intention: JetSelfTargetingRangeIntention, additionalChecker: (TElement) -> Boolean = { true }) - : this(listOf(IntentionData(intention, additionalChecker)), null, intention.elementType) + : this(listOf(IntentionData(intention, additionalChecker)), null, intention.elementType) public data class IntentionData( val intention: JetSelfTargetingRangeIntention, @@ -81,10 +81,14 @@ public abstract class IntentionBasedInspection( val intention: JetSelfTargetingRangeIntention, val additionalChecker: (TElement) -> Boolean, targetElement: TElement - ): LocalQuickFixOnPsiElement(targetElement), IntentionAction { + ) : LocalQuickFixOnPsiElement(targetElement), IntentionAction { // store text into variable because intention instance is shared and may change its text later - private val _text = intention.getText() + private val _text = synchronized(intention) { + // Ensure that text will be valid for current element in multithreaded environment + intention.applicabilityRange(targetElement) + intention.getText() + } override fun getFamilyName() = intention.getFamilyName()