[FIR] Implement INVISIBLE_SETTER

This commit is contained in:
Ivan Kochurkin
2021-07-27 22:40:00 +03:00
committed by teamcityserver
parent ca4410aa53
commit b3d7ed569d
39 changed files with 288 additions and 180 deletions
@@ -27,6 +27,7 @@ import org.jetbrains.kotlin.idea.frontend.api.symbols.*
import org.jetbrains.kotlin.idea.frontend.api.types.KtType
import org.jetbrains.kotlin.lexer.KtKeywordToken
import org.jetbrains.kotlin.lexer.KtModifierKeywordToken
import org.jetbrains.kotlin.name.CallableId
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.psi.KtExpression
@@ -300,6 +301,7 @@ private object FirToKtConversionCreator {
FqName::class,
FirModuleData::class,
ExpectActualCompatibility.Incompatible::class,
CallableId::class
)
private val KType.kClass: KClass<*>
@@ -241,6 +241,15 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
token,
)
}
add(FirErrors.INVISIBLE_SETTER) { firDiagnostic ->
InvisibleSetterImpl(
firSymbolBuilder.variableLikeBuilder.buildVariableSymbol(firDiagnostic.a.fir),
firDiagnostic.b,
firDiagnostic.c,
firDiagnostic as FirPsiDiagnostic,
token,
)
}
add(FirErrors.INVISIBLE_REFERENCE) { firDiagnostic ->
InvisibleReferenceImpl(
firSymbolBuilder.buildSymbol(firDiagnostic.a.fir),
@@ -26,6 +26,7 @@ import org.jetbrains.kotlin.idea.frontend.api.symbols.KtVariableSymbol
import org.jetbrains.kotlin.idea.frontend.api.types.KtType
import org.jetbrains.kotlin.lexer.KtKeywordToken
import org.jetbrains.kotlin.lexer.KtModifierKeywordToken
import org.jetbrains.kotlin.name.CallableId
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.psi.KtAnnotationEntry
@@ -197,6 +198,13 @@ sealed class KtFirDiagnostic<PSI : PsiElement> : KtDiagnosticWithPsi<PSI> {
abstract val valOrVar: KtKeywordToken
}
abstract class InvisibleSetter : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = InvisibleSetter::class
abstract val property: KtVariableSymbol
abstract val visibility: Visibility
abstract val callableId: CallableId
}
abstract class InvisibleReference : KtFirDiagnostic<PsiElement>() {
override val diagnosticClass get() = InvisibleReference::class
abstract val reference: KtSymbol
@@ -28,6 +28,7 @@ import org.jetbrains.kotlin.idea.frontend.api.tokens.ValidityToken
import org.jetbrains.kotlin.idea.frontend.api.types.KtType
import org.jetbrains.kotlin.lexer.KtKeywordToken
import org.jetbrains.kotlin.lexer.KtModifierKeywordToken
import org.jetbrains.kotlin.name.CallableId
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.psi.KtAnnotationEntry
@@ -282,6 +283,16 @@ internal class ValOrVarOnSecondaryConstructorParameterImpl(
override val firDiagnostic: FirPsiDiagnostic by weakRef(firDiagnostic)
}
internal class InvisibleSetterImpl(
override val property: KtVariableSymbol,
override val visibility: Visibility,
override val callableId: CallableId,
firDiagnostic: FirPsiDiagnostic,
override val token: ValidityToken,
) : KtFirDiagnostic.InvisibleSetter(), KtAbstractFirDiagnostic<PsiElement> {
override val firDiagnostic: FirPsiDiagnostic by weakRef(firDiagnostic)
}
internal class InvisibleReferenceImpl(
override val reference: KtSymbol,
firDiagnostic: FirPsiDiagnostic,