diff --git a/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/KtFe10CompilerPluginsProvider.kt b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/KtFe10CompilerPluginsProvider.kt new file mode 100644 index 00000000000..ccc79885d89 --- /dev/null +++ b/analysis/analysis-api-fe10/src/org/jetbrains/kotlin/analysis/api/descriptors/KtFe10CompilerPluginsProvider.kt @@ -0,0 +1,28 @@ +/* + * Copyright 2010-2023 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.analysis.api.descriptors + +import org.jetbrains.kotlin.analysis.project.structure.KtCompilerPluginsProvider +import org.jetbrains.kotlin.analysis.project.structure.KtSourceModule +import org.jetbrains.kotlin.extensions.ProjectExtensionDescriptor +import org.jetbrains.kotlin.extensions.internal.InternalNonStableExtensionPoints +import org.jetbrains.kotlin.resolve.extensions.AssignResolutionAltererExtension + +@Suppress("unused") +class KtFe10CompilerPluginsProvider : KtCompilerPluginsProvider() { + override fun getRegisteredExtensions(module: KtSourceModule, extensionType: ProjectExtensionDescriptor): List { + return extensionType.getInstances(module.project) + } + + @OptIn(InternalNonStableExtensionPoints::class) + override fun isPluginOfTypeRegistered(module: KtSourceModule, pluginType: CompilerPluginType): Boolean { + val extension = when (pluginType) { + CompilerPluginType.ASSIGNMENT -> AssignResolutionAltererExtension + else -> return false + } + return extension.getInstances(module.project).isNotEmpty() + } +} \ No newline at end of file diff --git a/analysis/analysis-api-fir/build.gradle.kts b/analysis/analysis-api-fir/build.gradle.kts index 4a1b9ec6ec7..72763b17c00 100644 --- a/analysis/analysis-api-fir/build.gradle.kts +++ b/analysis/analysis-api-fir/build.gradle.kts @@ -15,6 +15,7 @@ dependencies { api(project(":compiler:fir:checkers:checkers.js")) api(project(":compiler:fir:checkers:checkers.native")) api(project(":compiler:fir:java")) + api(project(":compiler:fir:entrypoint")) api(project(":analysis:low-level-api-fir")) api(project(":analysis:analysis-api")) api(project(":analysis:analysis-api-impl-base")) diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/references/FirSimpleNameReference.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/references/FirSimpleNameReference.kt index 84b056cf42c..21339aed122 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/references/FirSimpleNameReference.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/references/FirSimpleNameReference.kt @@ -75,4 +75,4 @@ internal class KtFirSimpleNameReference( // TODO: Implement. return null } -} +} \ No newline at end of file diff --git a/analysis/kt-references/build.gradle.kts b/analysis/kt-references/build.gradle.kts index 146977168ef..b95e00f38e7 100644 --- a/analysis/kt-references/build.gradle.kts +++ b/analysis/kt-references/build.gradle.kts @@ -7,6 +7,8 @@ dependencies { implementation(project(":compiler:psi")) implementation(project(":analysis:light-classes-base")) implementation(intellijCore()) + implementation(project(":analysis:analysis-api-providers")) + implementation(project(":analysis:project-structure")) compileOnly(commonDependency("com.google.guava:guava")) } diff --git a/analysis/kt-references/kt-references-fe10/src/org/jetbrains/kotlin/references/fe10/KtFe10SimpleNameReference.kt b/analysis/kt-references/kt-references-fe10/src/org/jetbrains/kotlin/references/fe10/KtFe10SimpleNameReference.kt index 5024fdfa8c7..75fb61a1034 100644 --- a/analysis/kt-references/kt-references-fe10/src/org/jetbrains/kotlin/references/fe10/KtFe10SimpleNameReference.kt +++ b/analysis/kt-references/kt-references-fe10/src/org/jetbrains/kotlin/references/fe10/KtFe10SimpleNameReference.kt @@ -7,14 +7,14 @@ package org.jetbrains.kotlin.references.fe10 import com.intellij.psi.PsiElement import com.intellij.util.SmartList -import org.jetbrains.kotlin.references.fe10.base.KtFe10Reference -import org.jetbrains.kotlin.references.fe10.base.KtFe10ReferenceResolutionHelper import org.jetbrains.kotlin.descriptors.DeclarationDescriptor import org.jetbrains.kotlin.idea.references.KtSimpleNameReference import org.jetbrains.kotlin.idea.references.readWriteAccess import org.jetbrains.kotlin.load.java.descriptors.JavaPropertyDescriptor import org.jetbrains.kotlin.plugin.references.SimpleNameReferenceExtension import org.jetbrains.kotlin.psi.* +import org.jetbrains.kotlin.references.fe10.base.KtFe10Reference +import org.jetbrains.kotlin.references.fe10.base.KtFe10ReferenceResolutionHelper import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.ImportedFromObjectCallableDescriptor import org.jetbrains.kotlin.resolve.descriptorUtil.getImportableDescriptor @@ -98,4 +98,4 @@ class KtFe10SimpleNameReference(expression: KtSimpleNameExpression) : KtSimpleNa } return null } -} +} \ No newline at end of file diff --git a/analysis/kt-references/src/org/jetbrains/kotlin/idea/references/KtSimpleNameReference.kt b/analysis/kt-references/src/org/jetbrains/kotlin/idea/references/KtSimpleNameReference.kt index 032fb519e36..870fa8a22e9 100644 --- a/analysis/kt-references/src/org/jetbrains/kotlin/idea/references/KtSimpleNameReference.kt +++ b/analysis/kt-references/src/org/jetbrains/kotlin/idea/references/KtSimpleNameReference.kt @@ -5,8 +5,12 @@ package org.jetbrains.kotlin.idea.references +import com.intellij.openapi.project.Project import com.intellij.openapi.util.TextRange import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.analysis.project.structure.KtCompilerPluginsProvider +import org.jetbrains.kotlin.analysis.project.structure.KtCompilerPluginsProvider.CompilerPluginType +import org.jetbrains.kotlin.analysis.project.structure.KtSourceModule import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.name.FqName import org.jetbrains.kotlin.name.Name @@ -14,6 +18,9 @@ import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.getParentOfTypeAndBranch import org.jetbrains.kotlin.psi.psiUtil.startOffset import org.jetbrains.kotlin.types.expressions.OperatorConventions +import org.jetbrains.kotlin.types.expressions.OperatorConventions.ASSIGN_METHOD +import org.jetbrains.kotlin.utils.addToStdlib.runIf +import org.jetbrains.kotlin.analysis.project.structure.getKtModule abstract class KtSimpleNameReference(expression: KtSimpleNameExpression) : KtSimpleReference(expression) { // Extension point used by deprecated android extensions. @@ -65,7 +72,12 @@ abstract class KtSimpleNameReference(expression: KtSimpleNameExpression) : KtSim if (tokenType != null) { val name = OperatorConventions.getNameForOperationSymbol( tokenType, element.parent is KtUnaryExpression, element.parent is KtBinaryExpression - ) ?: return emptyList() + ) + ?: (expression.parent as? KtBinaryExpression)?.let { + runIf(it.operationToken == KtTokens.EQ && isAssignmentResolved(element.project, it)) { ASSIGN_METHOD } + } + ?: return emptyList() + val counterpart = OperatorConventions.ASSIGNMENT_OPERATION_COUNTERPARTS[tokenType] return if (counterpart != null) { val counterpartName = OperatorConventions.getNameForOperationSymbol(counterpart, false, true)!! @@ -80,4 +92,13 @@ abstract class KtSimpleNameReference(expression: KtSimpleNameExpression) : KtSim } abstract fun getImportAlias(): KtImportAlias? -} + + private fun isAssignmentResolved(project: Project, binaryExpression: KtBinaryExpression): Boolean { + val sourceModule = binaryExpression.getKtModule(element.project) as? KtSourceModule ?: return false + val reference = binaryExpression.operationReference.reference ?: return false + val pluginPresenceService = project.getService(KtCompilerPluginsProvider::class.java) + ?: error("KtAssignResolutionPresenceService is not available as a service") + return pluginPresenceService.isPluginOfTypeRegistered(sourceModule, CompilerPluginType.ASSIGNMENT) + && (reference.resolve() as? KtNamedFunction)?.nameAsName == ASSIGN_METHOD + } +} \ No newline at end of file diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/services/NoOpKtCompilerPluginsProvider.kt b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/services/NoOpKtCompilerPluginsProvider.kt index 802cc4934cf..4f96cffe993 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/services/NoOpKtCompilerPluginsProvider.kt +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/services/NoOpKtCompilerPluginsProvider.kt @@ -12,4 +12,6 @@ import org.jetbrains.kotlin.extensions.ProjectExtensionDescriptor internal object NoOpKtCompilerPluginsProvider : KtCompilerPluginsProvider() { override fun getRegisteredExtensions(module: KtSourceModule, extensionType: ProjectExtensionDescriptor): List = emptyList() + + override fun isPluginOfTypeRegistered(module: KtSourceModule, pluginType: CompilerPluginType): Boolean = false } diff --git a/analysis/project-structure/src/org/jetbrains/kotlin/analysis/project/structure/KtCompilerPluginsProvider.kt b/analysis/project-structure/src/org/jetbrains/kotlin/analysis/project/structure/KtCompilerPluginsProvider.kt index 4ec1ce8e684..760fb1143ee 100644 --- a/analysis/project-structure/src/org/jetbrains/kotlin/analysis/project/structure/KtCompilerPluginsProvider.kt +++ b/analysis/project-structure/src/org/jetbrains/kotlin/analysis/project/structure/KtCompilerPluginsProvider.kt @@ -11,10 +11,20 @@ import org.jetbrains.kotlin.extensions.ProjectExtensionDescriptor * A service which can return extensions which are registered for some module */ public abstract class KtCompilerPluginsProvider { + + enum class CompilerPluginType { + ASSIGNMENT + } + /** * Returns a list of extensions of a base [extensionType] which are registered for [module] * * These extensions are used in addition to those provided by the extension descriptor's [ProjectExtensionDescriptor.getInstances]. */ public abstract fun getRegisteredExtensions(module: KtSourceModule, extensionType: ProjectExtensionDescriptor): List -} + + /** + * Returns `true` if at least one plugin with requested `pluginType` is registered, `false` otherwise + */ + public abstract fun isPluginOfTypeRegistered(module: KtSourceModule, pluginType: CompilerPluginType): Boolean +} \ No newline at end of file diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/extensions/AssignResolutionAltererExtension.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/extensions/AssignResolutionAltererExtension.kt index 76fdca500f3..c2ba4b580ca 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/extensions/AssignResolutionAltererExtension.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/extensions/AssignResolutionAltererExtension.kt @@ -17,6 +17,7 @@ import org.jetbrains.kotlin.types.expressions.ExpressionTypingComponents import org.jetbrains.kotlin.types.expressions.ExpressionTypingContext import org.jetbrains.kotlin.types.expressions.KotlinTypeInfo + @InternalNonStableExtensionPoints interface AssignResolutionAltererExtension : AnnotationBasedExtension { companion object : ProjectExtensionDescriptor( diff --git a/compiler/psi/src/org/jetbrains/kotlin/types/expressions/OperatorConventions.java b/compiler/psi/src/org/jetbrains/kotlin/types/expressions/OperatorConventions.java index bf463da1b72..8fb03f563cf 100644 --- a/compiler/psi/src/org/jetbrains/kotlin/types/expressions/OperatorConventions.java +++ b/compiler/psi/src/org/jetbrains/kotlin/types/expressions/OperatorConventions.java @@ -104,6 +104,8 @@ public class OperatorConventions { .put(KtTokens.MINUSEQ, KtTokens.MINUS) .build(); + public static final Name ASSIGN_METHOD = Name.identifier("assign"); + public static final ImmutableBiMap BOOLEAN_OPERATIONS = ImmutableBiMap.builder() .put(KtTokens.ANDAND, AND) .put(KtTokens.OROR, OR) diff --git a/plugins/assign-plugin/assign-plugin.common/src/org/jetbrains/kotlin/assignment/plugin/AssignmentPluginNames.kt b/plugins/assign-plugin/assign-plugin.common/src/org/jetbrains/kotlin/assignment/plugin/AssignmentPluginNames.kt index 4d3d0a2f719..f0e9d895fd2 100644 --- a/plugins/assign-plugin/assign-plugin.common/src/org/jetbrains/kotlin/assignment/plugin/AssignmentPluginNames.kt +++ b/plugins/assign-plugin/assign-plugin.common/src/org/jetbrains/kotlin/assignment/plugin/AssignmentPluginNames.kt @@ -5,10 +5,7 @@ package org.jetbrains.kotlin.assignment.plugin -import org.jetbrains.kotlin.name.Name - object AssignmentPluginNames { const val PLUGIN_ID = "org.jetbrains.kotlin.assignment" const val ANNOTATION_OPTION_NAME = "annotation" - val ASSIGN_METHOD = Name.identifier("assign") } diff --git a/plugins/assign-plugin/assign-plugin.k1/src/org/jetbrains/kotlin/assignment/plugin/ValueContainerAssignResolutionAltererExtension.kt b/plugins/assign-plugin/assign-plugin.k1/src/org/jetbrains/kotlin/assignment/plugin/ValueContainerAssignResolutionAltererExtension.kt index 8b4a7209a45..4b0d03b1dbb 100644 --- a/plugins/assign-plugin/assign-plugin.k1/src/org/jetbrains/kotlin/assignment/plugin/ValueContainerAssignResolutionAltererExtension.kt +++ b/plugins/assign-plugin/assign-plugin.k1/src/org/jetbrains/kotlin/assignment/plugin/ValueContainerAssignResolutionAltererExtension.kt @@ -5,10 +5,9 @@ package org.jetbrains.kotlin.assignment.plugin -import org.jetbrains.kotlin.cfg.getElementParentDeclaration -import org.jetbrains.kotlin.assignment.plugin.AssignmentPluginNames.ASSIGN_METHOD import org.jetbrains.kotlin.assignment.plugin.diagnostics.ErrorsAssignmentPlugin.CALL_ERROR_ASSIGN_METHOD_SHOULD_RETURN_UNIT import org.jetbrains.kotlin.assignment.plugin.diagnostics.ErrorsAssignmentPlugin.NO_APPLICABLE_ASSIGN_METHOD +import org.jetbrains.kotlin.cfg.getElementParentDeclaration import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.descriptors.PropertyDescriptor import org.jetbrains.kotlin.descriptors.VariableDescriptor @@ -29,6 +28,7 @@ import org.jetbrains.kotlin.types.KotlinType import org.jetbrains.kotlin.types.expressions.ExpressionTypingComponents import org.jetbrains.kotlin.types.expressions.ExpressionTypingContext import org.jetbrains.kotlin.types.expressions.KotlinTypeInfo +import org.jetbrains.kotlin.types.expressions.OperatorConventions.ASSIGN_METHOD import org.jetbrains.kotlin.types.typeUtil.isUnit import org.jetbrains.kotlin.types.typeUtil.makeNotNullable import java.util.* diff --git a/plugins/assign-plugin/assign-plugin.k1/src/org/jetbrains/kotlin/assignment/plugin/diagnostics/AssignmentPluginDeclarationChecker.kt b/plugins/assign-plugin/assign-plugin.k1/src/org/jetbrains/kotlin/assignment/plugin/diagnostics/AssignmentPluginDeclarationChecker.kt index dfe85b0fa3d..aa2fd590ac6 100644 --- a/plugins/assign-plugin/assign-plugin.k1/src/org/jetbrains/kotlin/assignment/plugin/diagnostics/AssignmentPluginDeclarationChecker.kt +++ b/plugins/assign-plugin/assign-plugin.k1/src/org/jetbrains/kotlin/assignment/plugin/diagnostics/AssignmentPluginDeclarationChecker.kt @@ -6,7 +6,6 @@ package org.jetbrains.kotlin.assignment.plugin.diagnostics import org.jetbrains.kotlin.builtins.KotlinBuiltIns -import org.jetbrains.kotlin.assignment.plugin.AssignmentPluginNames.ASSIGN_METHOD import org.jetbrains.kotlin.assignment.plugin.diagnostics.ErrorsAssignmentPlugin.DECLARATION_ERROR_ASSIGN_METHOD_SHOULD_RETURN_UNIT import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.DeclarationDescriptor @@ -19,6 +18,7 @@ import org.jetbrains.kotlin.psi.KtModifierListOwner import org.jetbrains.kotlin.resolve.checkers.DeclarationChecker import org.jetbrains.kotlin.resolve.checkers.DeclarationCheckerContext import org.jetbrains.kotlin.resolve.descriptorUtil.isExtension +import org.jetbrains.kotlin.types.expressions.OperatorConventions.ASSIGN_METHOD class AssignmentPluginDeclarationChecker(private val annotations: List) : DeclarationChecker { diff --git a/plugins/assign-plugin/assign-plugin.k2/src/org/jetbrains/kotlin/assignment/plugin/k2/FirAssignmentPluginAssignAltererExtension.kt b/plugins/assign-plugin/assign-plugin.k2/src/org/jetbrains/kotlin/assignment/plugin/k2/FirAssignmentPluginAssignAltererExtension.kt index 89d9728f53f..55608ae23f5 100644 --- a/plugins/assign-plugin/assign-plugin.k2/src/org/jetbrains/kotlin/assignment/plugin/k2/FirAssignmentPluginAssignAltererExtension.kt +++ b/plugins/assign-plugin/assign-plugin.k2/src/org/jetbrains/kotlin/assignment/plugin/k2/FirAssignmentPluginAssignAltererExtension.kt @@ -6,7 +6,6 @@ package org.jetbrains.kotlin.assignment.plugin.k2 import org.jetbrains.kotlin.KtFakeSourceElementKind -import org.jetbrains.kotlin.assignment.plugin.AssignmentPluginNames.ASSIGN_METHOD import org.jetbrains.kotlin.fakeElement import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.expressions.* @@ -19,7 +18,9 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirBackingFieldSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirFieldSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol -import org.jetbrains.kotlin.fir.types.* +import org.jetbrains.kotlin.fir.types.toRegularClassSymbol +import org.jetbrains.kotlin.fir.types.upperBoundIfFlexible +import org.jetbrains.kotlin.types.expressions.OperatorConventions.ASSIGN_METHOD import org.jetbrains.kotlin.utils.addToStdlib.runIf class FirAssignmentPluginAssignAltererExtension( @@ -70,4 +71,4 @@ class FirAssignmentPluginAssignAltererExtension( origin = FirFunctionCallOrigin.Regular } } -} +} \ No newline at end of file diff --git a/plugins/assign-plugin/assign-plugin.k2/src/org/jetbrains/kotlin/assignment/plugin/k2/diagnostics/FirAssignmentPluginFunctionCallChecker.kt b/plugins/assign-plugin/assign-plugin.k2/src/org/jetbrains/kotlin/assignment/plugin/k2/diagnostics/FirAssignmentPluginFunctionCallChecker.kt index c4d8833687d..402a9217464 100644 --- a/plugins/assign-plugin/assign-plugin.k2/src/org/jetbrains/kotlin/assignment/plugin/k2/diagnostics/FirAssignmentPluginFunctionCallChecker.kt +++ b/plugins/assign-plugin/assign-plugin.k2/src/org/jetbrains/kotlin/assignment/plugin/k2/diagnostics/FirAssignmentPluginFunctionCallChecker.kt @@ -6,7 +6,6 @@ package org.jetbrains.kotlin.assignment.plugin.k2.diagnostics import org.jetbrains.kotlin.KtFakeSourceElementKind -import org.jetbrains.kotlin.assignment.plugin.AssignmentPluginNames.ASSIGN_METHOD import org.jetbrains.kotlin.assignment.plugin.k2.annotationMatchingService import org.jetbrains.kotlin.assignment.plugin.k2.diagnostics.FirErrorsAssignmentPlugin.CALL_ERROR_ASSIGN_METHOD_SHOULD_RETURN_UNIT import org.jetbrains.kotlin.assignment.plugin.k2.diagnostics.FirErrorsAssignmentPlugin.NO_APPLICABLE_ASSIGN_METHOD @@ -17,18 +16,15 @@ import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext import org.jetbrains.kotlin.fir.analysis.checkers.expression.FirFunctionCallChecker import org.jetbrains.kotlin.fir.analysis.checkers.toRegularClassSymbol import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic -import org.jetbrains.kotlin.fir.diagnostics.FirDiagnosticHolder import org.jetbrains.kotlin.fir.expressions.FirFunctionCall import org.jetbrains.kotlin.fir.expressions.arguments import org.jetbrains.kotlin.fir.expressions.toResolvedCallableSymbol -import org.jetbrains.kotlin.fir.references.toResolvedCallableSymbol -import org.jetbrains.kotlin.fir.references.FirErrorNamedReference -import org.jetbrains.kotlin.fir.references.FirResolvedErrorReference import org.jetbrains.kotlin.fir.references.isError import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeAmbiguityError import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeDiagnosticWithSingleCandidate import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeUnresolvedNameError import org.jetbrains.kotlin.fir.types.isUnit +import org.jetbrains.kotlin.types.expressions.OperatorConventions.ASSIGN_METHOD object FirAssignmentPluginFunctionCallChecker : FirFunctionCallChecker() { diff --git a/plugins/assign-plugin/assign-plugin.k2/src/org/jetbrains/kotlin/assignment/plugin/k2/diagnostics/FirAssignmentPluginFunctionChecker.kt b/plugins/assign-plugin/assign-plugin.k2/src/org/jetbrains/kotlin/assignment/plugin/k2/diagnostics/FirAssignmentPluginFunctionChecker.kt index a5769e0d84e..86587ee1ec4 100644 --- a/plugins/assign-plugin/assign-plugin.k2/src/org/jetbrains/kotlin/assignment/plugin/k2/diagnostics/FirAssignmentPluginFunctionChecker.kt +++ b/plugins/assign-plugin/assign-plugin.k2/src/org/jetbrains/kotlin/assignment/plugin/k2/diagnostics/FirAssignmentPluginFunctionChecker.kt @@ -5,7 +5,6 @@ package org.jetbrains.kotlin.assignment.plugin.k2.diagnostics -import org.jetbrains.kotlin.assignment.plugin.AssignmentPluginNames.ASSIGN_METHOD import org.jetbrains.kotlin.assignment.plugin.k2.annotationMatchingService import org.jetbrains.kotlin.assignment.plugin.k2.diagnostics.FirErrorsAssignmentPlugin.DECLARATION_ERROR_ASSIGN_METHOD_SHOULD_RETURN_UNIT import org.jetbrains.kotlin.diagnostics.DiagnosticReporter @@ -19,6 +18,7 @@ import org.jetbrains.kotlin.fir.symbols.impl.isExtension import org.jetbrains.kotlin.fir.types.coneType import org.jetbrains.kotlin.fir.types.isUnit import org.jetbrains.kotlin.fir.types.toRegularClassSymbol +import org.jetbrains.kotlin.types.expressions.OperatorConventions.ASSIGN_METHOD object FirAssignmentPluginFunctionChecker : FirSimpleFunctionChecker() {