[FE] Check annotations on actual class members including fake overrides
^KT-60668 ^KT-60936
This commit is contained in:
committed by
Space Team
parent
d614f06259
commit
ab1c0e3c48
+24
@@ -728,6 +728,18 @@ public class FirOldFrontendMPPDiagnosticsWithLightTreeTestGenerated extends Abst
|
||||
runTest("compiler/testData/diagnostics/tests/multiplatform/annotationMatching/checkDiagnosticFullText.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("classScopeInnerClasses.kt")
|
||||
public void testClassScopeInnerClasses() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/multiplatform/annotationMatching/classScopeInnerClasses.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("classScopeViaTypealiasIncompatible.kt")
|
||||
public void testClassScopeViaTypealiasIncompatible() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/multiplatform/annotationMatching/classScopeViaTypealiasIncompatible.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("compatibleOverrides.kt")
|
||||
public void testCompatibleOverrides() throws Exception {
|
||||
@@ -794,6 +806,18 @@ public class FirOldFrontendMPPDiagnosticsWithLightTreeTestGenerated extends Abst
|
||||
runTest("compiler/testData/diagnostics/tests/multiplatform/annotationMatching/sourceRetentionAnnotationsWhenTypealias.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("substitutionOverrideInTwoClasses.kt")
|
||||
public void testSubstitutionOverrideInTwoClasses() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/multiplatform/annotationMatching/substitutionOverrideInTwoClasses.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("twoActualTypealiasesToSameClass.kt")
|
||||
public void testTwoActualTypealiasesToSameClass() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/multiplatform/annotationMatching/twoActualTypealiasesToSameClass.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("typealias.kt")
|
||||
public void testTypealias() throws Exception {
|
||||
|
||||
+24
@@ -728,6 +728,18 @@ public class FirOldFrontendMPPDiagnosticsWithPsiTestGenerated extends AbstractFi
|
||||
runTest("compiler/testData/diagnostics/tests/multiplatform/annotationMatching/checkDiagnosticFullText.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("classScopeInnerClasses.kt")
|
||||
public void testClassScopeInnerClasses() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/multiplatform/annotationMatching/classScopeInnerClasses.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("classScopeViaTypealiasIncompatible.kt")
|
||||
public void testClassScopeViaTypealiasIncompatible() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/multiplatform/annotationMatching/classScopeViaTypealiasIncompatible.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("compatibleOverrides.kt")
|
||||
public void testCompatibleOverrides() throws Exception {
|
||||
@@ -794,6 +806,18 @@ public class FirOldFrontendMPPDiagnosticsWithPsiTestGenerated extends AbstractFi
|
||||
runTest("compiler/testData/diagnostics/tests/multiplatform/annotationMatching/sourceRetentionAnnotationsWhenTypealias.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("substitutionOverrideInTwoClasses.kt")
|
||||
public void testSubstitutionOverrideInTwoClasses() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/multiplatform/annotationMatching/substitutionOverrideInTwoClasses.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("twoActualTypealiasesToSameClass.kt")
|
||||
public void testTwoActualTypealiasesToSameClass() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/multiplatform/annotationMatching/twoActualTypealiasesToSameClass.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("typealias.kt")
|
||||
public void testTypealias() throws Exception {
|
||||
|
||||
+1
-5
@@ -6,7 +6,6 @@
|
||||
package org.jetbrains.kotlin.fir.analysis.checkers.declaration
|
||||
|
||||
import org.jetbrains.kotlin.KtFakeSourceElementKind
|
||||
import org.jetbrains.kotlin.KtSourceElement
|
||||
import org.jetbrains.kotlin.config.LanguageFeature
|
||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
|
||||
@@ -29,10 +28,7 @@ import org.jetbrains.kotlin.fir.scopes.getDeclaredConstructors
|
||||
import org.jetbrains.kotlin.fir.scopes.impl.declaredMemberScope
|
||||
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.SymbolInternals
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirRegularClassSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirTypeAliasSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirValueParameterSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.*
|
||||
import org.jetbrains.kotlin.lexer.KtTokens
|
||||
import org.jetbrains.kotlin.name.StandardClassIds
|
||||
import org.jetbrains.kotlin.resolve.calls.mpp.AbstractExpectActualAnnotationMatchChecker
|
||||
|
||||
+16
@@ -11,6 +11,7 @@ import org.jetbrains.kotlin.descriptors.Visibility
|
||||
import org.jetbrains.kotlin.fir.*
|
||||
import org.jetbrains.kotlin.fir.analysis.getRetention
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.isActual
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
|
||||
import org.jetbrains.kotlin.fir.expressions.FirConstExpression
|
||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||
@@ -458,6 +459,21 @@ class FirExpectActualMatchingContextImpl private constructor(
|
||||
|
||||
private fun <K, V> Map<K, V>.asMutableMap(): MutableMap<K, V> = this as MutableMap
|
||||
|
||||
override val checkClassScopesForAnnotationCompatibility = true
|
||||
|
||||
override fun skipCheckingAnnotationsOfActualClassMember(actualMember: DeclarationSymbolMarker): Boolean {
|
||||
return (actualMember.asSymbol().fir as? FirMemberDeclaration)?.isActual == true
|
||||
}
|
||||
|
||||
override fun findPotentialExpectClassMembersForActual(
|
||||
expectClass: RegularClassSymbolMarker,
|
||||
actualClass: RegularClassSymbolMarker,
|
||||
actualMember: DeclarationSymbolMarker,
|
||||
): Map<FirBasedSymbol<*>, ExpectActualCompatibility<*>> {
|
||||
val mapping = actualClass.asSymbol().fir.memberExpectForActual
|
||||
return mapping?.get(actualMember to expectClass) ?: emptyMap()
|
||||
}
|
||||
|
||||
object Factory : FirExpectActualMatchingContextFactory {
|
||||
override fun create(
|
||||
session: FirSession, scopeSession: ScopeSession,
|
||||
|
||||
Reference in New Issue
Block a user