[FIR] Report redeclaration across KMP source sets
^KT-57585 Fixed Related tests: - MultiPlatformIntegrationTestGenerated.testSimpleNoImplKeywordOnTopLevelFunction - MultiPlatformIntegrationTestGenerated.testWeakIncompatibilityWithoutActualModifier - FirPsiJsKlibDiagnosticsTestGenerated.testSignatureClash_MPP - LLFirPreresolvedReversedDiagnosticCompilerFirTestDataTestGenerated$ResolveWithStdlib$MultiModule.testFakeOverrides - DiagnosticCompilerTestFE10TestdataTestGenerated$Tests$Multiplatform: - LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated$Tests$Multiplatform - FirOldFrontendMPPDiagnosticsWithPsiTestGenerated - FirOldFrontendMPPDiagnosticsWithLightTreeTestGenerated - FirLibraryModuleDeclarationResolveTestGenerated.testDataClass - org.jetbrains.kotlin.idea.k2.highlighting.K2HighlightingMetaInfoTestGenerated$Diagnostics.testDataClassFromLibrary - org.jetbrains.fir.uast.test.FirLightClassBehaviorTest.testContainingFile - org.jetbrains.fir.uast.test.FirLightClassBehaviorTest.testAnnotationParameterReference - org.jetbrains.uast.test.kotlin.org.jetbrains.uast.test.kotlin.comparison.FE1LightClassBehaviorTest.testContainingFile
This commit is contained in:
+12
@@ -1740,6 +1740,18 @@ public class FirOldFrontendMPPDiagnosticsWithLightTreeTestGenerated extends Abst
|
||||
runTest("compiler/testData/diagnostics/tests/multiplatform/hmpp/ambiguousActuals.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("hmppRedeclaration.kt")
|
||||
public void testHmppRedeclaration() {
|
||||
runTest("compiler/testData/diagnostics/tests/multiplatform/hmpp/hmppRedeclaration.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("hmppRedeclarationWithExpectActualPair.kt")
|
||||
public void testHmppRedeclarationWithExpectActualPair() {
|
||||
runTest("compiler/testData/diagnostics/tests/multiplatform/hmpp/hmppRedeclarationWithExpectActualPair.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("intermediateActualHasAdditionalSupertypes.kt")
|
||||
public void testIntermediateActualHasAdditionalSupertypes() {
|
||||
|
||||
+12
@@ -1740,6 +1740,18 @@ public class FirOldFrontendMPPDiagnosticsWithPsiTestGenerated extends AbstractFi
|
||||
runTest("compiler/testData/diagnostics/tests/multiplatform/hmpp/ambiguousActuals.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("hmppRedeclaration.kt")
|
||||
public void testHmppRedeclaration() {
|
||||
runTest("compiler/testData/diagnostics/tests/multiplatform/hmpp/hmppRedeclaration.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("hmppRedeclarationWithExpectActualPair.kt")
|
||||
public void testHmppRedeclarationWithExpectActualPair() {
|
||||
runTest("compiler/testData/diagnostics/tests/multiplatform/hmpp/hmppRedeclarationWithExpectActualPair.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("intermediateActualHasAdditionalSupertypes.kt")
|
||||
public void testIntermediateActualHasAdditionalSupertypes() {
|
||||
|
||||
+9
-2
@@ -16,7 +16,6 @@ import org.jetbrains.kotlin.fir.analysis.checkers.declaration.FirNameConflictsTr
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.declaration.isEffectivelyFinal
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
||||
import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedDeclarationStatusImpl.Companion.DEFAULT_STATUS_FOR_STATUSLESS_DECLARATIONS
|
||||
import org.jetbrains.kotlin.fir.declarations.impl.FirResolvedDeclarationStatusImpl.Companion.DEFAULT_STATUS_FOR_SUSPEND_MAIN_FUNCTION
|
||||
import org.jetbrains.kotlin.fir.declarations.impl.modifiersRepresentation
|
||||
@@ -439,6 +438,10 @@ private fun FirClassLikeSymbol<*>.expandedClassWithConstructorsScope(context: Ch
|
||||
}
|
||||
}
|
||||
|
||||
private fun shouldCheckForMultiplatformRedeclaration(dependency: FirBasedSymbol<*>, dependent: FirBasedSymbol<*>): Boolean =
|
||||
dependent.moduleData.allDependsOnDependencies.contains(dependency.moduleData) &&
|
||||
dependency.resolvedStatus?.isExpect != true // ACTUAL_MISSING takes care of this case
|
||||
|
||||
private fun FirDeclarationCollector<FirBasedSymbol<*>>.collectTopLevelConflict(
|
||||
declaration: FirBasedSymbol<*>,
|
||||
declarationPresentation: String,
|
||||
@@ -448,7 +451,11 @@ private fun FirDeclarationCollector<FirBasedSymbol<*>>.collectTopLevelConflict(
|
||||
conflictingFile: FirFile? = null,
|
||||
) {
|
||||
conflictingSymbol.lazyResolveToPhase(FirResolvePhase.STATUS)
|
||||
if (conflictingSymbol == declaration || declaration.moduleData != conflictingSymbol.moduleData) return
|
||||
if (conflictingSymbol == declaration) return
|
||||
if (
|
||||
declaration.moduleData != conflictingSymbol.moduleData &&
|
||||
!shouldCheckForMultiplatformRedeclaration(declaration, conflictingSymbol)
|
||||
) return
|
||||
val actualConflictingPresentation = conflictingPresentation ?: FirRedeclarationPresenter.represent(conflictingSymbol)
|
||||
if (actualConflictingPresentation != declarationPresentation) return
|
||||
val actualConflictingFile =
|
||||
|
||||
Reference in New Issue
Block a user