[SLC] fix multifile-classes in multiplatform case
Multifile-class can contain not only files from the same module, but also files from the common part. This commit also fixes KotlinByModulesResolutionScopeProvider as it should provide all transitive dependencies ^KT-64714 Fixed
This commit is contained in:
committed by
Space Team
parent
fc519b2339
commit
c14c12479c
+10
-6
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Copyright 2010-2024 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||
*/
|
||||
|
||||
@@ -7,15 +7,19 @@ package org.jetbrains.kotlin.analysis.providers.impl
|
||||
|
||||
import com.intellij.psi.search.GlobalSearchScope
|
||||
import org.jetbrains.kotlin.analysis.project.structure.KtModule
|
||||
import org.jetbrains.kotlin.analysis.project.structure.allDirectDependencies
|
||||
import org.jetbrains.kotlin.analysis.providers.KotlinResolutionScopeProvider
|
||||
import org.jetbrains.kotlin.utils.topologicalSort
|
||||
|
||||
public class KotlinByModulesResolutionScopeProvider : KotlinResolutionScopeProvider() {
|
||||
override fun getResolutionScope(module: KtModule): GlobalSearchScope {
|
||||
val allModules = buildList {
|
||||
add(module)
|
||||
addAll(module.allDirectDependencies())
|
||||
val allModules = topologicalSort(listOf(module)) {
|
||||
buildList {
|
||||
addAll(directDependsOnDependencies)
|
||||
addAll(directFriendDependencies)
|
||||
addAll(directRegularDependencies)
|
||||
}
|
||||
}
|
||||
|
||||
return GlobalSearchScope.union(allModules.map { it.contentScope })
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+5
-1
@@ -40,7 +40,7 @@ abstract class KotlinAsJavaSupportBase<TModule : Any>(protected val project: Pro
|
||||
return when {
|
||||
facadeFiles.none(KtFile::hasTopLevelCallables) -> null
|
||||
facadeFiles.none(KtFile::isCompiled) -> {
|
||||
LightClassCachedValue(createInstanceOfLightFacade(facadeFqName, facadeFiles), outOfBlockModificationTracker(file))
|
||||
LightClassCachedValue(createInstanceOfLightFacade(facadeFqName, module, facadeFiles), outOfBlockModificationTracker(file))
|
||||
}
|
||||
|
||||
facadeFiles.all(KtFile::isCompiled) -> {
|
||||
@@ -68,6 +68,10 @@ abstract class KotlinAsJavaSupportBase<TModule : Any>(protected val project: Pro
|
||||
protected abstract val TModule.contentSearchScope: GlobalSearchScope
|
||||
|
||||
protected abstract fun createInstanceOfLightFacade(facadeFqName: FqName, files: List<KtFile>): KtLightClassForFacade?
|
||||
protected open fun createInstanceOfLightFacade(facadeFqName: FqName, module: TModule, files: List<KtFile>): KtLightClassForFacade? {
|
||||
return createInstanceOfLightFacade(facadeFqName, files)
|
||||
}
|
||||
|
||||
protected abstract fun createInstanceOfDecompiledLightFacade(facadeFqName: FqName, files: List<KtFile>): KtLightClassForFacade?
|
||||
|
||||
protected open fun projectWideOutOfBlockModificationTracker(): ModificationTracker {
|
||||
|
||||
+13
-1
@@ -141,10 +141,22 @@ class SymbolKotlinAsJavaSupport(project: Project) : KotlinAsJavaSupportBase<KtMo
|
||||
|
||||
override fun createInstanceOfLightFacade(facadeFqName: FqName, files: List<KtFile>): KtLightClassForFacade? {
|
||||
val module = files.first().getModuleIfSupportEnabled() ?: return null
|
||||
return createInstanceOfLightFacade(facadeFqName, module, files)
|
||||
}
|
||||
|
||||
override fun createInstanceOfLightFacade(facadeFqName: FqName, module: KtModule, files: List<KtFile>): KtLightClassForFacade? {
|
||||
return SymbolLightClassForFacade(facadeFqName, files, module)
|
||||
}
|
||||
|
||||
override val KtModule.contentSearchScope: GlobalSearchScope get() = this.contentScope
|
||||
override val KtModule.contentSearchScope: GlobalSearchScope
|
||||
get() = GlobalSearchScope.union(
|
||||
buildList {
|
||||
add(contentScope)
|
||||
for (dependency in transitiveDependsOnDependencies) {
|
||||
add(dependency.contentScope)
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
override fun facadeIsApplicable(module: KtModule, file: KtFile): Boolean =
|
||||
module.isFromSourceOrLibraryBinary() && module.isLightClassesEnabled()
|
||||
|
||||
+33
-12
@@ -1,22 +1,43 @@
|
||||
public final class MyFacadeKt /* mypack.MyFacadeKt*/ {
|
||||
@org.jetbrains.annotations.NotNull()
|
||||
public static final mypack.IntermediateClassWithActualization getIntermediateVariable1();// getIntermediateVariable1()
|
||||
@org.jetbrains.annotations.NotNull()
|
||||
public static final mypack.IntermediateClassWithActualization getCommonVariable1();// getCommonVariable1()
|
||||
|
||||
@org.jetbrains.annotations.NotNull()
|
||||
public static final mypack.IntermediateClassWithActualization getIntermediateVariable2();// getIntermediateVariable2()
|
||||
@org.jetbrains.annotations.NotNull()
|
||||
public static final mypack.IntermediateClassWithActualization getCommonVariable2();// getCommonVariable2()
|
||||
|
||||
@org.jetbrains.annotations.NotNull()
|
||||
public static final mypack.IntermediateClassWithActualization getIntermediateVariableWithActualization();// getIntermediateVariableWithActualization()
|
||||
@org.jetbrains.annotations.NotNull()
|
||||
public static final mypack.IntermediateClassWithActualization getCommonVariableWithActualization();// getCommonVariableWithActualization()
|
||||
|
||||
public static final void intermediateFunction1(@org.jetbrains.annotations.NotNull() mypack.IntermediateClassWithActualization, @org.jetbrains.annotations.NotNull() mypack.IntermediateClassWithActualization, @org.jetbrains.annotations.NotNull() mypack.MyCommonClass, @org.jetbrains.annotations.NotNull() mypack.MyIntermediateClass);// intermediateFunction1(mypack.IntermediateClassWithActualization, mypack.IntermediateClassWithActualization, mypack.MyCommonClass, mypack.MyIntermediateClass)
|
||||
@org.jetbrains.annotations.NotNull()
|
||||
public static final mypack.IntermediateClassWithActualization getIntermediateVariable1();// getIntermediateVariable1()
|
||||
|
||||
public static final void intermediateFunction2(@org.jetbrains.annotations.NotNull() mypack.IntermediateClassWithActualization, @org.jetbrains.annotations.NotNull() mypack.IntermediateClassWithActualization, @org.jetbrains.annotations.NotNull() mypack.MyCommonClass, @org.jetbrains.annotations.NotNull() mypack.MyIntermediateClass);// intermediateFunction2(mypack.IntermediateClassWithActualization, mypack.IntermediateClassWithActualization, mypack.MyCommonClass, mypack.MyIntermediateClass)
|
||||
@org.jetbrains.annotations.NotNull()
|
||||
public static final mypack.IntermediateClassWithActualization getIntermediateVariable2();// getIntermediateVariable2()
|
||||
|
||||
public static final void intermediateFunctionWithActualization(@org.jetbrains.annotations.NotNull() mypack.IntermediateClassWithActualization, @org.jetbrains.annotations.NotNull() mypack.IntermediateClassWithActualization, @org.jetbrains.annotations.NotNull() mypack.MyCommonClass, @org.jetbrains.annotations.NotNull() mypack.MyIntermediateClass);// intermediateFunctionWithActualization(mypack.IntermediateClassWithActualization, mypack.IntermediateClassWithActualization, mypack.MyCommonClass, mypack.MyIntermediateClass)
|
||||
@org.jetbrains.annotations.NotNull()
|
||||
public static final mypack.IntermediateClassWithActualization getIntermediateVariableWithActualization();// getIntermediateVariableWithActualization()
|
||||
|
||||
public static final void setIntermediateVariable1(@org.jetbrains.annotations.NotNull() mypack.IntermediateClassWithActualization);// setIntermediateVariable1(mypack.IntermediateClassWithActualization)
|
||||
public static final void commonFunction1(@org.jetbrains.annotations.NotNull() mypack.IntermediateClassWithActualization, @org.jetbrains.annotations.NotNull() mypack.MyCommonClass);// commonFunction1(mypack.IntermediateClassWithActualization, mypack.MyCommonClass)
|
||||
|
||||
public static final void setIntermediateVariable2(@org.jetbrains.annotations.NotNull() mypack.IntermediateClassWithActualization);// setIntermediateVariable2(mypack.IntermediateClassWithActualization)
|
||||
public static final void commonFunction2(@org.jetbrains.annotations.NotNull() mypack.IntermediateClassWithActualization, @org.jetbrains.annotations.NotNull() mypack.MyCommonClass);// commonFunction2(mypack.IntermediateClassWithActualization, mypack.MyCommonClass)
|
||||
|
||||
public static final void setIntermediateVariableWithActualization(@org.jetbrains.annotations.NotNull() mypack.IntermediateClassWithActualization);// setIntermediateVariableWithActualization(mypack.IntermediateClassWithActualization)
|
||||
public static final void commonFunctionWithActualization(@org.jetbrains.annotations.NotNull() mypack.IntermediateClassWithActualization, @org.jetbrains.annotations.NotNull() mypack.MyCommonClass);// commonFunctionWithActualization(mypack.IntermediateClassWithActualization, mypack.MyCommonClass)
|
||||
|
||||
public static final void intermediateFunction1(@org.jetbrains.annotations.NotNull() mypack.IntermediateClassWithActualization, @org.jetbrains.annotations.NotNull() mypack.IntermediateClassWithActualization, @org.jetbrains.annotations.NotNull() mypack.MyCommonClass, @org.jetbrains.annotations.NotNull() mypack.MyIntermediateClass);// intermediateFunction1(mypack.IntermediateClassWithActualization, mypack.IntermediateClassWithActualization, mypack.MyCommonClass, mypack.MyIntermediateClass)
|
||||
|
||||
public static final void intermediateFunction2(@org.jetbrains.annotations.NotNull() mypack.IntermediateClassWithActualization, @org.jetbrains.annotations.NotNull() mypack.IntermediateClassWithActualization, @org.jetbrains.annotations.NotNull() mypack.MyCommonClass, @org.jetbrains.annotations.NotNull() mypack.MyIntermediateClass);// intermediateFunction2(mypack.IntermediateClassWithActualization, mypack.IntermediateClassWithActualization, mypack.MyCommonClass, mypack.MyIntermediateClass)
|
||||
|
||||
public static final void intermediateFunctionWithActualization(@org.jetbrains.annotations.NotNull() mypack.IntermediateClassWithActualization, @org.jetbrains.annotations.NotNull() mypack.IntermediateClassWithActualization, @org.jetbrains.annotations.NotNull() mypack.MyCommonClass, @org.jetbrains.annotations.NotNull() mypack.MyIntermediateClass);// intermediateFunctionWithActualization(mypack.IntermediateClassWithActualization, mypack.IntermediateClassWithActualization, mypack.MyCommonClass, mypack.MyIntermediateClass)
|
||||
|
||||
public static final void setCommonVariable1(@org.jetbrains.annotations.NotNull() mypack.IntermediateClassWithActualization);// setCommonVariable1(mypack.IntermediateClassWithActualization)
|
||||
|
||||
public static final void setCommonVariable2(@org.jetbrains.annotations.NotNull() mypack.IntermediateClassWithActualization);// setCommonVariable2(mypack.IntermediateClassWithActualization)
|
||||
|
||||
public static final void setCommonVariableWithActualization(@org.jetbrains.annotations.NotNull() mypack.IntermediateClassWithActualization);// setCommonVariableWithActualization(mypack.IntermediateClassWithActualization)
|
||||
|
||||
public static final void setIntermediateVariable1(@org.jetbrains.annotations.NotNull() mypack.IntermediateClassWithActualization);// setIntermediateVariable1(mypack.IntermediateClassWithActualization)
|
||||
|
||||
public static final void setIntermediateVariable2(@org.jetbrains.annotations.NotNull() mypack.IntermediateClassWithActualization);// setIntermediateVariable2(mypack.IntermediateClassWithActualization)
|
||||
|
||||
public static final void setIntermediateVariableWithActualization(@org.jetbrains.annotations.NotNull() mypack.IntermediateClassWithActualization);// setIntermediateVariableWithActualization(mypack.IntermediateClassWithActualization)
|
||||
}
|
||||
|
||||
+42
@@ -1,7 +1,25 @@
|
||||
public final class MyFacadeKt /* mypack.MyFacadeKt*/ {
|
||||
@org.jetbrains.annotations.NotNull()
|
||||
public static final mypack.MyJvmClass getCommonVariable1();// getCommonVariable1()
|
||||
|
||||
@org.jetbrains.annotations.NotNull()
|
||||
public static final mypack.MyJvmClass getCommonVariable2();// getCommonVariable2()
|
||||
|
||||
@org.jetbrains.annotations.NotNull()
|
||||
public static final mypack.MyJvmClass getCommonVariableWithActualization();// getCommonVariableWithActualization()
|
||||
|
||||
@org.jetbrains.annotations.NotNull()
|
||||
public static final mypack.MyJvmClass getCommonVariableWithActualization();// getCommonVariableWithActualization()
|
||||
|
||||
@org.jetbrains.annotations.NotNull()
|
||||
public static final mypack.MyJvmClass getIntermediateVariable1();// getIntermediateVariable1()
|
||||
|
||||
@org.jetbrains.annotations.NotNull()
|
||||
public static final mypack.MyJvmClass getIntermediateVariable2();// getIntermediateVariable2()
|
||||
|
||||
@org.jetbrains.annotations.NotNull()
|
||||
public static final mypack.MyJvmClass getIntermediateVariableWithActualization();// getIntermediateVariableWithActualization()
|
||||
|
||||
@org.jetbrains.annotations.NotNull()
|
||||
public static final mypack.MyJvmClass getIntermediateVariableWithActualization();// getIntermediateVariableWithActualization()
|
||||
|
||||
@@ -11,16 +29,40 @@ public final class MyFacadeKt /* mypack.MyFacadeKt*/ {
|
||||
@org.jetbrains.annotations.NotNull()
|
||||
public static final mypack.MyJvmClass getJvmVariable2();// getJvmVariable2()
|
||||
|
||||
public static final void commonFunction1(@org.jetbrains.annotations.NotNull() mypack.MyJvmClass, @org.jetbrains.annotations.NotNull() mypack.MyCommonClass);// commonFunction1(mypack.MyJvmClass, mypack.MyCommonClass)
|
||||
|
||||
public static final void commonFunction2(@org.jetbrains.annotations.NotNull() mypack.MyJvmClass, @org.jetbrains.annotations.NotNull() mypack.MyCommonClass);// commonFunction2(mypack.MyJvmClass, mypack.MyCommonClass)
|
||||
|
||||
public static final void commonFunctionWithActualization(@org.jetbrains.annotations.NotNull() mypack.MyJvmClass, @org.jetbrains.annotations.NotNull() mypack.MyCommonClass);// commonFunctionWithActualization(mypack.MyJvmClass, mypack.MyCommonClass)
|
||||
|
||||
public static final void commonFunctionWithActualization(@org.jetbrains.annotations.NotNull() mypack.MyJvmClass, @org.jetbrains.annotations.NotNull() mypack.MyJvmClass, @org.jetbrains.annotations.NotNull() mypack.MyCommonClass, @org.jetbrains.annotations.NotNull() mypack.MyIntermediateClass);// commonFunctionWithActualization(mypack.MyJvmClass, mypack.MyJvmClass, mypack.MyCommonClass, mypack.MyIntermediateClass)
|
||||
|
||||
public static final void intermediateFunction1(@org.jetbrains.annotations.NotNull() mypack.MyJvmClass, @org.jetbrains.annotations.NotNull() mypack.MyJvmClass, @org.jetbrains.annotations.NotNull() mypack.MyCommonClass, @org.jetbrains.annotations.NotNull() mypack.MyIntermediateClass);// intermediateFunction1(mypack.MyJvmClass, mypack.MyJvmClass, mypack.MyCommonClass, mypack.MyIntermediateClass)
|
||||
|
||||
public static final void intermediateFunction2(@org.jetbrains.annotations.NotNull() mypack.MyJvmClass, @org.jetbrains.annotations.NotNull() mypack.MyJvmClass, @org.jetbrains.annotations.NotNull() mypack.MyCommonClass, @org.jetbrains.annotations.NotNull() mypack.MyIntermediateClass);// intermediateFunction2(mypack.MyJvmClass, mypack.MyJvmClass, mypack.MyCommonClass, mypack.MyIntermediateClass)
|
||||
|
||||
public static final void intermediateFunctionWithActualization(@org.jetbrains.annotations.NotNull() mypack.MyJvmClass, @org.jetbrains.annotations.NotNull() mypack.MyJvmClass, @org.jetbrains.annotations.NotNull() mypack.MyCommonClass, @org.jetbrains.annotations.NotNull() mypack.MyIntermediateClass);// intermediateFunctionWithActualization(mypack.MyJvmClass, mypack.MyJvmClass, mypack.MyCommonClass, mypack.MyIntermediateClass)
|
||||
|
||||
public static final void intermediateFunctionWithActualization(@org.jetbrains.annotations.NotNull() mypack.MyJvmClass, @org.jetbrains.annotations.NotNull() mypack.MyJvmClass, @org.jetbrains.annotations.NotNull() mypack.MyCommonClass, @org.jetbrains.annotations.NotNull() mypack.MyIntermediateClass);// intermediateFunctionWithActualization(mypack.MyJvmClass, mypack.MyJvmClass, mypack.MyCommonClass, mypack.MyIntermediateClass)
|
||||
|
||||
public static final void jvmFunction1(@org.jetbrains.annotations.NotNull() mypack.MyJvmClass, @org.jetbrains.annotations.NotNull() mypack.MyJvmClass, @org.jetbrains.annotations.NotNull() mypack.MyCommonClass, @org.jetbrains.annotations.NotNull() mypack.MyIntermediateClass, @org.jetbrains.annotations.NotNull() mypack.MyJvmClass);// jvmFunction1(mypack.MyJvmClass, mypack.MyJvmClass, mypack.MyCommonClass, mypack.MyIntermediateClass, mypack.MyJvmClass)
|
||||
|
||||
public static final void jvmFunction2(@org.jetbrains.annotations.NotNull() mypack.MyJvmClass, @org.jetbrains.annotations.NotNull() mypack.MyJvmClass, @org.jetbrains.annotations.NotNull() mypack.MyCommonClass, @org.jetbrains.annotations.NotNull() mypack.MyIntermediateClass, @org.jetbrains.annotations.NotNull() mypack.MyJvmClass);// jvmFunction2(mypack.MyJvmClass, mypack.MyJvmClass, mypack.MyCommonClass, mypack.MyIntermediateClass, mypack.MyJvmClass)
|
||||
|
||||
public static final void setCommonVariable1(@org.jetbrains.annotations.NotNull() mypack.MyJvmClass);// setCommonVariable1(mypack.MyJvmClass)
|
||||
|
||||
public static final void setCommonVariable2(@org.jetbrains.annotations.NotNull() mypack.MyJvmClass);// setCommonVariable2(mypack.MyJvmClass)
|
||||
|
||||
public static final void setCommonVariableWithActualization(@org.jetbrains.annotations.NotNull() mypack.MyJvmClass);// setCommonVariableWithActualization(mypack.MyJvmClass)
|
||||
|
||||
public static final void setCommonVariableWithActualization(@org.jetbrains.annotations.NotNull() mypack.MyJvmClass);// setCommonVariableWithActualization(mypack.MyJvmClass)
|
||||
|
||||
public static final void setIntermediateVariable1(@org.jetbrains.annotations.NotNull() mypack.MyJvmClass);// setIntermediateVariable1(mypack.MyJvmClass)
|
||||
|
||||
public static final void setIntermediateVariable2(@org.jetbrains.annotations.NotNull() mypack.MyJvmClass);// setIntermediateVariable2(mypack.MyJvmClass)
|
||||
|
||||
public static final void setIntermediateVariableWithActualization(@org.jetbrains.annotations.NotNull() mypack.MyJvmClass);// setIntermediateVariableWithActualization(mypack.MyJvmClass)
|
||||
|
||||
public static final void setIntermediateVariableWithActualization(@org.jetbrains.annotations.NotNull() mypack.MyJvmClass);// setIntermediateVariableWithActualization(mypack.MyJvmClass)
|
||||
|
||||
public static final void setJvmVariable1(@org.jetbrains.annotations.NotNull() mypack.MyJvmClass);// setJvmVariable1(mypack.MyJvmClass)
|
||||
|
||||
Reference in New Issue
Block a user