[FIR] do not consider delegate field as local
Otherwise, lazy resolve will never resolve it
This commit is contained in:
+7
-3
@@ -7,13 +7,13 @@ package org.jetbrains.kotlin.fir.analysis.checkers.declaration
|
||||
|
||||
import org.jetbrains.kotlin.KtFakeSourceElementKind
|
||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
|
||||
import org.jetbrains.kotlin.diagnostics.reportOn
|
||||
import org.jetbrains.kotlin.fir.*
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.FirDeclarationInspector
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.FirDeclarationPresenter
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
||||
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors
|
||||
import org.jetbrains.kotlin.diagnostics.reportOn
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.declarations.impl.FirOuterClassTypeParameterRef
|
||||
import org.jetbrains.kotlin.fir.resolve.getContainingDeclaration
|
||||
@@ -22,9 +22,9 @@ import org.jetbrains.kotlin.fir.scopes.impl.FirPackageMemberScope
|
||||
import org.jetbrains.kotlin.fir.scopes.impl.PACKAGE_MEMBER
|
||||
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.SymbolInternals
|
||||
import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase
|
||||
import org.jetbrains.kotlin.fir.util.ListMultimap
|
||||
import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid
|
||||
import org.jetbrains.kotlin.name.ClassId
|
||||
@@ -50,6 +50,10 @@ object FirConflictsChecker : FirBasicDeclarationChecker() {
|
||||
private fun collectLocalConflicts(declaration: FirDeclaration, conflicting: List<FirDeclaration>) {
|
||||
val localConflicts = SmartSet.create<FirBasedSymbol<*>>()
|
||||
for (otherDeclaration in conflicting) {
|
||||
if (otherDeclaration is FirField && otherDeclaration.source?.kind == KtFakeSourceElementKind.ClassDelegationField) {
|
||||
// class delegation field will be renamed after by the IR backend in a case of a name clash
|
||||
continue
|
||||
}
|
||||
if (otherDeclaration != declaration && !isExpectAndActual(declaration, otherDeclaration)) {
|
||||
localConflicts.add(otherDeclaration.symbol)
|
||||
declarationConflictingSymbols.getOrPut(otherDeclaration) { SmartSet.create() }.add(declaration.symbol)
|
||||
|
||||
+2
@@ -5,6 +5,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.fir.signaturer
|
||||
|
||||
import org.jetbrains.kotlin.KtFakeSourceElementKind
|
||||
import org.jetbrains.kotlin.backend.common.serialization.mangle.MangleConstant
|
||||
import org.jetbrains.kotlin.descriptors.Visibilities
|
||||
import org.jetbrains.kotlin.fir.*
|
||||
@@ -93,6 +94,7 @@ class FirBasedSignatureComposer(override val mangler: FirMangler) : Fir2IrSignat
|
||||
if (declaration is FirRegularClass && declaration.classId.isLocal) return null
|
||||
if (declaration is FirCallableDeclaration) {
|
||||
if (declaration.visibility == Visibilities.Local) return null
|
||||
if (declaration is FirField && declaration.source?.kind == KtFakeSourceElementKind.ClassDelegationField) return null
|
||||
if (declaration.dispatchReceiverClassLookupTagOrNull()?.classId?.isLocal == true || containingClass?.classId?.isLocal == true) return null
|
||||
}
|
||||
|
||||
|
||||
+13
-4
@@ -28,7 +28,10 @@ import org.jetbrains.kotlin.fir.contracts.builder.buildRawContractDescription
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.declarations.builder.*
|
||||
import org.jetbrains.kotlin.fir.declarations.impl.*
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.*
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.DanglingTypeConstraint
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.addDeclarations
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.addDefaultBoundIfNecessary
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.danglingTypeConstraints
|
||||
import org.jetbrains.kotlin.fir.diagnostics.ConeDanglingModifierOnTopLevel
|
||||
import org.jetbrains.kotlin.fir.diagnostics.ConeDiagnostic
|
||||
import org.jetbrains.kotlin.fir.diagnostics.ConeSimpleDiagnostic
|
||||
@@ -48,9 +51,14 @@ import org.jetbrains.kotlin.fir.references.builder.buildSimpleNamedReference
|
||||
import org.jetbrains.kotlin.fir.scopes.FirScopeProvider
|
||||
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.*
|
||||
import org.jetbrains.kotlin.fir.types.*
|
||||
import org.jetbrains.kotlin.fir.types.ConeClassLikeType
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeProjection
|
||||
import org.jetbrains.kotlin.fir.types.FirTypeRef
|
||||
import org.jetbrains.kotlin.fir.types.FirUserTypeRef
|
||||
import org.jetbrains.kotlin.fir.types.builder.*
|
||||
import org.jetbrains.kotlin.fir.types.impl.*
|
||||
import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl
|
||||
import org.jetbrains.kotlin.fir.types.impl.FirQualifierPartImpl
|
||||
import org.jetbrains.kotlin.fir.types.impl.FirTypeArgumentListImpl
|
||||
import org.jetbrains.kotlin.lexer.KtModifierKeywordToken
|
||||
import org.jetbrains.kotlin.lexer.KtTokens.*
|
||||
import org.jetbrains.kotlin.name.*
|
||||
@@ -1887,10 +1895,11 @@ class DeclarationsConverter(
|
||||
origin = FirDeclarationOrigin.Synthetic
|
||||
name = NameUtils.delegateFieldName(delegateFieldsMap.size)
|
||||
returnTypeRef = firTypeRef
|
||||
symbol = FirFieldSymbol(CallableId(name))
|
||||
symbol = FirFieldSymbol(CallableId(context.currentClassId, name))
|
||||
isVar = false
|
||||
status = FirDeclarationStatusImpl(Visibilities.Private, Modality.FINAL)
|
||||
initializer = calculatedFirExpression
|
||||
dispatchReceiverType = currentDispatchReceiverType()
|
||||
}.symbol
|
||||
)
|
||||
return firTypeRef
|
||||
|
||||
@@ -7,8 +7,8 @@ package org.jetbrains.kotlin.fir.builder
|
||||
|
||||
import com.intellij.psi.PsiElement
|
||||
import com.intellij.psi.tree.IElementType
|
||||
import com.intellij.util.AstLoadingFilter
|
||||
import com.intellij.psi.util.PsiTreeUtil
|
||||
import com.intellij.util.AstLoadingFilter
|
||||
import org.jetbrains.kotlin.*
|
||||
import org.jetbrains.kotlin.builtins.StandardNames
|
||||
import org.jetbrains.kotlin.builtins.StandardNames.BACKING_FIELD
|
||||
@@ -863,10 +863,11 @@ open class RawFirBuilder(
|
||||
origin = FirDeclarationOrigin.Synthetic
|
||||
name = NameUtils.delegateFieldName(delegateFieldsMap.size)
|
||||
returnTypeRef = type
|
||||
symbol = FirFieldSymbol(CallableId(name))
|
||||
symbol = FirFieldSymbol(CallableId(this@RawFirBuilder.context.currentClassId, name))
|
||||
isVar = false
|
||||
status = FirDeclarationStatusImpl(Visibilities.Private, Modality.FINAL)
|
||||
initializer = delegateExpression
|
||||
dispatchReceiverType = currentDispatchReceiverType()
|
||||
}
|
||||
delegateFieldsMap[index] = delegateField.symbol
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user