[FIR] Add INVISIBLE_SETTER

This commit is contained in:
Ivan Kochurkin
2021-10-01 00:05:49 +03:00
parent c97587cc53
commit 75b40e4b75
54 changed files with 393 additions and 232 deletions
@@ -28,6 +28,7 @@ import org.jetbrains.kotlin.analysis.api.types.KtType
import org.jetbrains.kotlin.lexer.KtKeywordToken
import org.jetbrains.kotlin.lexer.KtModifierKeywordToken
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.CallableId
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.psi.KtExpression
@@ -340,6 +341,7 @@ private object FirToKtConversionCreator {
FirModuleData::class,
ExpectActualCompatibility.Incompatible::class,
DeprecationInfo::class,
CallableId::class
)
private val KType.kClass: KClass<*>
@@ -246,6 +246,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.fir.FirModuleData
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.lexer.KtKeywordToken
import org.jetbrains.kotlin.lexer.KtModifierKeywordToken
import org.jetbrains.kotlin.name.CallableId
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
@@ -203,6 +204,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
@@ -27,6 +27,7 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.FirPsiDiagnostic
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
import org.jetbrains.kotlin.lexer.KtKeywordToken
import org.jetbrains.kotlin.lexer.KtModifierKeywordToken
import org.jetbrains.kotlin.name.CallableId
import org.jetbrains.kotlin.name.ClassId
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
@@ -231,6 +232,14 @@ internal class ValOrVarOnSecondaryConstructorParameterImpl(
override val token: ValidityToken,
) : KtFirDiagnostic.ValOrVarOnSecondaryConstructorParameter(), KtAbstractFirDiagnostic<KtParameter>
internal class InvisibleSetterImpl(
override val property: KtVariableSymbol,
override val visibility: Visibility,
override val callableId: CallableId,
override val firDiagnostic: FirPsiDiagnostic,
override val token: ValidityToken,
) : KtFirDiagnostic.InvisibleSetter(), KtAbstractFirDiagnostic<PsiElement>
internal class InvisibleReferenceImpl(
override val reference: KtSymbol,
override val firDiagnostic: FirPsiDiagnostic,
@@ -1,3 +1,4 @@
RAW_FIR:
FILE: annotationParameters.kt
public? final? [RAW_FIR] enum class X : R|kotlin/Enum<X>| {
@@ -19,7 +20,7 @@ FILE: annotationParameters.kt
}
public? final? [RAW_FIR] [IsFromPrimaryConstructor=true] val args: A.X = R|<local>/args|
[TYPES] public? get(): A.X
[TYPES] [ContainingClassKey=Anno] public? get(): A.X
}
public? final? [RAW_FIR] class B : R|kotlin/Any| {
@@ -56,7 +57,7 @@ FILE: annotationParameters.kt
}
public? final? [RAW_FIR] [IsFromPrimaryConstructor=true] val args: A.X = R|<local>/args|
[TYPES] public? get(): A.X
[TYPES] [ContainingClassKey=Anno] public? get(): A.X
}
public? final? [RAW_FIR] class B : R|kotlin/Any| {
@@ -93,7 +94,7 @@ FILE: annotationParameters.kt
}
public? final? [RAW_FIR] [IsFromPrimaryConstructor=true] val args: A.X = R|<local>/args|
[TYPES] public? get(): A.X
[TYPES] [ContainingClassKey=Anno] public? get(): A.X
}
public? final? [RAW_FIR] class B : R|kotlin/Any| {
@@ -130,7 +131,7 @@ FILE: annotationParameters.kt
}
public? final? [RAW_FIR] [IsFromPrimaryConstructor=true] val args: A.X = R|<local>/args|
[TYPES] public? get(): A.X
[TYPES] [ContainingClassKey=Anno] public? get(): A.X
}
public? final? [SUPER_TYPES] class B : R|kotlin/Any| {
@@ -167,7 +168,7 @@ FILE: annotationParameters.kt
}
public? final? [RAW_FIR] [IsFromPrimaryConstructor=true] val args: A.X = R|<local>/args|
[TYPES] public? get(): A.X
[TYPES] [ContainingClassKey=Anno] public? get(): A.X
}
public final [SUPER_TYPES] class B : R|kotlin/Any| {
@@ -204,7 +205,7 @@ FILE: annotationParameters.kt
}
public? final? [RAW_FIR] [IsFromPrimaryConstructor=true] val args: A.X = R|<local>/args|
[TYPES] public? get(): A.X
[TYPES] [ContainingClassKey=Anno] public? get(): A.X
}
public final [SUPER_TYPES] class B : R|kotlin/Any| {
@@ -241,7 +242,7 @@ FILE: annotationParameters.kt
}
public? final? [RAW_FIR] [IsFromPrimaryConstructor=true] val args: A.X = R|<local>/args|
[TYPES] public? get(): A.X
[TYPES] [ContainingClassKey=Anno] public? get(): A.X
}
public final [SUPER_TYPES] class B : R|kotlin/Any| {
@@ -278,7 +279,7 @@ FILE: annotationParameters.kt
}
public? final? [RAW_FIR] [IsFromPrimaryConstructor=true] val args: A.X = R|<local>/args|
[TYPES] public? get(): A.X
[TYPES] [ContainingClassKey=Anno] public? get(): A.X
}
public final [STATUS] class B : R|kotlin/Any| {
@@ -315,7 +316,7 @@ FILE: annotationParameters.kt
}
public? final? [SUPER_TYPES] [IsFromPrimaryConstructor=true] val args: A.X = R|<local>/args|
[TYPES] public? get(): A.X
[TYPES] [ContainingClassKey=Anno] public? get(): A.X
}
public final [STATUS] class B : R|kotlin/Any| {
@@ -352,7 +353,7 @@ FILE: annotationParameters.kt
}
public? final? [RAW_FIR] [IsFromPrimaryConstructor=true] val args: A.X = R|<local>/args|
[TYPES] public? get(): A.X
[TYPES] [ContainingClassKey=Anno] public? get(): A.X
}
public? final? [RAW_FIR] class B : R|kotlin/Any| {
@@ -389,7 +390,7 @@ FILE: annotationParameters.kt
}
public? final? [SUPER_TYPES] [IsFromPrimaryConstructor=true] val args: A.X = R|<local>/args|
[TYPES] public? get(): A.X
[TYPES] [ContainingClassKey=Anno] public? get(): A.X
}
public final [STATUS] class B : R|kotlin/Any| {
@@ -426,7 +427,7 @@ FILE: annotationParameters.kt
}
public? final? [SUPER_TYPES] [IsFromPrimaryConstructor=true] val args: A.X = R|<local>/args|
[TYPES] public? get(): A.X
[TYPES] [ContainingClassKey=Anno] public? get(): A.X
}
public final [STATUS] class B : R|kotlin/Any| {
@@ -463,7 +464,7 @@ FILE: annotationParameters.kt
}
public? final? [RAW_FIR] [IsFromPrimaryConstructor=true] val args: A.X = R|<local>/args|
[TYPES] public? get(): A.X
[TYPES] [ContainingClassKey=Anno] public? get(): A.X
}
public? final? [RAW_FIR] class B : R|kotlin/Any| {
@@ -500,7 +501,7 @@ FILE: annotationParameters.kt
}
public? final? [RAW_FIR] [IsFromPrimaryConstructor=true] val args: A.X = R|<local>/args|
[TYPES] public? get(): A.X
[TYPES] [ContainingClassKey=Anno] public? get(): A.X
}
public? final? [SUPER_TYPES] class B : R|kotlin/Any| {
@@ -537,7 +538,7 @@ FILE: annotationParameters.kt
}
public? final? [RAW_FIR] [IsFromPrimaryConstructor=true] val args: A.X = R|<local>/args|
[TYPES] public? get(): A.X
[TYPES] [ContainingClassKey=Anno] public? get(): A.X
}
public final [SUPER_TYPES] class B : R|kotlin/Any| {
@@ -574,7 +575,7 @@ FILE: annotationParameters.kt
}
public? final? [RAW_FIR] [IsFromPrimaryConstructor=true] val args: A.X = R|<local>/args|
[TYPES] public? get(): A.X
[TYPES] [ContainingClassKey=Anno] public? get(): A.X
}
public final [SUPER_TYPES] class B : R|kotlin/Any| {
@@ -611,7 +612,7 @@ FILE: annotationParameters.kt
}
public? final? [RAW_FIR] [IsFromPrimaryConstructor=true] val args: A.X = R|<local>/args|
[TYPES] public? get(): A.X
[TYPES] [ContainingClassKey=Anno] public? get(): A.X
}
public final [SUPER_TYPES] class B : R|kotlin/Any| {
@@ -648,7 +649,7 @@ FILE: annotationParameters.kt
}
public? final? [RAW_FIR] [IsFromPrimaryConstructor=true] val args: A.X = R|<local>/args|
[TYPES] public? get(): A.X
[TYPES] [ContainingClassKey=Anno] public? get(): A.X
}
public? final? [SUPER_TYPES] class B : R|kotlin/Any| {
@@ -685,7 +686,7 @@ FILE: annotationParameters.kt
}
public? final? [RAW_FIR] [IsFromPrimaryConstructor=true] val args: A.X = R|<local>/args|
[TYPES] public? get(): A.X
[TYPES] [ContainingClassKey=Anno] public? get(): A.X
}
public? final? [SUPER_TYPES] class B : R|kotlin/Any| {
@@ -722,7 +723,7 @@ FILE: annotationParameters.kt
}
public final [BODY_RESOLVE] [IsFromPrimaryConstructor=true] val args: <ERROR TYPE REF: Symbol not found for A.X> = R|<local>/args|
[BODY_RESOLVE] public get(): <ERROR TYPE REF: Symbol not found for A.X>
[BODY_RESOLVE] [ContainingClassKey=Anno] public get(): <ERROR TYPE REF: Symbol not found for A.X>
}
public final [BODY_RESOLVE] class B : R|kotlin/Any| {
@@ -25481,6 +25481,12 @@ public class DiagnosisCompilerTestFE10TestdataTestGenerated extends AbstractDiag
runTest("compiler/testData/diagnostics/tests/scopes/VisibilityInheritModifier.kt");
}
@Test
@TestMetadata("visibleSetterFromSyntheticProperty.kt")
public void testVisibleSetterFromSyntheticProperty() throws Exception {
runTest("compiler/testData/diagnostics/tests/scopes/visibleSetterFromSyntheticProperty.kt");
}
@Nested
@TestMetadata("compiler/testData/diagnostics/tests/scopes/classHeader")
@TestDataPath("$PROJECT_ROOT")
@@ -25920,6 +25926,12 @@ public class DiagnosisCompilerTestFE10TestdataTestGenerated extends AbstractDiag
runTest("compiler/testData/diagnostics/tests/scopes/protectedVisibility/protectedCallOnSubClass.kt");
}
@Test
@TestMetadata("protectedPropertyInPrimaryConstructor.kt")
public void testProtectedPropertyInPrimaryConstructor() throws Exception {
runTest("compiler/testData/diagnostics/tests/scopes/protectedVisibility/protectedPropertyInPrimaryConstructor.kt");
}
@Test
@TestMetadata("smartcastOnExtensionReceiver.kt")
public void testSmartcastOnExtensionReceiver() throws Exception {