diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/caches/resolve/CompositeResolverForModuleFactory.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/caches/resolve/CompositeResolverForModuleFactory.kt index ef08bebbd91..7627ec01f35 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/caches/resolve/CompositeResolverForModuleFactory.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/caches/resolve/CompositeResolverForModuleFactory.kt @@ -236,12 +236,13 @@ class CompositeAnalyzerServices(val services: List) : PlatformConfigurator { - // TODO(dsavvinov): this is actually a hack. Review callers of that method, think about how to refactor it - // Unfortunately, clients of that container will inject additional services into them, - // without knowing about composite platform (see LocalClassifierAnalyzer), so we can't just use [createContainerForCompositePlatform] - // here. Hopefully, platformSpecific container won't at least make things worse. override val platformSpecificContainer: StorageComponentContainer - get() = CommonPlatformAnalyzerServices.platformConfigurator.platformSpecificContainer + get() = composeContainer(this::class.java.simpleName) { + configureDefaultCheckers() + for (configurator in componentConfigurators) { + (configurator as PlatformConfiguratorBase).configureExtensionsAndCheckers(this) + } + } override fun configureModuleComponents(container: StorageComponentContainer) { componentConfigurators.forEach { it.configureModuleComponents(container) } diff --git a/idea/testData/multiplatform/platformSpecificChecksInCommon/common/common.kt b/idea/testData/multiplatform/platformSpecificChecksInCommon/common/common.kt new file mode 100644 index 00000000000..591ba308e21 --- /dev/null +++ b/idea/testData/multiplatform/platformSpecificChecksInCommon/common/common.kt @@ -0,0 +1,7 @@ +// !DIAGNOSTICS: -ABSTRACT_MEMBER_NOT_IMPLEMENTED + +// Implementing kotlin functions isn't allowed on JS +class A : (Int) -> Int + +// Array as upper bound isn't allowed on JVM +class B<T : Array<*>> \ No newline at end of file diff --git a/idea/testData/multiplatform/platformSpecificChecksInCommon/dependencies.txt b/idea/testData/multiplatform/platformSpecificChecksInCommon/dependencies.txt new file mode 100644 index 00000000000..2728b311acc --- /dev/null +++ b/idea/testData/multiplatform/platformSpecificChecksInCommon/dependencies.txt @@ -0,0 +1 @@ +MODULE common { platform=[JS, JVM, Native] } diff --git a/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/MultiplatformAnalysisTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/MultiplatformAnalysisTestGenerated.java index 64aceb5f577..e4101e3904b 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/MultiplatformAnalysisTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/caches/resolve/MultiplatformAnalysisTestGenerated.java @@ -94,6 +94,11 @@ public class MultiplatformAnalysisTestGenerated extends AbstractMultiplatformAna runTest("idea/testData/multiplatform/multilevelParents/"); } + @TestMetadata("platformSpecificChecksInCommon") + public void testPlatformSpecificChecksInCommon() throws Exception { + runTest("idea/testData/multiplatform/platformSpecificChecksInCommon/"); + } + @TestMetadata("qualifiedReceiver") public void testQualifiedReceiver() throws Exception { runTest("idea/testData/multiplatform/qualifiedReceiver/");