diff --git a/build.gradle.kts b/build.gradle.kts
index 23290cdabd2..5741dbcd04c 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -369,6 +369,7 @@ val coreLibProjects by extra {
val projectsWithEnabledContextReceivers by extra {
listOf(
":core:descriptors.jvm",
+ ":compiler:frontend.common",
":compiler:fir:fir2ir",
":kotlin-lombok-compiler-plugin.k1",
)
diff --git a/compiler/frontend.common/src/org/jetbrains/kotlin/diagnostics/KtDiagnosticReportContextHelpers.kt b/compiler/frontend.common/src/org/jetbrains/kotlin/diagnostics/KtDiagnosticReportContextHelpers.kt
new file mode 100644
index 00000000000..a8f29a01565
--- /dev/null
+++ b/compiler/frontend.common/src/org/jetbrains/kotlin/diagnostics/KtDiagnosticReportContextHelpers.kt
@@ -0,0 +1,118 @@
+/*
+ * Copyright 2010-2021 JetBrains s.r.o. and Kotlin Programming Language contributors.
+ * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
+ */
+
+package org.jetbrains.kotlin.diagnostics
+
+import org.jetbrains.kotlin.AbstractKtSourceElement
+
+context(DiagnosticContext)
+fun DiagnosticReporter.reportOn(
+ source: AbstractKtSourceElement?,
+ factory: KtDiagnosticFactory0,
+ positioningStrategy: AbstractSourceElementPositioningStrategy? = null
+) {
+ reportOn(source, factory, this@DiagnosticContext, positioningStrategy)
+}
+
+context(DiagnosticContext)
+fun DiagnosticReporter.reportOn(
+ source: AbstractKtSourceElement?,
+ factory: KtDiagnosticFactory1,
+ a: A,
+ positioningStrategy: AbstractSourceElementPositioningStrategy? = null
+) {
+ reportOn(source, factory, a, this@DiagnosticContext, positioningStrategy)
+}
+
+context(DiagnosticContext)
+fun DiagnosticReporter.reportOn(
+ source: AbstractKtSourceElement?,
+ factory: KtDiagnosticFactory2,
+ a: A,
+ b: B,
+ positioningStrategy: AbstractSourceElementPositioningStrategy? = null
+) {
+ reportOn(source, factory, a, b, this@DiagnosticContext, positioningStrategy)
+}
+
+context(DiagnosticContext)
+fun DiagnosticReporter.reportOn(
+ source: AbstractKtSourceElement?,
+ factory: KtDiagnosticFactory3,
+ a: A,
+ b: B,
+ c: C,
+ positioningStrategy: AbstractSourceElementPositioningStrategy? = null
+) {
+ reportOn(source, factory, a, b, c, this@DiagnosticContext, positioningStrategy)
+}
+
+context(DiagnosticContext)
+fun DiagnosticReporter.reportOn(
+ source: AbstractKtSourceElement?,
+ factory: KtDiagnosticFactory4,
+ a: A,
+ b: B,
+ c: C,
+ d: D,
+ positioningStrategy: AbstractSourceElementPositioningStrategy? = null
+) {
+ reportOn(source, factory, a, b, c, d, this@DiagnosticContext, positioningStrategy)
+}
+
+context(DiagnosticContext)
+fun DiagnosticReporter.reportOn(
+ source: AbstractKtSourceElement?,
+ factory: KtDiagnosticFactoryForDeprecation0,
+ positioningStrategy: AbstractSourceElementPositioningStrategy? = null
+) {
+ reportOn(source, factory, this@DiagnosticContext, positioningStrategy)
+}
+
+context(DiagnosticContext)
+fun DiagnosticReporter.reportOn(
+ source: AbstractKtSourceElement?,
+ factory: KtDiagnosticFactoryForDeprecation1,
+ a: A,
+ positioningStrategy: AbstractSourceElementPositioningStrategy? = null
+) {
+ reportOn(source, factory, a, this@DiagnosticContext, positioningStrategy)
+}
+
+context(DiagnosticContext)
+fun DiagnosticReporter.reportOn(
+ source: AbstractKtSourceElement?,
+ factory: KtDiagnosticFactoryForDeprecation2,
+ a: A,
+ b: B,
+ positioningStrategy: AbstractSourceElementPositioningStrategy? = null
+) {
+ reportOn(source, factory, a, b, this@DiagnosticContext, positioningStrategy)
+}
+
+context(DiagnosticContext)
+fun DiagnosticReporter.reportOn(
+ source: AbstractKtSourceElement?,
+ factory: KtDiagnosticFactoryForDeprecation3,
+ a: A,
+ b: B,
+ c: C,
+ positioningStrategy: AbstractSourceElementPositioningStrategy? = null
+) {
+ reportOn(source, factory, a, b, c, this@DiagnosticContext, positioningStrategy)
+}
+
+context(DiagnosticContext)
+fun DiagnosticReporter.reportOn(
+ source: AbstractKtSourceElement?,
+ factory: KtDiagnosticFactoryForDeprecation4,
+ a: A,
+ b: B,
+ c: C,
+ d: D,
+ positioningStrategy: AbstractSourceElementPositioningStrategy? = null
+) {
+ reportOn(source, factory, a, b, c, d, this@DiagnosticContext, positioningStrategy)
+}