[FE, Java Resolve] Filter out canonical record constructors
This fixes a false positive overload resolution ambiguity in FIR when invoking a record constructor when it also defines a canonical constructor (compact or explicit). #KT-62151 Fixed
This commit is contained in:
committed by
Space Team
parent
3327bed5bd
commit
2d7cadc0ab
@@ -5,7 +5,9 @@
|
||||
|
||||
package org.jetbrains.kotlin.fir.java
|
||||
|
||||
import com.intellij.psi.PsiMethod
|
||||
import com.intellij.psi.impl.light.LightRecordCanonicalConstructor
|
||||
import com.intellij.psi.util.JavaPsiRecordUtil
|
||||
import org.jetbrains.kotlin.*
|
||||
import org.jetbrains.kotlin.builtins.jvm.JavaToKotlinClassMap
|
||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||
@@ -449,7 +451,8 @@ abstract class FirJavaFacade(
|
||||
}
|
||||
|
||||
/**
|
||||
* It is possible that JavaClass already has a synthetic primary constructor ([LightRecordCanonicalConstructor])
|
||||
* It is possible that JavaClass already has a synthetic primary constructor ([LightRecordCanonicalConstructor]) or a
|
||||
* canonical constructor ([JavaPsiRecordUtil.isCanonicalConstructor]).
|
||||
* Such behavior depends on a platform version and psi providers
|
||||
* (e.g., in IntelliJ plugin Java class can have additional declarations)
|
||||
*/
|
||||
@@ -649,7 +652,8 @@ abstract class FirJavaFacade(
|
||||
hasStableParameterNames = false
|
||||
}
|
||||
this.visibility = visibility
|
||||
isPrimary = javaConstructor == null || source?.psi is LightRecordCanonicalConstructor
|
||||
// TODO get rid of dependency on PSI KT-63046
|
||||
isPrimary = javaConstructor == null || source?.psi.let { it is PsiMethod && JavaPsiRecordUtil.isCanonicalConstructor(it) }
|
||||
returnTypeRef = buildResolvedTypeRef {
|
||||
type = ownerClassBuilder.buildSelfTypeRef()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user